Sid*_*092 2 android firebase firebase-analytics
我已将Firebase分析集成到我的应用程序中,该应用程序有两个过程:后台进程和UI进程.我使用Firebase的经历是,我能够从UI流程记录事件,但不能从后台流程记录事件.
我可以在Android Studio控制台上看到Firebase日志,虽然这些事件已记录,但从Background进程登录时从未计划在Firebase控制台上上传.这是Firebase分析所遵循的行为 - 仅从单个进程记录事件吗?如果是这样,那么它如何决定从哪个进程记录事件?
我需要记录来自两个进程的事件,以便了解完整的用户体验,他的app健康状况和一些其他重要参数.
所有帮助表示赞赏.
要从多个流程记录Firebase Analytics事件,您需要在第二个流程中手动初始化Firebase.半自动Firebase设置主要需要单进程应用程序,并且对于大多数API(崩溃报告除外)需要额外的设置工作.
基本上,在初始化第二个过程时,您会调用以下内容,假设您通过google-services.json文件和Google Services Gradle插件配置了Firebase :
FirebaseApp.initializeApp(context, FirebaseOptions.fromResource(context))
Run Code Online (Sandbox Code Playgroud)
稍微棘手的部分可以是如何确保仅调用一次,并且仅在第二个过程中调用.一种方法是模仿Firebase本身为第一个进程(通过清单合并)所做的事情- 定义一个ContentProvider.所以在你的Manifest中添加如下内容:
<provider
android:name=".MyFBProvider"
android:authorities="org.mydomain.mytestapp.MyFBProvider"
android:process=":myexternalprocess"
android:exported="false"
android:syncable="false" />
Run Code Online (Sandbox Code Playgroud)
您的ContentProvider看起来基本上是这样的,加上所有抽象方法的空覆盖:
public class MyFBProvider extends ContentProvider {
private static boolean created = false;
@Override
public boolean onCreate() {
if (created) {
// Workaround for https://issuetracker.google.com/issues/37045392
return false;
}
Context context = getContext();
FirebaseApp.initializeApp(context, FirebaseOptions.fromResource(context));
created = true;
// Return false to mimic behavior of FirebaseInitProvider.
// It should keep the pseudo ContentProvider from being a real one.
return false;
}
...
}
Run Code Online (Sandbox Code Playgroud)
使用ContentProvider可确保代码在进程初始化期间的所有其他代码之前运行,并且仅在您指定的进程中运行.
| 归档时间: |
|
| 查看次数: |
1857 次 |
| 最近记录: |