构建时无Firebase密钥,代码初始化后Analytics失效需额外配置吗?
我仅将Firebase用于Crashlytics。由于Android应用需从构建时无法获取的属性中读取Firebase密钥,因此未使用默认JSON配置文件,而是在Application的onCreate()中执行以下代码进行初始化:
val builder = FirebaseOptions.Builder() .setProjectId(firebaseProjectId) .setApplicationId(applicationId) .setApiKey(firebaseKey) FirebaseApp.initializeApp(context, builder.build())
该修改完成数月后,我发现Firebase Analytics自版本发布后便停止工作。我仍能收到Crashlytics的崩溃报告,但自动采集的其他数据(如活跃用户、唯一用户、分析事件等)全部丢失。这导致Crashlytics的数据质量极差,因为它只能将仍使用旧版本应用的用户视为唯一用户。
请问在此方案下,Firebase Analytics正常运行是否需要额外配置?
手动初始化Firebase时,要让Firebase Analytics正常运行,必须额外配置FCM发送者ID(原GCM发送者ID)。
Crashlytics仅依赖你已配置的Project ID、Application ID和API Key,所以能正常接收崩溃报告;但Analytics(包括Crashlytics用来识别唯一用户的底层逻辑)需要FCM发送者ID生成并维护用户唯一标识,缺少这个配置会导致Analytics自动采集功能完全失效,进而出现活跃用户、事件数据丢失,Crashlytics用户统计失真的问题。
修改初始化代码,添加setGcmSenderId()方法即可:
val builder = FirebaseOptions.Builder() .setProjectId(firebaseProjectId) .setApplicationId(applicationId) .setApiKey(firebaseKey) .setGcmSenderId(firebaseFcmSenderId) // 新增该行,传入FCM发送者ID FirebaseApp.initializeApp(context, builder.build())
FCM发送者ID可在Firebase控制台的项目设置中获取,将其与其他Firebase参数一同从你的动态属性源读取即可。
此外,确保Firebase相关依赖库版本为最新,且未在代码中手动禁用Analytics的自动采集功能,避免其他潜在问题。
内容的提问来源于stack exchange,提问作者htafoya

