Firebase:混合 C++ 和 Objective-C SDK 可以吗?

Posted

技术标签:

【中文标题】Firebase:混合 C++ 和 Objective-C SDK 可以吗?【英文标题】:Firebase: Is mixing C++ and Objective-C SDK ok? 【发布时间】:2018-03-26 14:06:31 【问题描述】:

可以混合使用 2 个 SDK 吗?您是否有做出某种奇怪行为的风险?

C++ 功能通常要求您在初始化时提供“firebase:App*”。

正如我从文档中了解到的,您不应该多次初始化应用程序,但是如果您想使用具有特定 ios 框架的另一个模块,您应该怎么做?

如果你像下面这样初始化firebase

[FIRApp configure]

然后您使用如下所示的 C++ SDK 进行初始化

firebaseApp = firebase::App::Create(firebase::AppOptions());

你会得到一个警告,它已经被初始化,所以它被检测到了。

“默认应用程序已经存在,删除现有的默认应用程序和 再造”

但是如果您只是初始化例如 iOS SDK,如果您尝试使用“firebase::App::GetInstance();”获取实例它将返回一个空指针。您不能将其用于其他模块。即使您使用特定名称配置/创建应用程序,或者如果您尝试使用默认名称专门获取相同的名称:“__FIRAPP_DEFAULT”

您是否只需要使用介于“C++”和“iOS”之间的 sdk 类型?

【问题讨论】:

【参考方案1】:

Firebase C++ SDK 只是原生 Firebase 框架的封装。当 firebase::App 被调用时,它会在内部触发原生框架。

所以在本地初始化之前,在 C++ 中初始化 firebase。所以它看起来像这样:

firebase::App::Create(firebase::AppOptions());

if([FIRApp defaultApp]) 
   [FIRApp configure]

现在,当您检查 GetInstance() 时,您不应该得到空指针。

app = firebase::App::GetInstance();

这样做只会创建一次 Firebase。

【讨论】:

以上是关于Firebase:混合 C++ 和 Objective-C SDK 可以吗?的主要内容,如果未能解决你的问题,请参考以下文章

《从零开始学Swift》学习笔记(Day 69)——Swift与Objective-C混合编程之语言

将 Google Play 游戏与 Firebase 混合使用

Android Gradle:所有 gms/firebase 库必须使用完全相同的版本规范(混合版本可能导致运行时崩溃)

C 和 C++ 混合编程

在 CMake 中混合 C 和 C++,啥 CMakeCCompilerId.c 以及如何丢弃它

QML和C++混合编程中,在qml中向C++的char* 函数传递一个char*的字符串参数,qml不能识别char*的参数类型