android – Firebase分析事件记录在多进程应用程序中教程

2019-10-03 01:24:50

我已将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))

稍微棘手的部分可以是如何确保仅调用一次,并且仅在第二个过程中调用.一种方法是模仿Firebase本身为第一个进程(通过Manifest merging)所做的事情 – 定义一个ContentProvider.所以在你的Manifest中添加如下内容:

<provider
    android:name=".MyFBProvider"
    android:authorities="org.mydomain.mytestapp.MyFBProvider"
    android:process=":myexternalprocess"
    android:exported="false"
    android:syncable="false" />

您的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;
    }

    ...
}

使用ContentProvider可确保代码在进程初始化期间的所有其他代码之前运行,并且仅在您指定的进程中运行.

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »