将 Firebase 添加到您的 C++ 项目

Firebase C++ SDK 提供了以 Firebase SDK 为基础的 C++ 接口,可为您的 C++ 游戏提供强力支持。

您只需使用 C++ 代码就能访问 Firebase,无需编写任何平台原生代码。该 Firebase SDK 还将 Firebase 使用的许多编程语言所特有的习语转译为 C++ 开发人员更为熟悉的接口。

如需详细了解如何使用 Firebase 为您的游戏提供强力支持,请访问我们的 Firebase 游戏页面

已将 Firebase 添加到您的 C++ 项目中?确保您使用的是最新版 Firebase C++ SDK


前提条件

  • 安装以下软件:

    • Xcode 13.3.1 或更高版本
    • CocoaPods 1.12.0 或更高版本
  • 确保您的项目以下列版本或更高版本的平台为目标:

    • iOS 13
    • tvOS 13
  • 设置一台实体设备或使用模拟器运行您的应用。

  • 使用您的 Google 账号登录 Firebase

第 2 步:创建 Firebase 项目

您需要先创建一个要关联到 C++ 项目的 Firebase 项目,然后才能将 Firebase 添加到 C++ 项目。请访问了解 Firebase 项目以了解详情。

第 3 步:在 Firebase 中注册您的应用

如需在 Apple 应用中使用 Firebase,您需要在 Firebase 项目中注册您的应用。注册应用的过程通常称为将应用“添加”到项目中。

  1. 前往 Firebase 控制台

  2. 在项目概览页面的中心位置,点击 iOS+ 图标,启动设置工作流。

    如果您已向 Firebase 项目添加了应用,请点击添加应用以显示平台选项。

  3. 软件包 ID 字段中输入应用的软件包 ID。

  4. (可选)输入其他应用信息:应用别名App Store ID

  5. 点击注册应用

第 4 步:添加 Firebase 配置文件

  1. 点击下载 GoogleService-Info.plist 以获取 Firebase Apple 平台配置文件。

  2. 在 IDE 中打开您的 C++ 项目,然后将配置文件拖放到 C++ 项目的根目录中。

  3. 如果出现提示,请选择将配置文件添加到所有目标。

您已完成在 Firebase 控制台中的设置任务。请继续执行下面的添加 Firebase C++ SDK 步骤。

第 5 步:添加 Firebase C++ SDK

本部分中的步骤说明了如何将受支持的 Firebase 产品添加到 Firebase C++ 项目。

  1. 下载 Firebase C++ SDK,然后将此 SDK 解压缩到合适的位置。

    Firebase C++ SDK 并不局限于特定平台,但包含平台专用库。

  2. 从解压缩的 SDK 添加 Firebase Pod

    1. 如果您没有 Podfile,请创建一个:

      cd your-app-directory
      pod init

    2. 将想要在应用中使用的 Firebase pod 添加到 Podfile。

      已启用 Analytics

      # Add the Firebase pod for Google Analytics
      pod 'FirebaseAnalytics'
      # Add the pods for any other Firebase products you want to use in your app # For example, to use Firebase Authentication and Firebase Realtime Database pod 'FirebaseAuth' pod 'FirebaseDatabase'

      未启用 Analytics

      # Add the pods for the Firebase products you want to use in your app
      # For example, to use Firebase Authentication and Firebase Realtime Database
      pod 'FirebaseAuth'
      pod 'FirebaseDatabase'
    3. 安装 Pod,然后在 Xcode 中打开 .xcworkspace

      pod install
      open your-app.xcworkspace

  3. 从解压缩的 SDK 添加 Firebase 框架

    如需添加这些框架,最简单的方法通常是将它们从 Finder 窗口直接拖放到 Xcode 的“项目导航器”窗格(默认情况下为最左侧窗格;或点击 Xcode 左上角的文件图标)中

    1. 如需使用任何 Firebase 产品,必须添加 Firebase C++ 框架 firebase.framework

    2. 为您要使用的每个 Firebase 产品添加框架。例如,如需使用 Firebase Authentication,请添加 firebase_auth.framework

  4. 返回 Firebase 控制台,在设置工作流中,点击下一步

  5. 如果您添加了 Analytics,请运行您的应用,向 Firebase 发送您已成功集成 Firebase 的验证信息。如果您没有添加 Analytics,则可以跳过验证步骤。

    您的设备日志将显示 Firebase 验证信息,表明初始化已完成。如果您在具有网络访问权限的模拟器上运行应用,则 Firebase 控制台会通知您应用连接已完成。

大功告成!您的 C++ 应用现已注册,并配置为使用 Firebase 产品。

