Android Firebase 学习与实践

本篇文章主要记录Firebase在Android上的学习实践,对Firebase进行实践与测试其在中国的使用情况、GCM迁移到FCM、及Firebase与Google Analytics 结合使用的测试,实验结果请看4.4 Firebase在中国能正常使用

参考文献就是Firebase官网,完整例子请看?:https://github.com/JereChen11/Firebase-master


1. 分析(Analytics)

Firebase 的核心是 Google Analytics for Firebase:一项无限制的免费分析解决方案。Analytics 与各种 Firebase 功能进行了集成,可以针对多达 500 种不同类型的事件向您提供无限多的报告,您可以利用 Firebase SDK 定义这些事件。Analytics 报告可帮助您清晰地了解用户的行为方式,让您可以就应用营销和性能优化制定明智的决策。

1.1 安卓上的运用

本文主要讲述Firebase在安卓上的使用,iOS等请参考官网,Firebase官网。

1.1.1 开始使用

讲Firebase添加到Android项目中的前提条件:

  1.         1.  运行 Android 4.0 (Ice Cream Sandwich) 或更高版本以及 Google Play 服务 15.0.0 或更高版本的设备。
            2. 最新版本的Android Studio。

在Android项目中添加Firebase有两种方法(图文展示)

一、使用 Firebase 智能助理

要在 Android Studio 中打开 Firebase 智能助理,请执行以下操作:

  • 依次点击 Tools > Firebase 以打开 Assistant 窗口。
  • 点击以展开所列功能之一(例如 Analytics),然后点击所提供的教程链接(例如“Log an Analytics event”)。
  • 点击 Connect to Firebase 按钮以关联至 Firebase,并向您的应用添加必要的代码。

二、手动添加 Firebase

手动将Firebase添加到你的安卓app中的步骤(四个步骤):在Firebase控制台添加add app.

 1、注册app: 填写Android package name、App nickname(可选)、Debug signing certificate SHA-1(可选),所以我只填写了包名,如下图所示。

2、下载配置文件:下载google-services.json文件并放在app根目录下,如下图所示。

3、添加Firebase SDK依赖:如下图所示。

4、运行app来验证安装,如下图所示。

 

1.1.2 记录事件

在安卓app中添加Analytics步骤:

1、在activity顶部声明com.google.firebase.analytics.FirebaseAnalytics对象:

private FirebaseAnalytics mFirebaseAnalytics;

2、然后在onCreate()方法中对其进行初始化:

// Obtain the FirebaseAnalytics instance.
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);

3、记录事件:在创建FirebaseAnalytics实例后用logEvent()方法来记录事件,可以在 FirebaseAnalytics.Event 和 FirebaseAnalytics.Param 参考文档中查看预定义的事件和参数。

Bundle bundle = new Bundle();
bundle.putString(FirebaseAnalytics.Param.ITEM_ID, id);
bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, name);
bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "image");
mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle);

确认事件:可以启用详细日志记录功能以监控 SDK 的事件记录,从而帮助验证是否正确记录了事件,包括自动和手动记录的事件。可以通过一系列 adb 命令启用详细日志记录功能:

adb shell setprop log.tag.FA VERBOSE
adb shell setprop log.tag.FA-SVC VERBOSE
adb logcat -v time -s FA FA-SVC

结果如下图所示:

添加完毕后,Firebase开始观察记录,我们可以在Firebase控制台中查看,如下图所示:

 

 

 

 

1.2 调试事件

DebugView 可让您近乎实时地查看开发设备上由您的应用记录的原始事件数据。这在开发的 Instrumentation 阶段进行验证时很有用,可帮助您发现 Analytics 实现中的错误,还可以帮您确认所有事件和用户属性记录的正确性。

通常,您的应用所记录的事件会每隔 1 小时左右集中起来作为一批进行处理,并一起进行上传。此方法能节省最终用户的设备耗电量和网络流量。但是,为了验证您的 Analytics 实现情况(也是为了能在 DebugView 报告中查看您的 Analytics),您可以在开发设备上启用调试模式,从而以最短的延迟上传事件。

要在 Android 模拟设备(测试,真机是不行的,需要用模拟器)上启用 Analytics(分析)“调试”模式,请执行以下命令行:

adb shell setprop debug.firebase.analytics.app <package_name>

“调试”模式将保持启用状态,直至您通过执行以下命令行明确停用“调试”模式:

adb shell setprop debug.firebase.analytics.app .none.

