一、Firebase简介
Firebase是帮助谷歌开发的手机平台。它可以帮助开发开发者开发高质量手机应用和发展商务。
二、开发和测试应用的功能
2.1 实时数据库
使用云主机和NoSQL数据库在用户和设备之间存储和同步数据。在连接的设备之间快速的同步和更新数据。设备不在线数据也会仍然有效,即使在没有网络的情况下也能提供一个很好的用户体验。
2.1.1 介绍
使用NoSQL云数据库存储和同步数据。数据可以在所有客户端实时同步,当你的app下线的时候存储的数据依然有效。
Firebase实时数据库是基于云存储的数据库。数据是以JSON的格式保存,并且可以在每个连接的客户端之间共享。当你使用SDK编译iOS,Android,JavaScript应用时,所有客户端共享一份实时数据库实例,并且在数据有更新的时候自动收到更新提示。
2.1.2 集成方法
把Firebase集成到应用
安装Firebase SDK。
在Firebase控制台把应用添加到对应的Firebase工程。
添加实时数据库到应用
把Firebase实时数据库依赖添加到你应用级别的build.gralde文件中。
compile 'com.google.firebase:firebase-database:11.6.2'
配置firebase数据库规则
实 时数据库提供了一种可以生命的规则语言,使用这种语言你可以定义当你读写数据库是的数据结构,数据索引方式。默认情况下,只有认证过的用户才可以读写数据 库。开始时如果你不想开启认证,可以在公开访问中配置访问规则。这样会让你的数据库开放给任何一个人,甚至是不使用你应用的用户,所以当你打算开启认证时 要再开启它。
写数据库
使用getInstance()获取到你的数据库实例,当你打算写库的时候使用它来引用你的写入位置。
// Write a message to the database
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");
myRef.setValue("Hello, World!");
你可以使用这种犯法保存各种数据类型的数据,包括Java对象。
读数据库
为了让你app的数据可以实时更新,你需要添加一个ValueEventListenr引用到你刚创建的引用。
当你的回调被注入,每次数据更新或者是它的子数据被更新,这个类中的onDataChange()方法都会被触发一次。
// Read from the database
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// This method is called once with the initial value and again
// whenever data at this location is updated.
String value = dataSnapshot.getValue(String.class);
Log.d(TAG, "Value is: " + value);
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.w(TAG, "Failed to read value.", error.toException());
}
});
配置ProGuard
当 你在你的应用中使用Firebase实时数据库并且开启ProGuard功能时, 你需要考虑混淆以后你的数据模型怎么样被序列化和反序列化。如果使用DataSnapshot.getValue(Class)或者 DatabaseReference.setValue(Object)去读写数据时,你需要在proguard-rules.pro文件中添加对应的规 则。
# Add this global rule
-keepattributes Signature
# This rule will properly ProGuard all the model classes in
# the package com.yourcompany.models. Modify to fit the structure
# of your app.
-keepclassmembers class com.yourcompany.models.** {
*;
}
2.2 Crashlytics
使 用Crashlytics,可以把雪崩一样的crash转换成可以管理的错误列表来大大减少解决错误的时间。清晰一点说,你可以通过观察在 Crashlytics页面的用户影响来快速决定先处理哪个问题。实时报警可以让你把注意力集中在稳定性上。Crashlytics是firebase的 主要crash报告分析工具。
2.2.1 介绍
简单来说就是对Android和iOS平台应用的可操作并且深入的强大的crash报告解决方案。
Firebase Crashlytics是一个轻量级的实施的crash报告系统,使用它可以帮助你追踪,按照优先级排序并解决那些破坏你app稳定新的问题。Crashlytics可以通过智能的分组crash和高亮导致这些问题的环境,来保存你的问题解决次数。
2.3 Crash报告
使用详细的bug和crash报告来分析你的手机应用问题。在firebase的crash dashboard里面,你可以快速看到根据频率和严重性来统计的问题。使用它你可以快速监控你的应用健康,并且可以跟踪用户流。即使不在电脑前,您也可以收到邮件通知。
2.3.1 介绍
Crash报告可以在你的app中产生详细的错误的报告。问题可以基于类似的堆栈来进行分组,也可以根据对用户的影响的严重性来进行分级。除了自动报告以外,你也可以在捕获导致crash的时候上传自定义的事件。
报告服务器端的错误,我们推荐使用Google Stackdriver Error Reporting,它可以支持Node.js,Python,Go,Java,PHP和Ruby的错误。
2.3.2 集成方法
集成Crash报告
安装Firebase SDK。
在Firebase控制台把应用添加到对应的Firebase工程。
把Firebase Crash报告依赖添加到你应用级别的build.gralde文件中。
compile 'com.google.firebase:firebase-crash:11.6.2'
产生第一个错误
当产生致命错误或者未捕获的异常的时候Firebase的Crash报告会自动生效。尽管这样,你可以在自己捕获到异常并且想上报时自己产生报告并上传。可以通过下面的步骤报告错误:
在MainActivity中添加对静态report函数的调用:
FirebaseCrash.report(new Exception("My first Android non-fatal error"));
启动应用。
在adb logcat 中或者AndroidStudio的日志中确认Crash报告功能已经开启了。
在Firebase控制台的Crash报告项中找到错误。需要注意大约1-2分钟以后错误才会能显示出来。
产生自定义日志
在错误报告中或者logcat中,你可以使用Crash报告来发送自定义事件。如果你希望报告一个不被logcat输出的事件,你只需要像下面一样传递一个string作为调用参数:
FirebaseCrash.log("Activity created");
如果你想产生一个logcat的输出,你需要提供log等级和tag。
反混淆ProGuard标签
ProGuard产生一个mapping.txt文件,这个文件列出了混淆变量和原始变量名的对应关系。如果你开启了ProGuard,上传了mapping文件,你就可以在Crash报告页面查看到反混淆的堆栈。
为了测试,你可以在debug编译类型中配置ProGuard,然后通过./gradlew assembleDebug命令开始编译:
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
使用Grade上传ProGuard的映射文件
为了在Firebase控制台看到反混淆的堆栈,你可以使用一个Crash报告插件产生的Gradle task来吧ProGuard的映射文件到Firebase。
配置Crash报告插件的方法
1.在工程根目录的build.gralde文件中添加Crash报告插件的规则:
buildscript {
repositories {
jcenter()
// ...
}
dependencies {
// ...
// For Android Studio 2.x, use firebase-plugins version 1.1.1
classpath 'com.google.firebase:firebase-plugins:1.1.1'
// For Android Studio 3.0, use firebase-plugins version 1.1.5
//classpath 'com.google.firebase:firebase-plugins:1.1.5'
}
}
2.在应用工程的gradle文件中(通常是app/build.gradle)中,`ADD THIS`后面,添加下面的信息来开启Crash报告插件:
apply plugin: 'com.android.application'
// ADD THIS
apply plugin: 'com.google.firebase.firebase-crash'
android {
// ...
}
dependencies {
// ...
}
3.产生一个服务账号和私钥:
下载一个服务账号的密钥来认证你的上传操作。在Firebase的控制台,选择你的工程然后点击产生一个新的私钥。
4.在文件目录$HOME/.gradle/gradle.properties中添加一个FirebaseServiceAccountFilePath键的属性值,或者通过命令行的-P参数指定另外一个路径。为了使用另外一个服务账号文件,你可以晚点再更新你的FirebaseServiceAccountFilePath键。使用-P来指定目录的方法如下:
./gradlew -PFirebaseServiceAccountFilePath=/usr/ServiceAccount/MyApp-a287fsd34.json :app:firebaseUploadReleaseProguardMapping
5.在项目目录中,你可以通过运行一个gradlew命令来完成编译APK和上传mapping文件两个操作。
./gradlew :app:firebaseUploadReleaseProguardMapping
2.4 Cloud Firestore
使用Cloud Firestore,你可以在全球的维度下,使用云托管的NoSQL数据在用户和设备之间存储和同步数据。
2.4.1 介绍
你可以在客户端和服务端开发的过程中使用我们的灵活的可扩展的NoSQL云数据库来存储同步数据。
Cloud Firestore是一个灵活的可扩展的为了手机,web和服务端开发的数据库。他可以在客户端app中间通过实时回调同步保存的数据,并且可以为手机和 web提供线下支持,这样你就可以在不需要在乎网络延迟和网络连接的情况下设计响应式应用。Cloud Firestore也提供了其他Firebase和谷歌云平台产品(包括Cloud Functions)的无缝集成。
2.4.2 集成方法
产生一个Cloud Firestore工程
打开Firebase控制台,产生一个新工程。
在数据库项中,点击Try Firestore Beta。
点击Enable。
当你产生一个Cloud Firestore工程时,在Cloud API Manager中也会开启API。
初始化你的开发环境
按照添加Firebase到你的Android app中的步骤集成。
添加Cloud Firestore Android库到你的app/build.gradle文件。
compile 'com.google.firebase:firebase-firestore:11.4.2'
初始化Cloud Firestore
初始化Cloud Firestore实例:
// Access a Cloud Firestore instance from your Activity
FirebaseFirestore db = FirebaseFirestore.getInstance();
添加数据
Cloud Store以Documets来保存数据,而Documents是以Collections的方式存储的。当你第一次添加数据到document中的时 候,Cloud Firestore会自动帮你产生collectons和documents。你不需要自己手动创建。
可以使用一下代码产生一个collection和document。
// Create a new user with a first and last name
Map<String, Object> user = new HashMap<>();
user.put("first", "Ada");
user.put("last", "Lovelace");
user.put("born", 1815);
// Add a new document with a generated ID
db.collection("users")
.add(user)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId());
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error adding document", e);
}
});
现在可以添加另外一个document到users collection。注意,这个文件包含一个没在第一个document中产生的键-值对(中间名字)。Documents可以包含不同组的信息。
// Create a new user with a first, middle, and last name
Map<String, Object> user = new HashMap<>();
user.put("first", "Alan");
user.put("middle", "Mathison");
user.put("last", "Turring");
user.put("born", 1912);
// Add a new document with a generated ID
db.collection("users")
.add(user)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId());
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error adding document", e);
}
});
读取数据
你可以使用Firebase控制台的数据查看器来快速验证你已经向Cloud Firestore添加了数据。
你也可以使用get方法来湖区整个collection。
db.collection("users")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot document : task.getResult()) {
Log.d(TAG, document.getId() + " => " + document.getData());
}
} else {
Log.w(TAG, "Error getting documents.", task.getException());
}
}
});
保障数据安全
如果你使用Web,Android或者iOS SDK开发,使用Firebase 认证和Cloud Firestore安全规则来保证你Cloud Firestore的数据安全。
如果你是一个服务器端的SDK来开发,使用认证访问管理(IAM)来保证你在Cloud Firestore中的数据安全。
2.5 身份认证
通 过简单快捷的方式来管理用户。firebase的身份认证功能提供了多种身份认证方式,包括邮箱密码,还有像google,facebook这样的第三方 供应商账号登录,你还可以直接使用已有的账号系统来管理用户账号。你可以编写实现完全自定制UI,也可以使用我们提供的开源代码二次开发。
多数app需要知道用户的身份信息,知道一个用户的信息可以让app安全的在云数据中保存用户数据,并且在用户的所有设备中提供相同的自定义的体验。
Firebase身份认证提供了后端服务,简单易用的SDK并且已经设计好的UI库来认证使用你的app的用户。它支持使用密码,手机号码,流行的身份认证提供商例如Google,Facebook和Twitter等等进行认证。
Firebase的身份认证和其他Firebase服务进行了深度集成,并且平衡了例如OAuth 2.0和OpenID Connect这些工业标准,所以他也可以和你自定义的后端进行很简单的集成。
2.6 云业务功能
你可以使用自己的后端代码来扩展app的功能,甚至不需要管理和扩展你自己的服务器。云业务功能是基于事件触发。你可以使用firebase产品、google云服务器或者其他第三方产品,通过网络请求来触发。
2.6.1 介绍
Firebase的云业务功能允许你自动运行后端代码来响应Firebase功能和HTTPS请求触发的事件。你的代码存储在Google的云系统中,并且在一个管理好的环境中运行。你不需要管理和扩展你自己的服务器。
2.7 云存储
使用一种强大简单和低成本google数据存储系统来存储和分享用户产生的图片,音视频等数据。使用云存储功能的firebase sdk添加了google安全来保证你firebase应用的上传下载功能,即使在较差的网络情况下也能有好的体验。
2.7.1 介绍
云存储是为app开发者提供存储和读取用户产生数据(例如图片和视频)功能的服务。
Firebase 的云存储是一个强大,简单并且低开销的运行在Google系统上的云服务。云存储的Firebase SDK为你的app上传下载数据提供了Google安全认证,即使在不好的网络情况下也可以使用。你可以使用我们的SDK来存储图像,音频,视频和其他用 户产生的数据。在服务器端,你可以使用谷歌云存储来访问相同的这些数据。
2.7.2 集成方法
预先操作
安装Firebase SDK。
在Firebase控制台中添加你的app到Firebase工程。
初始化公开访问
云存储提供了一种可声明规则的语言来让你定义你如何读写你自己的数据的结构和他们的索引方式。默认情况下只有认证过的用户才能读写存储的数据。为了开始不开启认证,你可以公开访问的规则。
这样会让你存储的数据完全公开,当你打算开启认证的时候记得再开其它。
添加云存储到app
在你的build.grale文件中添加云存储的依赖。
compile 'com.google.firebase:firebase-storage:11.6.2'
初始化云存储
第一步是先产生一个FirebaseStorage的实例来访问你的云存储功能。
FirebaseStorage storage = FirebaseStorage.getInstance();
高级初始化
一些使用情况下需要进行高级初始化:
在多个地理位置区域中使用存储
在不同的存储类型中使用存储
相同app中的不同认证用户间使用存储
第一种情况:当你的用户遍布世界,你想把数据存储在离他们近的地方的时候,这种问题可以很好的解决。例如你可以产生一个产生一个在美国,欧洲和亚洲的存储来保存用户数据来降低访问延迟。
第二种情况:如果你有不同访问类型的数据。例如:你可以创建多个区或者一个区的存储来存储图片或者其他经常访问的数据,以及一个专门用来存储的区域来存储用户的备份和其他不经常访问的数据。
其他情况下你可以参考使用多种存储方式。
当你在编译一个应用的时候第三种情况会比较常见。就像Google Drive一样,你可以让用户有多个登录的账户(例如一个个人账户和一个工作账户)。你可以使用自定义Firebase app实例来认证每一个增加的账号。
使用多存储
如果你想使用一种和上面说的情况都不一样的存储方式,或者在一个app中使用多个存储,你可以使用FirebaseStorage的实例产生一个你自定义存储的引用:
// Get a non-default Storage bucket
FirebaseStorage storage = FirebaseStorage.getInstance("gs://my-custom-bucket");
导入存储
当你导入一个存在的云存储数据到Firebase中时,你需要按照Google Cloud SDK中规定的使用gsutil工具的方式授权Firebase访问权限:
gsutil -m acl ch -r -u firebase-storage@system.gserviceaccount.com:O gs://<your-cloud-storage-bucket>
这不影响已经产生的数据存储,他们有对Firebase的默认访问权限。这是一种临时方法,未来将会变为自动化。
使用一个自定义Firebase应用
当你使用自定义的FirebaseApp编译了一个更复杂的app,你可以产生一个那个app初始化的FirebaseStorage实例。
// Get the default bucket from a custom FirebaseApp
FirebaseStorage storage = FirebaseStorage.getInstance(customApp);
// Get a non-default bucket from a custom FirebaseApp
FirebaseStorage storage = FirebaseStorage.getInstance(customApp, "gs://my-custom-bucket");
2.8 网页托管
使用专门为网页应用开发的工具来简化你的网页托管。当你上传网页资源文件的时候,我们会自动的把他们推给我们的全球CDN,并产生一个免费的SSL证书,这样不管你的用户在哪儿都可以得到一个安全、可靠、低延迟的用户体验。
2.8.1 介绍
Firebase的网页托管,为你的web app提供了一个快速并且安全的静态托管服务。
Firebase的网页托管是为开发者打造的一款产品级别的web内容托管。使用网页托管,你可以快速并且简单的使用一个命令来部署web应用和静态内容到全球CDN。
2.9 android测试实验室
在模拟器或者真实设备上运行自动的或者自定义的app测试用例。在你的开发生命周期里面使用firebase的android测试功能,你可以发现bug和缺陷,这样你就可以在大范围的设备上提供一个良好的用户体验。
2.9.1 介绍
在托管在谷歌数据中心的设备上测试你的app。
Android 的Firebase测试实验室为Android app测试提供了基于云架构的测试。通过一次操作,你可以在多种配置的多种设备上初始化测试。包括日志,视频和截图的测试结果都可以在Firebase控 制台上查看。就算你没有给你的app写任何的测试代码,测试实验室也可以自动运行你的app,寻找crash。
2.10 性能监控
在你的用户设备上分析app产生的性能问题。使用traces来监控你的app的某个模块的性能问题,你可以在firebase的控制台里面看到一个汇总的图表。不用写任何代码来你就可以监控应用的启动时间和HTTP请求。
2.10.1 介绍
可以深入洞察你app的性能问题。
Firebase 的性能监控是一个可以帮助你深入监控你的iOS和Android app的性能特性的服务。你可以使用性能监控SDK来从你的app中收集性能数据,然后在Firebase控制台来查阅分析这些数据。性能监控可以帮你理 解你的app在什么时候什么地方可以进行性能提升,这样你就可以根据这些信息来解决性能的问题。
性能监控现在是beta release版本。
2.10.2 集成方法
运行环境要求
在开始前,你需要做一些事情来搭建你的运行环境:
一个运行Android 4.0(Ice Create Sandwich)的android设备,并且安装了Google Play Service 11.8.0及以上。
在AndroidSDK Manager中,从Google 仓库选项里面安装Google Play 服务
最新的的Android Studio,2.2及以上。
把Firebase添加到Android 工程
如果你使用了Firebase的其他功能,你可以使用Android Studio的Firebase Assistant功能把他们添加到你的app中。
在Android Studio中打开Firebase Assistant:
1.在Tools > Firebase中打开Assistant窗口。
2.点击来打开功能列表中的任意一个(例如,Analytics),然后点击提示的浏览链接(例如,Log和Analytics事件。
3.点击连接到Firebase按钮来连接到Firebase并且把需要的代码添加到你的app。
把性能监控添加到你的app
1.打开工程级别的build.gradle文件,然后添加下面的:
a.在buildscript -> repositories段里面:
jcenter()
b.在buildscript -> dependencies段里面,添加Firebase的依赖:
Android Studio 2.x:
classpath 'com.google.firebase:firebase-plugins:1.1.1'
Android Studio 3.x:
classpath 'com.google.firebase:firebase-plugins:1.1.5'
2.打开应用级别的build.gradle文件,然后添加下面的:
a.在apply plugin: 'com.android.application' 下面添加:
apply plugin: 'com.google.firebase.firebase-perf'
b.在dependencies段里面添加:
compile 'com.google.firebase:firebase-perf:11.8.0'
c.如果你的app使用了其他的Firebase SDK,你需要为了那些SDK把版本调整为11.8.0
3.重新编译你的应用,自动追踪的操作和HTTP/S网络请求现在都已经被监控了。
4.在你的app中定义一个追踪和一个或多个计数器(可选)
自定义追踪是一种汇报你app代码性能数据的方法。想了解更多自定义自定义追踪,点击性能监控概述。在app中你可以有多个自定义追踪,并且多个追踪可以同时运行。在你的app中,每个自定义追踪都有一个或多个计数器来统计你的性能相关的事件,这些计数器和产生他们的自定义追踪关联。
a.在你的顶层java文件中添加这些性能监控相关的类:
import com.google.firebase.perf.FirebasePerformance;
import com.google.firebase.perf.metrics.Trace;
b.在你app中想启动监控的代码前面添加下面的代码来启动一个叫做test_trace的追踪:
Trace myTrace = FirebasePerformance.getInstance().newTrace("test_trace");
myTrace.start();
c.添加下面的类似代码来统计每次事件的产生。item_cache_hit和item_cache_miss是保留的关键字,你可以使用其他的名字来统计其他类型的事件:
Item item = cache.fetch("item");
if (item != null) {
myTrace.incrementCounter("item_cache_hit");
} else {
myTrace.incrementCounter("item_cache_miss");
}
d.在你想停止追踪的地方以后添加下面的代码:
myTrace.stop();
5.添加@AddTrace 注释来追踪特定的方法(可选)
在你的app中你可以通过添加一个@AddTrace注释并且添加一个string来命名一个追踪结果。这样这个追踪会在方法开始时启动统计,方法结束时结束统计。通过这种方法没有计数器。
import com.google.firebase.perf.metrics.AddTrace;
...
@Override
@AddTrace(name = "onCreateTrace", enabled = true/*Optional*/)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
...
}
6.在Android vitals中使用性能监控
使用性能监控,你可以在Play Deveoper控制台的Android vitals dashboard中得到深入的性能分析。在Android vitals dashboard中,当你不知道你的app的哪里影响了性能的时候,性能监控会尤其有用。
例如,当Android vitals dashboard标注出你的app在产生一个帧和在屏幕显示的时候使用的时间超出了预期,你可以使用性能监控来分析你的app的那个地方导致了低效渲染。你可以使用下面的方法来给低速帧进行计数:
1.当用户开始和Activity进行交互的时候,通过调用myTrace.start()来启动一个自定义的追踪。
2.调用FrameMetricsAggregator()来产生一个可以捕获每帧TOTAL_DURATION参数的对象。
3.通过调用myTrace.stop()来停止一个自定义统计:
a.调用FrameMetricsAggregator.stop()方法来从FrameMetricsAggregator对象中得到TOTAL_DURATION的值。
b.增加frames变量来得到所有帧的数量。当每个TOTAL_DURATION值大于16ms时给slow_frames变量加一,当大于700ms时给frozen_frames计数加一(或者当没有低效渲染产生的时候把计数设置为0)。
点击低效渲染,可以在Android vitals的dashboard中了解更多关于检测低效渲染的问题。
7.在Firebase控制台检查更多关于性能检测的结果
1.在Android Studio中编译app。
2.使用一个有Google Play Service11.8.0以上版本的最新镜像的android模拟器或者设备来测试你的app。
3.结果会在测试后的12小时以内产生,你可在Firebase的控制台查看产生的数据。
8.发布你的app,在Firebase的控制台查看结果
当你使用一个或者多个测试设备已经确认产生了有效的性能监控结果以后,你可以给用户发布已经更新了版本的app,然后使用Firebase控制台来监控性能数据。
三、发展和吸引用户的功能
3.1 统计
在一个单一dashboard里面分析用户的属性和行为来在你产品的roadmap里面做好及时正确的判断。你可以通过firebase提供的报告获取深刻准确的信息,或者把你的原始事件数据导出到Google BigQuery来进行自定义分析。
3.1.1 介绍
FIrebase的统计功能是可以提供深入的app使用和用户参与度测量的免费解决方案。
Firebase 的核心是Google的Firebase统计功能,它不仅免费并且没有任何限制。Firebase的其他功能都深度集成了统计,总共不仅有高达500个清 晰的事件统计,还能允许你在Firebase SDK中自定义事件。统计的报告能给你提供清晰的用户的行为分析,这样你就可以依据这些数据在市场和性能优化两个方面做出清晰准确的判断。
3.1.2 集成方法
统计可以给你的app提供用户使用和行为数据的收集。SDK主要输出下面两种类型的信息:
事件:也就是你app正在产生的包括用户操作,系统事件或错误相关的信息。
用户属性:你定义的用来描述你的用户群的属性,比如语言设置或者地理位置。
你不需要添加任何代码,统计功能就会自动收集一些事件和用户属性数据。
运行环境要求
1.安装Firebase SDK。
2.在Firebase控制台把你的app添加到工程里面。
3.使用Android Studio 1.5或以上。
把统计添加到你的app
在你app等级的build.gradle文件中添加统计的依赖
compile 'com.google.firebase:firebase-core:11.8.0'
在你activity的最前面声明com.google.firebase.analytics.FirebaseAnalytics对象
private FirebaseAnalytics mFirebaseAnalytics;
然后在onCreate()函数里面初始化它
// Obtain the FirebaseAnalytics instance.
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
一 旦你产生了FirebaseAnalytics实例,你可以使用logEvent()函数打印预定义好的或者自定义的事件。你可以在 FirebaseAnalytics.Event和FirebaseAnalytics.Param的参考文档里面查看预先定义好的事件和变量。
下面的例子展示了当一个用户点击你app里面的某一个元素的时候的打印SELECT_CONTENT事件的方法:
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);
确认事件
打开verbose 日志输出就可以确认事件是不是被正常记录,自动的手动的事件都可以这样查看。
你可以使用下面的一系列命令来开启verbose日志:
adb shell setprop log.tag.FA VERBOSE
adb shell setprop log.tag.FA-SVC VERBOSE
adb logcat -v time -s FA FA-SVC
3.2 云消息(FCM)
免费发送消息或者通知到你的Android,iOS和网页用户。云消息可以发送给单一的设备,组设备,或者特定的主题和用户划分。Firebase Cloud Messaging(FCM)有强大的事件负载能力,可以每天发送数亿条消息。
3.2.1 介绍
FCM是一个可以让你免费发送可靠消息的跨平台消息解决方案。
使用FCM,你可以在有新邮件或者其他数据需要同步的时候通知一个客户端app。你可以通过发送推送来让用户重新使用你的app和提高用户留存。当使用即时消息的时候,一个消息可以发送高达4K的数据到客户端app。
3.2.2 集成方法
集成Firebase和FCM SDK
1.如果你还没有集成,那么参考在你的Android工程中集成Firebase。
2.在Android Studio中,在你的应用级别的build.gradle文件中添加FCM依赖:
dependencies {
compile 'com.google.firebase:firebase-messaging:11.8.0'
}
编辑你的app manifest
按照下面的步骤添加相关信息到你的app的manifest。
一个继承自FirebaseMessagingService的类。这样可以让你在后台增加一些当收到推送时的消息处理逻辑。为了在前台app中收到推送,收到负载数据,发送上传消息等等,你也需要继承这个服务。
<service
android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
一个继承自FirebaseInstanceIdService的类来处理产生,更新注册的token。为了给特定设备发送消息和产生设备组也需要你继承这个服务。
<service
android:name=".MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
如果FCM是你app的关键功能,爸miniSdkVersion设置成8或以上。这样可以避免你的app安装在有可能运行不好的系统里面。
3.3 预测
Firebase的预测功能使用机器学来分析你的数据,来产生基于用户行为的动态用户组。这些用户组可以在其他的功能中使用,例如云消息,远端配置等等。
3.3.1 介绍
Firebase的预测功能是使用机器学习分析你的数据来基于用户行为预测来动态产生用户组。当使用Firebase远程配置,通知编辑器和A/B测试的时候,预测功能会自动有效。
当你在远程配置里面使用预测的时候,你可以通过提供一个基于每一个用户预测行为的自定义体验。
当使用A/B测试的时候,你可以计算你基于预测策略的有效性。
3.4 动态跳转
使用动态跳转可以为iOS,Android和Web网页提供一个自定义的用户体验。你可以使用它增强Web页面来提供app的交互、用户到用户的分享、社会活动或市场活动等等。动态跳转给你提供了可以更好的理解手机应用增长的参数。
3.4.1 介绍
动态跳转可以让你在多个平台,甚至在没有安装app的时候让跳转可以按照你想要的方式进行。
使 用动态跳转,你的用户可以在打开你的链接的时候在对应的平台上得到最好的有效体现。当你的用户在iOS或者Android系统上打开一个动态跳转的时候, 对应的本地应用的链接的内容可以直接被打开。如果用户在桌面浏览器上打开相同的动态跳转,网站上等同功能的页面会被打开。
另外,即使用户没有安装你的app,动态跳转也可以正常工作:如果用户在没有安装你的app的iOS或者Android系统上打开一个动态跳转的时候,他们会收到安装app的提示。在安装好以后你的应用会启动,然后访问对应的页面。
3.5 远程配置
自定义你的app如何提供给你的每个用户。修改视觉效果、逐渐推出新的特性、运行A/B测试、交付自定义的内容给特定用户、在不发布一个新版本的情况下提供更新,这些都可以通过Firebase控制台来操作。通过它,你可以监控改动的影响并且可以在几分钟之内做出响应。
3.5.1 介绍
在不发布一个app更新的情况下就可以更改你的app的行为和表现。
当使用远程配置的时候,你可以产生一个应用内的默认值来控制你应用的行为和表现。后面你可以通过Firebase控制台来修改你所有用户或者部分用户的配置。当你的配置更新了以后,你的app检查到有配置更新就可以快速获取并且应用配置,只会有很小的性能影响。
2.5.2 集成方法
在app中添加Firebase
安装Firebase SDK,确认在你的app层级的build.gradle文件中已经添加了远程配置相关的依赖:
compile 'com.google.firebase:firebase-config:11.8.0'
获取远程配置的单例对象
参照Remote Config quickstart例子app,你可以使用FirebaseRemoteConfig.getInstance()方法获取单例远程配置对象。
设置app中的默认变量的值
你需要在远程配置对象中设置一个app内的默认变量的值。这样你的app在从远程配置服务获取数据之前可以按照预期展示:
1.使用Map对象或者XML资源文件来定义一组变量名和对应的默认值。Remote Config quickstart是使用XML文件来定义变量名和对应的默认值的。
2.参照Remote Config quickstart例子app,通过调用setDefault()函数来吧这些值设置到远程配置对象里面。
在你的app里面得到变量的值
现 在通过远程配置的对象你就可以获取变量的值了。如果你在远程配置服务里面设置了数值,你可以获取到他们并且使用他们,这些数值对你的app有效。你也可以 得到通过调用setDefault()函数配置的变量的值。直接把变量的名称作为参数传递给下面列出来的映射到数据类型的方法:
getBoolean()
getByteArray()
getDouble()
getLong()
getString()
3.6 邀请
让用户通过可推荐的代码、喜欢的内容、使用邮件或者短信,可以全面的分享你的app。这种完整的解决方案可以和Firebase的谷歌分析协同工作,这样你就可以知道什么时候用户通过邀请打开或者安装了你的app。
3.6.1 介绍
邀请是通过email或者短信进行引用和分享的app开箱即用的解决方案。你可以使用Firebase动态跳转来自定义邀请的用户体验或者使用代码来产生链接。
口碑是让你的用户安装你的app的最有效的方式。在最近的对上千的智能手机的用户调查的时候发现,让用户发现一个app的排名第一的原因是他们从朋友或者同事那里听说过。Firebase的邀请功能会让你app用户转化成你app粉丝变得简单。
邀请功能是基于Firebase动态跳转开发的,这样会让用户在他们的平台上以及安装的应用里面获得可能的最好的用户体验。
3.6.2 集成方法
环境配置
1.在你的Firebase控制台里面把你的app连接到Firebase工程。
2.如果你没有开启Firebase动态跳转的功能的话你需要在Firebase控制台里面开启它,因为邀请是基于动态跳转开发的。
3.在你的Android工程里面添加Firebase依赖。
4.在你app级别的build.gradle里面添加邀请的依赖:
compile 'com.google.firebase:firebase-invites:11.8.0'
发送邀请
使用AppInvitation.IntentBuilder类来发送一个产生好的Intent:
private void onInviteClicked() {
Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title))
.setMessage(getString(R.string.invitation_message))
.setDeepLink(Uri.parse(getString(R.string.invitation_deep_link)))
.setCustomImage(Uri.parse(getString(R.string.invitation_custom_image)))
.setCallToActionText(getString(R.string.invitation_cta))
.build();
startActivityForResult(intent, REQUEST_INVITE);
}
接受邀请
当 一个还没有安装你app的一用户收到邀请的时候,他们可以在Google Play Store里面选择安装对应的app。当已经安装好以后就可以正常接受你发送的的指向对应内容的URL了。你可以通过调用getDynamicLink方 法来接收对应你app内容的URL:
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
// Check for App Invite invitations and launch deep-link activity if possible.
// Requires that an Activity is registered in AndroidManifest.xml to handle
// deep-link URLs.
FirebaseDynamicLinks.getInstance().getDynamicLink(getIntent())
.addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
@Override
public void onSuccess(PendingDynamicLinkData data) {
if (data == null) {
Log.d(TAG, "getInvitation: no data");
return;
}
// Get the deep link
Uri deepLink = data.getLink();
// Extract invite
FirebaseAppInvite invite = FirebaseAppInvite.getInvitation(data);
if (invite != null) {
String invitationId = invite.getInvitationId();
}
// Handle the deep link
// ...
}
})
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "getDynamicLink:onFailure", e);
}
});
}
必须在每一个可能被连接启动的activity中调用getDynamicLink()方法,就算是使用getIntent().getData()获取到的intent的链接。通过调用getDynamicLink()获取到链接和邀请ID以后
记得要清除掉对应的数据,这样可以保证这些数据只会被你的app处理一次。
一般情况下是在MainActivity里面和可能匹配到链接的intent filter对应的activity里面调用getDynamicLink()。
3.7 应用索引
使用谷歌搜索集成来重新吸引已经安装了你的app的用户。如果用户安装了你的app并且搜索了相关的内容,他们可以在搜索结果里面直接启动你的应用。如果用户还没有安装,当他们搜索类似app的时候会弹出一个安装应用的卡片。
3.7.1 介绍
Firebase 的应用索引可以让你的app加入到Google搜索里面。如果用户安装了你的app,他们可以直接启动你的app并且直接跳转到他们搜索的内容。应用索引 甚至可以通过在设备让搜索公开和私人的内容来帮你重新吸引用户,甚至还会自动完成查询内容来帮助他们更快的找到需要的东西。
3.7.1 集成方式
添加Firebase和应用索引库
虽然你可能不完全需要用Firebase来让你app的公开内容都能被Google检索到,应用检索API可以给你的app增加除了被搜索到外的更多功能。
1.在你的android工程里面添加Firebase
2.通过在build.gradle文件里面添加下面的代码来把应用索引库添加到你的工程:
dependencies {
...
// To avoid errors, use the same Firebase SDK version across your app.
compile 'com.google.firebase:firebase-appindexing:11.8.0'
...
}
结构化链接你的app内容
结构化的链接你的网页和app,这样URL对应的网站页面可以对应到你Android app的页面。Google 搜索会抓取你网站上的这些链接的数据,然后把用户直接导入到你的app。
把android app链接添加到你的app
无论是公开的Google搜索结果的内容还是设备上的本地google搜索都可以通过Android App链接来处理到你app的链接。Android app链接可以确保用户打开到你app的链接的时候能转入到你配置好的界面。通过Android Instant Apps,用户即使没有安装你的app也可以运行你的app。
Android app链接主要包含下面两个组件:
1.深入链接到你app的内容:在你的manifest文件里面添加intent filter来定义HTTP URL的映射关系。然后配置你的app使用intent的数据来把用户导向正确的内容。了解更多点击在app内容中产生深度链接。
2.连接认证:配置你的app去请求连接认证,对人对你站点和app的权限。然后发布一个数据资源连接文件来认证你的权限。了解更多点击认证app链接。
Android Studio的App链接助理可以帮你按照步骤执行Android app链接文档里面的步骤。了解更多点击使用app链接助理。
3.8 AdMob
通过向全球用户展示吸引人的广告来赚钱。AdMob有你所需要的全部来实现你的第一类变现策略、最大化你的收入。AdMob可以根据你的app来裁剪,并且它的API可以让你很轻松的集成丰富的广告格式。
3.8.1 介绍
通过精准的在app内的广告,Google的AdMob是一种可以来让你的app变现的简单方法。
Google的AdMob是可以让你的app产生利润的手机广告平台。使用AdMob的同时使用统计功能可以给你更多的app使用率和统计的能力。集成了AdMob功能的Firebase不会对你现有AdMob配置产生影响。
3.8.2 集成方式
配置环境
1.安装firebase SDK。
2.注册AdMob账号并且注册一个app。
3.在Firebase工程里面链接到app。
引入手机ads SDK
在你的build.gradle文件里面添加依赖:
compile 'com.google.firebase:firebase-ads:11.8.0'
初始化SDK
在你加载广告之前,你需要传入AdMob的appID来调用MobileAds.initialize()来初始化手机广告SDK。这个只需要操作一次,一般情况下是在app启动的时候。你可以在AdMob的用户接口里面找到你app的ID。
下面是如何在activity里面调用initialize()函数的例子:
package ...
import ...
import com.google.android.gms.ads.MobileAds;
public class MainActivity extends AppCompatActivity {
...
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713
MobileAds.initialize(this, "YOUR_ADMOB_APP_ID");
}
...
}
选择一种广告格式
广告SDK现在就已经被集成并且初始化好了,下面就需要开始实现一个广告了。AdMob提供了大量的广告格式,你可以选择最匹配你app用户体验的一种方式来展示。
Banner
Banner是一个有矩形图片和文字的在app的布局里面占一块地方的广告形式。当用户和app交互的时候它占据屏幕的一块地方,在一段时间以后会自动刷新。如果你刚开始使用手机广告,可以从这中广告形式开始。
Interstitial
Interstitial是一种直到被用户关闭,一直覆盖app界面的广告形式。在app运行流程中出现的暂停的情况下这种广告方式最试用,比如是在游戏角色升级或者完成了一个任务。
Native
Native是一种基于元素组件的广告形式,你可以在app中自由的定制资源文件的展示和操作的响应。通过自己选择字体,颜色和其他细节,你可以产生自然的,不唐突的可以添加更丰富用户体验的广告展现形式。
AdMob 提供了两种不同的方式来实现native广告:Native Ads Express和Native Ads Advanced。Native Ads Express是按照用户尽可能简单使用的方式来设计的,如果你刚开始接触Native广告那么这是一种很好的选择。Native Ads Advanced是按照用户在展示ads时有最大自由度的原则来设计的。现在它只在一些发行商中进行接近beta的测试。
Rewarded Video
Rewarded Video是全屏视频广告,用户可以选择全部观看来获取app内的奖励。
3.9 Google AdWords
通过谷歌业务涉及到的范围来获取和保留用户。通过使用Firebase的谷歌分析你可以在搜索,显示,视频甚至某个用户特定的区域来显示广告。提高你广告的针对性和优化你的活动的表现。
3.9.1 介绍
通过线上广告来获取潜在用户
安 装驱动,通过对广告交互的深入分析,通过谷歌分析来展示有针对性的活动来让Firebase的使用者扩大你的用户基数。当你使用了Firebase和 AdWords,你就使用了一种可以帮你看到AdWords投入驱动的app安装和app内操作的的强大工具。使用Firebase和AdWords,你 可以向AdWords导入用户列表并且从统计里面把事件导入到AdWords。
共同学习,写下你的评论
评论加载中...
作者其他优质文章