可用的库

如需详细了解 C++ Firebase 库,请查看参考文档以及 GitHub 上的开源 SDK 版本。

适用于 Apple 平台的库

请注意,此设置页面的 Android 版本上列出了适用于 Android 的 C++ 库。

每个 Firebase 产品都有不同的依赖项。请务必将所需 Firebase 产品的所有已列出依赖项都添加到 Podfile 和 C++ 项目中。

每个 Firebase 产品可能仅支持部分 Apple 操作系统平台(iOS、tvOS 等)。请查看详细了解 C++ 和 Firebase,了解各个库支持的平台。

Firebase 产品 框架和 Pod
AdMob (需要)firebase.framework
firebase_admob.framework
(需要)firebase_analytics.framework

pod 'FirebaseAdMob', '11.6.0'
(需要)pod 'FirebaseAnalytics', '11.6.0'
Analytics (需要)firebase.framework
firebase_analytics.framework

pod 'FirebaseAnalytics', '11.6.0'
App Check (需要)firebase.framework
firebase_app_check.framework

pod 'FirebaseAppCheck', '11.6.0'
Authentication (需要)firebase.framework
firebase_auth.framework

pod 'FirebaseAuth', '11.6.0'
Cloud Firestore (需要)firebase.framework
firebase_firestore.framework
firebase_auth.framework

pod 'FirebaseFirestore', '11.6.0'
pod 'FirebaseAuth', '11.6.0'
Cloud Functions (需要)firebase.framework
firebase_functions.framework

pod 'FirebaseFunctions', '11.6.0'
Cloud Messaging (需要)firebase.framework
firebase_messaging.framework
(推荐)firebase_analytics.framework

pod 'FirebaseMessaging', '11.6.0'
(推荐)pod 'FirebaseAnalytics', '11.6.0'
Cloud Storage (需要)firebase.framework
firebase_storage.framework

pod 'FirebaseStorage', '11.6.0'
Dynamic Links (需要)firebase.framework
firebase_dynamic_links.framework
(推荐)firebase_analytics.framework

pod 'FirebaseDynamicLinks', '11.6.0'
(推荐)pod 'FirebaseAnalytics', '11.6.0'
Realtime Database (需要)firebase.framework
firebase_database.framework

pod 'FirebaseDatabase', '11.6.0'
Remote Config (需要)firebase.framework
firebase_remote_config.framework
(推荐)firebase_analytics.framework

pod 'FirebaseRemoteConfig', '11.6.0'
(推荐)pod 'FirebaseAnalytics', '11.6.0'

有关移动设置的其他信息

方法调配

在 iOS 中,某些应用事件(如打开网址和接收通知)需要您的应用委托来实现一些特定方法。例如,接收通知可能需要您的应用委托来实现 application:didReceiveRemoteNotification:。每个 iOS 应用都有各自的应用委托,因此 Firebase 使用“方法调配”(method swizzling) 来让一种方法替换另一种方法,以便在任何您可能已经实现的处理程序之外,附加其自己的处理程序

Dynamic LinksCloud Messaging 库需要使用方法调配将处理程序附加给应用委托。如果您使用了这些 Firebase 产品中的任何一种,在加载时,Firebase 会识别 AppDelegate 类并为其调配必要的方法,将一个回调链接到现有方法实现。