注意:在使用 DebugView 之前,应确保设备时间准确无误。设备时钟若有偏差,则会导致 Analytics(分析)报告中出现事件延迟或缺失。

应用的事件被记录到Firebase控制台DebugView上(如下图所示):

关于DegubView: 秒流(中间列)显示过去 60 秒内记录的事件。分钟流(左侧列)显示过去 30 分钟内一系列归档的事件。右侧列显示 30 分钟内记录的热门事件以及当前所选开发设备的当前用户属性

秒流:默认情况下,您将看到过去 60 秒内记录的事件的列表。每个事件都会显示与其在开发设备上的记录时间相对应的时间戳。您可以点击某个事件查看与该事件关联的参数的列表。随着用户属性值在应用使用过程中发生变化,您会看到事件显示在信息流中,最新的事件显示在最上面。

分钟流:此信息流会显示一系列圆圈,一个圆圈对应着过去 30 分钟的一分钟时间。圆圈内的数字表示在相应分钟内收到的事件数。如果点击其中一个圆圈,系统会将在该分钟内记录的事件填充到秒流中。这有助于您更详细地查看过去 30 分钟内记录的事件。

热门事件”和“当前用户属性”:“热门事件”表显示 30 分钟内记录的热门事件。“当前用户属性”表显示当前所选开发设备的用户属性组的最新状态。

设备选择器:由于很多不同的开发设备都可以启用“调试”模式,因此您可以使用设备选择器来选择 DebugView 报告将关注的特定设备。这样,多名开发者可以专注于他们自己的检测和验证工作,而不会相互影响。设备选择器菜单位于报告的左上方,标记为调试设备

1.3 跟踪屏幕

Google Analytics for Firebase 会跟踪屏幕转换,并将有关当前屏幕的信息附加到事件,使您可以跟踪每个屏幕的用户参与度或用户行为等指标。此类数据大部分会自动收集,但您也可以手动跟踪屏幕名称。如果您的应用没有为您要跟踪的每个屏幕(例如在游戏中)使用单独的 UIViewController 或 Activity,那么手动跟踪屏幕将很有用。

自动跟踪屏幕:Analytics 会自动跟踪有关应用中的屏幕的一些信息,例如当前处于焦点的 UIViewController 或 Activity 的类名。当屏幕转换时,Analytics 会记录一个用于标识新屏幕的 screen_view 事件。这些屏幕上发生的事件会自动使用参数 firebase_screen_class(例如 menuViewController 或 MenuActivity)和生成的 firebase_screen_id 进行标记。如果应用对每个屏幕使用不同的 UIViewController 或 Activity,那么 Analytics 可以自动跟踪每个屏幕转换,并生成按屏幕分解的用户参与度报告。如果您的应用并未这样做,那么您仍可以通过使用 API 手动设置屏幕名称来获取这些报告。

手动跟踪屏幕:您可以手动设置屏幕名称,并选择在屏幕转换时覆盖类名。设置屏幕名称之后,在这些屏幕上发生的事件将额外使用参数 firebase_screen 进行标记。例如,您可以将一个屏幕命名为“主菜单”或“好友列表”。以下示例介绍如何手动设置屏幕名称。屏幕名称和屏幕类保持不变,直到 Activity 发生更改或您对 setCurrentScreen()执行新的调用为止。

mFirebaseAnalytics.setCurrentScreen(this, screenName, null /* class override */);

1.4 在Android上禁用Analytics数据收集

1.4.1 暂时停用数据收集

如果出于某些原因(比如要在收集数据前获得最终用户许可)要暂时停用 Analytics 数据收集,则可以在应用的 AndroidManifest.xml 中,将 application 标记中 firebase_analytics_collection_enabled 的值设为 false,例如:

<meta-data android:name="firebase_analytics_collection_enabled" android:value="false" />

要重新启用数据收集,请调用 FirebaseAnalytics 类的setAnalyticsCollectionEnabled(true)方法。例如:

setAnalyticsCollectionEnabled(true);

如果因任何原因需要再次暂停数据收集,则可调用

setAnalyticsCollectionEnabled(false);

在您重新启用数据收集之前,该功能将始终处于暂停状态。

1.4.2 永久停用数据收集

如果需要在某个版本的应用中永久停用 Analytics 数据收集,请在应用的 AndroidManifest.xml 中将 application 标记中的 firebase_analytics_collection_deactivated 设为 true。例如:

