本篇文章主要记录Firebase在Android上的学习实践,对Firebase进行实践与测试其在中国的使用情况、GCM迁移到FCM、及Firebase与Google Analytics 结合使用的测试,实验结果请看4.4 Firebase在中国能正常使用。
参考文献就是Firebase官网,完整例子请看?:https://github.com/JereChen11/Firebase-master
目录
1. 分析(Analytics)
1.1 安卓上的运用
1.1.1 开始使用
1.1.2 记录事件
1.2 调试事件
1.3 跟踪屏幕
1.4 在Android上禁用Analytics数据收集
1.4.1 暂时停用数据收集
1.4.2 永久停用数据收集
2. 崩溃报告
2.1 将 Crashlytics SDK 添加到您的项目
2.2 强制造成崩溃以便测试您的实现代码
3. 云消息传递(Cloud Message)
3.1 实现云消息传递步骤
3.2 获取Token的方式
4.其他
4.1Firebase可用的库:
4.2自动收集的事件
4.3自动收集的用户属性
4.4 Firebase在中国能正常使用
Firebase 的核心是 Google Analytics for Firebase:一项无限制的免费分析解决方案。Analytics 与各种 Firebase 功能进行了集成,可以针对多达 500 种不同类型的事件向您提供无限多的报告,您可以利用 Firebase SDK 定义这些事件。Analytics 报告可帮助您清晰地了解用户的行为方式,让您可以就应用营销和性能优化制定明智的决策。
本文主要讲述Firebase在安卓上的使用,iOS等请参考官网,Firebase官网。
讲Firebase添加到Android项目中的前提条件:
1. 运行 Android 4.0 (Ice Cream Sandwich) 或更高版本以及 Google Play 服务 15.0.0 或更高版本的设备。
2. 最新版本的Android Studio。
在Android项目中添加Firebase有两种方法(图文展示):
一、使用 Firebase 智能助理
要在 Android Studio 中打开 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来验证安装,如下图所示。
在安卓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控制台中查看,如下图所示:
DebugView 可让您近乎实时地查看开发设备上由您的应用记录的原始事件数据。这在开发的 Instrumentation 阶段进行验证时很有用,可帮助您发现 Analytics 实现中的错误,还可以帮您确认所有事件和用户属性记录的正确性。
通常,您的应用所记录的事件会每隔 1 小时左右集中起来作为一批进行处理,并一起进行上传。此方法能节省最终用户的设备耗电量和网络流量。但是,为了验证您的 Analytics 实现情况(也是为了能在 DebugView 报告中查看您的 Analytics),您可以在开发设备上启用调试模式,从而以最短的延迟上传事件。
要在 Android 模拟设备(测试,真机是不行的,需要用模拟器)上启用 Analytics(分析)“调试”模式,请执行以下命令行:
adb shell setprop debug.firebase.analytics.app
“调试”模式将保持启用状态,直至您通过执行以下命令行明确停用“调试”模式:
adb shell setprop debug.firebase.analytics.app .none.
注意:在使用 DebugView 之前,应确保设备时间准确无误。设备时钟若有偏差,则会导致 Analytics(分析)报告中出现事件延迟或缺失。
应用的事件被记录到Firebase控制台DebugView上(如下图所示):
关于DegubView: 秒流(中间列)显示过去 60 秒内记录的事件。分钟流(左侧列)显示过去 30 分钟内一系列归档的事件。右侧列显示 30 分钟内记录的热门事件以及当前所选开发设备的当前用户属性。
秒流:默认情况下,您将看到过去 60 秒内记录的事件的列表。每个事件都会显示与其在开发设备上的记录时间相对应的时间戳。您可以点击某个事件查看与该事件关联的参数的列表。随着用户属性值在应用使用过程中发生变化,您会看到事件显示在信息流中,最新的事件显示在最上面。
分钟流:此信息流会显示一系列圆圈,一个圆圈对应着过去 30 分钟的一分钟时间。圆圈内的数字表示在相应分钟内收到的事件数。如果点击其中一个圆圈,系统会将在该分钟内记录的事件填充到秒流中。这有助于您更详细地查看过去 30 分钟内记录的事件。
“热门事件”和“当前用户属性”:“热门事件”表显示 30 分钟内记录的热门事件。“当前用户属性”表显示当前所选开发设备的用户属性组的最新状态。
设备选择器:由于很多不同的开发设备都可以启用“调试”模式,因此您可以使用设备选择器来选择 DebugView 报告将关注的特定设备。这样,多名开发者可以专注于他们自己的检测和验证工作,而不会相互影响。设备选择器菜单位于报告的左上方,标记为调试设备。
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 */);
如果出于某些原因(比如要在收集数据前获得最终用户许可)要暂时停用 Analytics 数据收集,则可以在应用的 AndroidManifest.xml 中,将 application
标记中 firebase_analytics_collection_enabled
的值设为 false,例如:
要重新启用数据收集,请调用 FirebaseAnalytics
类的setAnalyticsCollectionEnabled(true)
方法。例如:
setAnalyticsCollectionEnabled(true);
如果因任何原因需要再次暂停数据收集,则可调用
setAnalyticsCollectionEnabled(false);
在您重新启用数据收集之前,该功能将始终处于暂停状态。
如果需要在某个版本的应用中永久停用 Analytics 数据收集,请在应用的 AndroidManifest.xml 中将 application
标记中的 firebase_analytics_collection_deactivated
设为 true。例如:
崩溃报告已被弃用,现在 Crashlytics 是 Firebase 的主要崩溃报告解决方案。
Firebase Crashlytics 是一个轻量级的实时崩溃报告解决方案,可帮助您对影响应用质量的稳定性问题进行跟踪、确定优先解决顺序并加以修复。Crashlytics 会对崩溃进行智能分组并突出显示导致这些崩溃的环境因素,从而为您节省问题排查的时间。您可以查明某个特定的崩溃是否影响到了很多用户;当某个问题突然变得严重时收到提醒;找出哪些代码行导致了崩溃。
将 SDK 添加到编译文件中
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/'
}
}
}
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 就会立即自动开始侦听并收集崩溃报告。
您不必花费时间等待应用出现崩溃,即可判断 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控制台中。
在控制台上查看崩溃报告:
设置 Firebase 和 FCM SDK
前提:将Firebase添加至您的Android项目(如果尚未添加)。
在 Android Studio 中,将 FCM 依赖项添加至您的应用级 build.gradle 文件:
implementation 'com.google.firebase:firebase-messaging:17.3.4'
修改应用清单(AndroidManifest.xml)
继承 MyFirebaseMessagingService
的服务。除接收应用通知外,如果您还希望在后台进行更多的消息处理工作,则必须添加此服务。要接收前台应用中的通知、接收数据有效负载以及发送上行消息等,您必须扩展此服务。
新建MyFirebaseMessagingService.java:
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进行测试:
手机上查看信息:(如果控制台发送信息成功,但是手机上不能收到信息,让app在后台运行就可以收到信息)
一、第一次安装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() {
@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
}
});
Gradle 依赖项行 | 服务 |
---|---|
com.google.firebase:firebase-core:16.0.4 | 分析 |
com.google.firebase:firebase-database:16.0.3 | 实时数据库 |
com.google.firebase:firebase-firestore:17.1.1 | Cloud Firestore |
com.google.firebase:firebase-storage:16.0.3 | 存储 |
com.crashlytics.sdk.android:crashlytics:2.9.5 | Crashlytics |
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.1 | AdMob |
com.google.firebase:firebase-appindexing:16.0.2 | App Indexing |
com.google.firebase:firebase-perf:16.1.2 | 性能监控 |
com.google.firebase:firebase-functions:16.1.1 | Cloud 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
库的一个别名,我们建议您使用此别名。
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 | 当发生屏幕转换并符合以下条件之一时:
|
session_start | 在用户不活动的时间超过会话超时时长之后,当用户与应用互动的时间超过最短会话时长时触发。 |
user_engagement | 当应用在前台运行时周期性触发。 |
只要您使用 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)。 |
所有的测试结果都是基于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 ??