设置桌面工作流(Beta 版

在创建游戏时,建议在开发时先在桌面平台上测试您的游戏,然后再在移动设备上进行部署和测试,因为这样往往更轻松。为了支持这一工作流,我们提供了可在 Windows、macOS、Linux 上以及 C++ 编辑器中运行的部分 Firebase C++ SDK

  1. 对于桌面工作流,您需要完成以下操作:

    1. 为 CMake 配置 C++ 项目。
    2. 创建 Firebase 项目
    3. 在 Firebase 中注册您的应用(iOS 或 Android)
    4. 添加移动平台 Firebase 配置文件
  2. 创建 Firebase 配置文件的桌面版本:

    • 如果您添加了 Android google-services.json 文件 - 当您运行应用时,Firebase 会找到此移动平台文件,然后自动生成桌面平台 Firebase 配置文件 (google-services-desktop.json)

    • 如果您添加了 iOS GoogleService-Info.plist 文件 - 在运行应用之前,您需要将此移动平台文件转换为桌面平台 Firebase 配置文件。如需转换该文件,请从 GoogleService-Info.plist 文件所在的目录中运行以下命令:

      generate_xml_from_google_services_json.py --plist -i GoogleService-Info.plist

    此桌面平台配置文件包含您在 Firebase 控制台设置工作流中输入的 C++ 项目 ID。访问了解 Firebase 项目以详细了解配置文件。

  3. 将 Firebase SDK 添加到您的 C++ 项目。

    下述步骤示范了如何将受支持的 Firebase 产品添加到 C++ 项目。在本示例中,我们将完成 Firebase AuthenticationFirebase Realtime Database 添加操作。

    1. FIREBASE_CPP_SDK_DIR 环境变量设置为已解压缩的 Firebase C++ SDK 的位置。

    2. 在项目的 CMakeLists.txt 文件中,添加以下内容,包括您要使用的 Firebase 产品适用的。例如,使用 Firebase AuthenticationFirebase Realtime Database

      # Add Firebase libraries to the target using the function from the SDK.
      add_subdirectory(${FIREBASE_CPP_SDK_DIR} bin/ EXCLUDE_FROM_ALL)
      
      # The Firebase C++ library `firebase_app` is required,
      # and it must always be listed last.
      
      # Add the Firebase SDKs for the products you want to use in your app
      # For example, to use Firebase Authentication and Firebase Realtime Database
      set(firebase_libs firebase_auth firebase_database firebase_app)
      target_link_libraries(${target_name} "${firebase_libs}")
  4. 运行您的 C++ 应用。

可用的库(桌面平台)

Firebase C++ SDK 为部分功能提供桌面工作流支持,让您可以在 Windows、macOS 和 Linux 上的独立桌面 build 中使用 Firebase 的某些部分。

Firebase 产品 库引用(使用 CMake)
App Check firebase_app_check
(需要)firebase_app
Authentication firebase_auth
(需要)firebase_app
Cloud Firestore firebase_firestore
firebase_auth
firebase_app
Cloud Functions firebase_functions
(需要)firebase_app
Cloud Storage firebase_storage
(需要)firebase_app
Realtime Database firebase_database
(需要)firebase_app
Remote Config firebase_remote_config
(需要)firebase_app

Firebase 以 Stub(非函数)实现提供其余的桌面库,以方便您针对 Windows、macOS 和 Linux 进行构建。这样一来,您就不必再针对桌面平台专门编译代码。

Realtime Database 桌面

Realtime Database 桌面 SDK 使用 REST 访问您的数据库,因此您必须在桌面上使用 Query::OrderByChild() 声明您使用的索引,否则监听器会失败。

有关桌面设置的其他信息

Windows 库

对于 Windows,我们根据以下各项提供库版本:

  • Build 平台:32 位 (x86) 与 64 位 (x64) 模式
  • Windows 运行时环境:多线程/MT 与多线程 DLL/MD
  • 目标:发布与调试

请注意,以下库使用 Visual Studio 2015 和 2017 进行了测试。

在 Windows 上构建 C++ 桌面应用时,请将以下 Windows SDK 库关联到您的项目。有关详情,请参阅您的编译器文档。

Firebase C++ 库 Windows SDK 库依赖项
App Check advapi32, ws2_32, crypt32
Authentication advapi32, ws2_32, crypt32
Cloud Firestore advapi32, ws2_32, crypt32, rpcrt4, ole32, shell32
Cloud Functions advapi32, ws2_32, crypt32, rpcrt4, ole32
Cloud Storage advapi32, ws2_32, crypt32
Realtime Database advapi32, ws2_32, crypt32, iphlpapi, psapi, userenv
Remote Config advapi32, ws2_32, crypt32, rpcrt4, ole32

macOS 库

对于 macOS (Darwin),我们为 64 位 (x86_64) 平台提供了库版本。我们还提供了框架,以方便您参考。

请注意,macOS 库已使用 Xcode 13.3.1 进行了测试。

在 macOS 上构建 C++ 桌面应用时,请将以下内容关联到您的项目:

  • pthread 系统库
  • CoreFoundation macOS 系统框架
  • Foundation macOS 系统框架
  • Security macOS 系统框架
  • GSS macOS 系统框架
  • Kerberos macOS 系统框架
  • SystemConfiguration macOS 系统框架

有关详情,请参阅您的编译器文档。

Linux 库

对于 Linux,我们为 32 位 (i386) 和 64 位 (x86_64) 平台提供了库版本。

请注意,Linux 库已在 Ubuntu 上使用 GCC 4.8.0、GCC 7.2.0 和 Clang 5.0 进行了测试。

在 Linux 上构建 C++ 桌面应用时,请将 pthread 系统库关联到您的项目。有关详情,请参阅您的编译器文档。如果您使用 GCC 5 或更高版本构建,请定义 -D_GLIBCXX_USE_CXX11_ABI=0

后续步骤