<meta-data android:name="firebase_analytics_collection_deactivated" android:value="true" />

2. 崩溃报告

崩溃报告已被弃用,现在 Crashlytics 是 Firebase 的主要崩溃报告解决方案。

Firebase Crashlytics 是一个轻量级的实时崩溃报告解决方案,可帮助您对影响应用质量的稳定性问题进行跟踪、确定优先解决顺序并加以修复。Crashlytics 会对崩溃进行智能分组并突出显示导致这些崩溃的环境因素,从而为您节省问题排查的时间。您可以查明某个特定的崩溃是否影响到了很多用户;当某个问题突然变得严重时收到提醒;找出哪些代码行导致了崩溃。

2.1 将 Crashlytics SDK 添加到您的项目

    将 SDK 添加到编译文件中

  1. 在项目级 build.gradle 中,将 google-services 版本更新为 3.1.2 或更高版本,并添加 Crashlytics 代码库和依赖项:
     buildscript {
        repositories {
            // ...
    
            // Add repository
            maven {
               url 'https://maven.fabric.io/public'
            }
        }
        dependencies {
            // ...
    
            // Check for v3.1.2 or higher
            classpath 'com.google.gms:google-services:4.2.0'
    
            // Add dependency
            classpath 'io.fabric.tools:gradle:1.26.1'
        }
    }
    
    allprojects {
        // ...
        repositories {
           // ...
    
           // Add repository
           maven {
               url 'https://maven.google.com/'
           }
        }
    }
  2. 在应用级 build.gradle 中,将 firebase-core 更新为 v11.4.2 或更高版本,并添加 Crashlytics 依赖项:
    apply plugin: 'com.android.application'
    apply plugin: 'io.fabric'
    
    dependencies {
        // ...
    
        // Check for v11.4.2 or higher
        implementation 'com.google.firebase:firebase-core:16.0.6'
    
        // Add dependency
        implementation 'com.crashlytics.sdk.android:crashlytics:2.9.6'
    }

    将 SDK 添加到您的应用后,Crashlytics 就会立即自动开始侦听并收集崩溃报告。

2.2 强制造成崩溃以便测试您的实现代码

您不必花费时间等待应用出现崩溃,即可判断 Crashlytics 是否正在运行。您可以在应用的 MainActivity 中添加一个按钮来强制造成崩溃:

Button crashButton = new Button(this);
crashButton.setText("Crash!");
crashButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
        Crashlytics.getInstance().crash(); // Force a crash
    }
});
addContentView(crashButton,
               new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
               ViewGroup.LayoutParams.WRAP_CONTENT));

测试时,在按下该按钮以使您的应用崩溃,请重新打开该应用,以确保 Crashlytics 有机会报告此次崩溃。报告应该会在五分钟内显示在Firebase控制台中。

在控制台上查看崩溃报告:

 

3. 云消息传递(Cloud Message)

3.1 实现云消息传递步骤

设置 Firebase 和 FCM SDK

  1. 前提:将Firebase添加至您的Android项目(如果尚未添加)。

  2. 在 Android Studio 中,将 FCM 依赖项添加至您的应用级 build.gradle 文件:

  3. implementation 'com.google.firebase:firebase-messaging:17.3.4'

    修改应用清单(AndroidManifest.xml)

  4. 继承 MyFirebaseMessagingService 的服务。除接收应用通知外,如果您还希望在后台进行更多的消息处理工作,则必须添加此服务。要接收前台应用中的通知、接收数据有效负载以及发送上行消息等,您必须扩展此服务。

  5. <service android:name=".MyFirebaseMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
        </intent-filter>
    </service>

    新建MyFirebaseMessagingService.java:

  6. public class MyFirebaseMessagingService extends FirebaseMessagingService {
        private static final String TAG = "MessagingService";
    
        @Override
        public void onNewToken(String s) {
            super.onNewToken(s);
            Log.d(TAG, "onNewToken: " + s);
    
            // Store device Token.
            storeToken(s);
        }
    
        @Override
        public void onMessageReceived(RemoteMessage remoteMessage) {
            super.onMessageReceived(remoteMessage);
    
            // Check if message contains a data payload.
            if (remoteMessage.getData().size() > 0) {
    
                //handle the data message here
                Log.d(TAG, "Message data payload: " + remoteMessage.getData());
    
                //getting the title and the body
                String title = remoteMessage.getNotification().getTitle();
                String body = remoteMessage.getNotification().getBody();
    
            }
    
        }
    
        public void storeToken(String token) {
            SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
            SharedPreferences.Editor editor = pref.edit();
            editor.putString("token", token);
            editor.apply();
        }
    
    }
    

    添加成功后在Firebase控制台上的Cloud Messaging进行测试:

  7. 手机上查看信息:(如果控制台发送信息成功,但是手机上不能收到信息,让app在后台运行就可以收到信息

 

3.2 获取Token的方式

一、第一次安装app是获取Token

@Override
public void onNewToken(String s) {
    super.onNewToken(s);
    Log.d(TAG, "onNewToken: " + s);

    // Store device Token.
    storeToken(s);
}

二、主动获取Token

FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() {
    @Override
    public void onSuccess(InstanceIdResult instanceIdResult) {
        String deviceToken = instanceIdResult.getToken();
        Log.d("deviceToken", "onCreate: " + deviceToken);
        // Do whatever you want with your token now
        // i.e. store it on SharedPreferences or DB
        // or directly send it to server
    }
});

 


