使用 FirebaseOptions 初始化 firebase

Posted

技术标签:

【中文标题】使用 FirebaseOptions 初始化 firebase【英文标题】:Init firebase with FirebaseOptions 【发布时间】:2018-01-15 22:01:51 【问题描述】:

我想在没有 google-services.json 的情况下使用 FirebaseOptions 初始化 Firebase,我正在关注 https://firebase.googleblog.com/2017/03/take-control-of-your-firebase-init-on.html 的博客文章。

我删除了 FirebaseInitProvider。

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

我正在尝试在 Application 子类中设置默认的 FirebaseApp:

FirebaseOptions options = new FirebaseOptions.Builder()
                .setApplicationId("valid_app_id")
                .setGcmSenderId("valid_gcm_sender_id")
                .setApiKey("valid_api_key")
                .build();

FirebaseApp.initializeApp(getApplicationContext(), options);

似乎一切正常,但是当我想将一些事件记录到 FirebaseAnalytics 时,我收到此错误:缺少 google_app_id。 Firebase 分析已停用。 我不知道是什么问题。

【问题讨论】:

Use multiple firebase accounts in single android app for google analytics的可能重复 你尝试过initializeApp的重载吗? ´FirebaseApp.initializeApp(getApplicationContext(), options, "someappname");´ 你好@rMozes,你的问题解决了吗? 你正在使用 FirebaseOptions 并且你给的链接有 FirebaseOptions.Builder..!!! 嘿怀疑“setApplicationId()”我从哪里得到这个ID?是“1:576500000006:android:124ac0dfab06ff730858f3”吗? 【参考方案1】:

如果您不使用 google-services.json 文件,则 JSON 中存在的信息需要位于某个位置,以便插件/代码能够读取。您可以在此处使用具有以下属性的字符串资源手动创建 xml 文件:

google_app_id:

YOUR_CLIENT/client_info/mobilesdk_app_id
gcm_defaultSenderId:

project_info/project_number
default_web_client_id:

YOUR_CLIENT/oauth_client/client_id (client_type == 3)
ga_trackingId:

YOUR_CLIENT/services/analytics-service/analytics_property/tracking_id
firebase_database_url:

project_info/firebase_url
google_api_key:

YOUR_CLIENT/api_key/current_key
google_crash_reporting_api_key:

YOUR_CLIENT/api_key/current_key

看看here。请务必添加 google_app_id,否则会导致发布相关错误。

如果您没有将“工具”命名空间添加到您的清单根标记中,您也必须添加它:

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="your.package"
    >

使用FirebaseOptionsFirebase.InitializeApp(). 实现的其余部分相同

【讨论】:

我们真的需要那个资源文件吗?我认为初始化可以在没有该资源的情况下在运行时完成。如果我将使用该资源文件,为什么需要 firebase 选项?主要思想是在运行时更改 Firebase 分析。

以上是关于使用 FirebaseOptions 初始化 firebase的主要内容,如果未能解决你的问题,请参考以下文章

Android NoClassDefFoundError:com.google.firebase.FirebaseOptions

更新到新的 Firebase 后出现异常 java.lang.NoClassDefFoundError: com.google.firebase.FirebaseOptions

java.lang.NoClassDefFoundError: com.google.firebase.FirebaseOptions

涂鸦通用Wi-Fi SDK相关API使用

deepin的Wi-Fi总是连不上怎么办

如何连接字符串+ i?