ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2019-10-03 01:24:50  阅读:445  来源: 互联网

标签:firebase-analytics android firebase


我已将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可确保代码在进程初始化期间的所有其他代码之前运行,并且仅在您指定的进程中运行.

标签:firebase-analytics,android,firebase
来源: https://codeday.me/bug/20191003/1845851.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有