4.其他

4.1Firebase可用的库:

Gradle 依赖项行服务
com.google.firebase:firebase-core:16.0.4分析
com.google.firebase:firebase-database:16.0.3实时数据库
com.google.firebase:firebase-firestore:17.1.1Cloud Firestore
com.google.firebase:firebase-storage:16.0.3存储
com.crashlytics.sdk.android:crashlytics:2.9.5Crashlytics
com.google.firebase:firebase-auth:16.0.4身份验证
com.google.firebase:firebase-messaging:17.3.3云消息传递
com.google.firebase:firebase-config:16.0.1远程配置
com.google.firebase:firebase-invites:16.0.4邀请和动态链接
com.google.firebase:firebase-ads:16.0.1AdMob
com.google.firebase:firebase-appindexing:16.0.2App Indexing
com.google.firebase:firebase-perf:16.1.2性能监控
com.google.firebase:firebase-functions:16.1.1Cloud Functions for Firebase 客户端 SDK
com.google.firebase:firebase-ml-vision:17.0.1机器学习套件 (Vision)
com.google.firebase:firebase-ml-model-interpreter:16.2.2机器学习套件(自定义模型)

注意com.google.firebase:firebase-core 是 com.google.firebase:firebase-analytics 库的一个别名,我们建议您使用此别名。


4.2自动收集的事件

Firebase 默认会采集这些事件的数据。自动收集的事件会在用户与您的应用进行基本的互动时触发。只要您使用 Firebase SDK,无需编写任何额外的代码就能收集这些事件。要查看事件报告,请在 Google Analytics(分析)中点击报告导航栏上的事件,或者在 Firebase 控制台中点击事件标签。

事件名称何时触发
ad_click当用户点击广告时触发。
ad_exposure当移动广告 SDK 投放的广告至少有一个在屏幕上时触发。
ad_impression当用户看到广告展示时触发。
ad_query当移动广告 SDK 发出广告请求时触发。
ad_reward当移动广告 SDK 投放的激励广告授予奖励时触发。
adunit_exposure当移动广告 SDK 投放的广告单元在屏幕上时触发。
app_clear_data当用户进行重置/清除应用数据的操作而导致所有设置和登录数据被移除时触发。
app_exception当应用崩溃或引发异常时触发。
app_remove当应用包从 Android 设备上移除(即“卸载”)时触发。

此事件与“每日卸载该应用的设备数量”和“每日卸载该应用的用户数量”指标不同,后两者都是由 Google Play 管理中心报告的。“app_remove”事件统计的是应用包的移除次数(不管安装来源),且计数会因您使用的报告日期范围而变化。而“每日卸载该应用的设备数量”和“每日卸载该应用的用户数量”指标只统计从 Google Play 安装的应用包的移除次数,并且会按日报告数据。
app_update

当应用更新到新版本并再次启动时触发。旧应用版本 ID 会作为参数传递。

此事件的概念与“每日升级该应用的设备数量”指标不同,后者是由 Google Play 管理中心报告的。升级是指更新应用二进制文件,而 app_update 事件是在升级后的应用启动时触发。

dynamic_link_app_open当用户通过动态链接再次打开应用时触发。
dynamic_link_app_update当应用通过动态链接更新到新版本并打开时触发。仅限 Android 应用。
dynamic_link_first_open当用户首次通过动态链接打开应用时触发。
first_open当用户安装或重新安装应用后,在该应用首次启动时触发。

