【问题标题】:Firebase SDK multiple projects in one apkFirebase SDK 一个 apk 中的多个项目
【发布时间】:2018-10-10 09:56:12
【问题描述】:

我正在尝试仅通过使用 FirebaseOptions 构建器来初始化 FirebaseApp,就像这样(我只使用 applicationId 和 ApiKey,因为我只想要启动分析):

FirebaseOptions options = new FirebaseOptions.Builder()
.setApplicationId(applicationID) // Required for Analytics.
.setApiKey(apiKey) // Required for Auth.
.build();
FirebaseApp.initializeApp(context, options);

我的项目中没有 google-services.json 文件,我已经像这样在我的 AndroidManifest.xml 中删除了 FirebaseInitProvider:

<provider android:name="com.google.firebase.provider.FirebaseInitProvider"
   android:authorities="${applicationId}.firebaseinitprovider"
   android:exported="false"
   tools:node="remove"/>

我想从我的服务器发送应用程序 ID,因为我需要多个项目,而且我并不关心在应用程序初始化期间是否丢失了某些事件。 启动应用程序时,同时尝试在 Android Studio 调试日志中查看事件,如下所示:

adb shell setprop log.tag.FA VERBOSE

adb shell setprop log.tag.FA-SVC VERBOSE

adb logcat -v time -s FA FA-SVC

我得到:Missing google_app_id. Firebase Analytics disabled.

我不想在strings.xml 静态文件中使用 google_app_id,因为我想要多个项目。但是,我尝试在 XML 文件中包含所有应用程序 ID,并尝试在 FirebaseApp.initializeApp 之前使用反射来更改它们,但这似乎不起作用。

【问题讨论】:

  • 您甚至可以创建多个 Firebase 项目,每个项目都为具有相同包名的应用定义一个配置吗?为每个应用程序设置不同的包名称怎么样?我试图了解为什么你需要这个。

标签: android firebase-analytics


【解决方案1】:

默认 FirebaseApp 初始化看起来像这样(这是在不传递名称时使用):

FirebaseApp fb = FirebaseApp.initializeApp(context, options, "[DEFAULT]");

默认应用实例使用的FirebaseOptions从字符串资源中读取

但是...可以改为分配自定义名称,以便从字符串资源中读取:

FirebaseApp fb01 = FirebaseApp.initializeApp(context, options, "primary");
FirebaseDatabase db01 = FirebaseDatabase.getInstance(fb01);

FirebaseApp fb02 = FirebaseApp.initializeApp(context, options, "secondary");
FirebaseDatabase db02 = FirebaseDatabase.getInstance(fb02);

找到了这个Firebase Blog,这是请求的可靠来源。

FirebaseApp 的文档也对其进行了一般性解释。

【讨论】:

  • 为什么在不解释的情况下投反对票?这没有记录,但事实。
  • OP 有兴趣在运行时动态提供 Firebase 配置。 APK 中有预捆绑的字符串资源不符合描述。
  • 我同意这是典型的用例,但出于某种原因,OP 需要在运行时提供配置和初始化 Firebase,引用:I would like to have the application id sent from my server(即 Firebase 应用 ID)。
  • @EugenPechanec 改进了我的答案,因此不需要字符串资源......与默认初始化相比,这似乎更有可能,这取决于具有唯一名称的字符串资源。
  • 问题是,为了使用 FirebaseAnalytics,只考虑了“[DEFAULT]”项目。此外,即使我尝试使用自定义 FirebaseOptions 设置“[DEFAULT]”项目,它也不起作用,但我收到上面提到的“缺少 google_app_id。Firebase Analytics 已禁用”消息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多