C++ Firebase wrapper?

C++ Firebase wrapper?

本文关键字:wrapper Firebase C++      更新时间:2023-10-16

我正在尝试创建一个从Raspberry Pi运行并连接到Firebase数据库的应用程序。我已经用C 编写了这个应用程序,我想知道是否有一种简单的方法。

我用模块pyrebase在python中做到了:

import pyrebase
def firbaseLogIn():
    directory = os.getcwd()
    serviceAccount = directory + "xxx.json"
    config = {
        "apiKey": "xxx",
        "authDomain": "xxxx",
        "databaseURL": "https://example.com",
        "projectId": "xxxx",
        "storageBucket": "xx.example.com",
        "serviceAccount": serviceAccount
    }
    firebase = pyrebase.initialize_app(config)
    # Log the user in
    email = "xxx@gmail.com"
    password = "xxx"
    auth = firebase.auth()
    user = auth.sign_in_with_email_and_password(email, password)

    # Get a reference to the database service
    db = firebase.database()
    # Pass the user's idToken to the push method
    userInfo = db.child("users").child(user['localId']).get()
    print(userInfo.val())
    return;

它可以正常工作。但是,当我尝试使用C SDK类似的事情并遵循DOC时,该应用程序就无法使用。我不知道这是因为它仅适用于iOS游戏(实际上说您需要Xcode),或者因为我无法正确遵循文档。该代码不会丢任何错误。它打印了我正确签名的,但用户信息不正确。例如,UID是电子邮件,电话号码为1-888-897-5309,显然不正确。

这是我在C 中尝试的:

#include "firebase/app.h"
firebase::App* configureFirebaseApp(std::string appcwd){
    std::string stringAppID = appcwd + "xxx.json";
    const char* appID = &stringAppID[0];
    firebase::AppOptions appOptions = firebase::AppOptions();
    appOptions.set_api_key("xxx");
    appOptions.set_database_url("https://xxx.xxx.com");
    appOptions.set_project_id("xxx");
    appOptions.set_storage_bucket("xxxxx.xxxx.com");
    appOptions.set_app_id(appID);
    return firebase::App::Create(appOptions);
}
#include "firebase/auth.h"
void FirebaseLogIn(std::string appcwd){
    const char email[] = "xxxxx@gmail.com";
    const char password[] = "xxxxx";
    std::cout<<"Configuring app...n";
    firebase::App* app = configureFirebaseApp(appcwd);
    // Get the Auth class for your App.
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    std::cout<<"Signing in...n";
    // Request anonymous sign-in and wait until asynchronous call completes.
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithEmailAndPassword(email, password);
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::User* user = *result.result();
        printf("Log in user succeeded for email %sn", user->email().c_str());
        std::cout << "Name: " << user->display_name() << std::endl;
        std::cout << "uid: " << user->uid() << std::endl;
        std::cout << "email: " << user->email() << std::endl;
        std::cout << "phone number: " << user->phone_number() << std::endl;
      } else {
        printf("Log in user failed with error '%s'n", result.error_message());
      }
    }

感谢您提供的任何帮助。

C 的官方firebase SDK是本机Android和iOS SDK的包装器。因此,它只会在这些平台上运行。

如果您针对其他平台,则需要其他库。通常,这样的库包裹了特定产品的Firebase REST API(例如Pyrebase在您的情况下为数据库做的),这使它们更有可能在平台上工作。