此事件在用户首次使用应用时触发,不会在用户将应用下载到设备上时触发。要查看原始下载量数据,请访问 Google Play 管理中心或 iTunesConnect。
in_app_purchase当用户完成由 iTunes 上的 App Store 或 Google Play 处理的应用内购买交易(包括首次订阅)时触发。产品 ID、产品名称、币种和数量会作为参数传递。

要查看 Android 应用的 in_app_purchase 数据,您需要将 Firebase 关联到 Google Play

只有包含 Firebase SDK 的应用版本才会触发此事件。注意:系统不会自动跟踪付费应用购买收入、订阅收入(仅适用于 Android)和退款。 报告的收入可能与您在 Google Play 管理中心看到的值不同。标记为无效或沙盒(测试)的事件会被忽略。只有 iOS 事件会被标记为沙盒。详细了解如何测试 Google Play 结算功能。
notification_dismiss当用户关闭 FCM 发出的通知时触发。仅限 Android 应用。
notification_foreground当收到 FCM 发出的通知且应用在前台运行时触发。
notification_open当用户打开 FCM 发出的通知时触发。
notification_receive当设备收到 FCM 发出的通知且应用在后台运行时触发。仅限 Android 应用。
os_update当设备操作系统更新为新版本时触发。旧操作系统版本 ID 会作为参数传递。
screen_view当发生屏幕转换并符合以下条件之一时:
 
  • 之前没有设置屏幕
  • 新的屏幕名称与以前的屏幕名称不同
  • 新的屏幕类名称与以前的屏幕类名称不同
  • 新的屏幕 ID 与以前的屏幕 ID 不同
session_start在用户不活动的时间超过会话超时时长之后,当用户与应用互动的时间超过最短会话时长时触发。
user_engagement当应用在前台运行时周期性触发。

4.3自动收集的用户属性

只要您使用 Firebase SDK,就能自动收集多种用户属性而无需编写任何额外的代码。所有这些用户属性都能用在受众群体条件中,部分还可以用作常规报告过滤条件。

用户属性类型说明
年龄文本按 6 个类别来标识用户:18-24 岁、25-34 岁、35-44 岁、45-54 岁、55-64 岁和 65 岁以上。
应用商店文本应用是从哪个商店下载和安装的。
应用版本文本versionName (Android) 或软件包版本 (iOS)。
国家/地区文本用户所在的国家/地区。
设备品牌文本移动设备的品牌名称(例如摩托罗拉、LG 或三星)。
设备类别文本移动设备的类别(例如手机或平板电脑)。
设备型号文本移动设备的型号名称(例如 iPhone 5s 或 SM-J500M)。
首次打开时间数字用户首次打开应用的时间(以毫秒为单位,采用世界协调时间),舍入到下一个小时。
性别文本标识用户是男性还是女性。
兴趣文本列出用户的兴趣爱好,例如“艺术与娱乐、游戏、体育运动”。
语言文本设备操作系统的语言设置(例如 en-us 或 pt-br)。
新/老用户不适用新用户:在过去 7 天内首次打开应用的用户。
老用户:在 7 天以前首次打开应用的用户。
操作系统版本文本设备操作系统的版本(例如 9.3.2 或 5.1.1)。

4.4 Firebase在中国能正常使用吗

所有的测试结果都是基于Android 项目,代码请看https://github.com/JereChen11/Firebase-master

1. 如果手机没有Google Play 服务是不能用Firebase任何功能的。

2. 有Google Play 服务,可以上网, Firebase的功能都是可以使用的。(好像是废话.....?)

3. 有Google Play 服务, 不可以上网,不能使用Cloud Message功能,因为生成不了Token,但是Analytics和Crashlytics功能都是可以正常使用的,亲测!!

4. 由于在Google Cloud Message在2019年4月11号将被弃用,所以官方都推荐使用Firebase Cloud Message,但是我们能否将Firebase与Google Analytics结合使用呢?答案是可以:如果你以前是将GCM 与 Google Analytics结合起来一起使用, 那么你可以只将GCM迁移到FCM,保留Google Analytics,不过要注意需要将Firebase的Analytics功能禁止掉(1.4 在Android上禁用Analytics数据收集)。

 

 

感谢批阅?!欢迎评论交流?,我将在看到评论的第一时间回复您!

github地址:https://github.com/JereChen11/Firebase-master  ??

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值