一、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。