这篇翻译断断续续花了好几天,主要是太长了。翻译得对得起读者也得对得起自己,我可不能直接粘贴复制用软件直接翻译吧。
建议英文阅读能力不错的直接看原文英文版的,不用看我翻译的“三不像”了。
【翻译的目的】:通过翻译锻炼英文阅读能力+语言表达能力+方便不喜欢读原文的人
移动应用程序为了实现一些业务是需要一个后端服务器的,比如用户身份验证和同步用户数据跨多个设备。然而,创建这样一个服务器需要有这样的技能,并且大多数独立应用程序开发者欠缺这样的技能。幸运的是,现今有几个后端服务平台,通常被称为BaaS可以供我们使用。谷歌的Firebase
就是这样的一个平台。
Firebase
提供了必要的服务例如数据分析,崩溃以及异常报告,用户身份验证和云短信,这都是免费的服务。它的免费增值服务还包括一个实时NoSQL数据库,文件托管和静态网站。
在本教程中,我将向您展示如何使用Firebase
为你的Android应用程序添加用户身份验证、分析和远程数据存储。
Prerequisites
接下来的步骤,你将需要:
- Android Studio 2.2 RC2 or higher
1.Using Firebase Analytics(使用Firebase 分析)
Firebase
提供的分析方案是一种最受欢迎的手机应用程序分析解决方案。通过使用它,您可以得到一个准确的了解:你的用户是谁,他们是如何使用你的应用的。
Step 1: Set Up Firebase Analytics
最新的Android studio
内置了支持Firebase 分析。这意味着您可以添加Firebase 分析,而不用脱离Android studio.
开始集成 Firebase analytics 于你的项目中,点击Tools>Firebase.你将会看到如下提示窗:
点击Analytics 然后记录一个Analytics 时间
你现在必须把Android Studio项目和Firebase项目结合起来。所以,点击
Connect to Firebase 按钮。
在弹出的对话框中,你可以看到现有的所有的Firebase projects.你可以选择其中一个或者选择新建一个项目。现在,我建议你选择 Create new Firebase project 选项,并且为这个项目取一个独一无二的名字。
一旦你在里面的对话框中按下这个 Add Analytics to your app 按钮,Android Studio 将自动的更改所有必要的配置,比如生成一个google-services.java 文件并且上传一个SHA1签名(指纹)。
现在你可以点击 Add Analytics to your app 按钮,把
Firebase插件和Firebase核心依赖组件整合到你的项目中去。Android Studio 将会告诉你确切的改变,以及写入build.gradle文件中去。
点击Accept Changes 完成配置。
Step 2: Generate Analytics Events(生成分析事件)
在你app上配置了Firebase Analytics后,如果你对自动生成分析事件满意,你不需要写任何额外的代码,譬如用户第一次打开你的app、使用它超过十秒、正在app内消费或者卸载你的app。因此,你可以在未来24小时内运行你的app程序在模拟器上或者真机上,你将能够看到分析日志在Firebase的控制台上。
如果你想更加深入的分析你的用户行为,你可以生成自定义分析事件,手动的使用FirebaseAnalytics类中的logEvent()方法。这个方法有两个参数:String 型的自定义事件的确切的名字,一个包含事件详情的Bundle对象。
举个例子:如果你想让你的用户点击一个特定的按钮触发一个你生成的自定义事件my_custom_event,你需要添加如下代码在按钮的点击处理器中:
// Create an instance of FirebaseAnalytics
FirebaseAnalytics fa = FirebaseAnalytics.getInstance(this);
// Create a Bundle containing information about
// the analytics event
Bundle eventDetails = new Bundle();
eventDetails.putString("my_message", "Clicked that special button");
// Log the event
fa.logEvent("my_custom_event", eventDetails);
大多时候,自定义事件在Firebase console中的那些自动被收集的事件中是无法区分的。
需要注意的是,事件名称是区分大小写的。因此,这是一个好主意,你所有的事件名称定义为常量字符串。或者,您可以使用预定义的事件名称常量,在FirebaseAnalytics.Event类中也是可用的。
2. Using Firebase Auth(使用认证)
如今,对于大多数app来说,用户认证是一个很重要的需求。通过用户保密的认证(唯一的标示),你可以根据她们的兴趣和喜好提供定制化的体验。你也可以确保他们可以在不同设备上获取到他们的隐私数据。
Firebase Auth 允许通过不同的登录认证机制去认证你的用户。在本教程,我将演示如何让你的用户可以用他们的邮箱地址以及登录密码在你的app上注册。
Step 1: Configure Your Project(配置你的项目)
为了让你Android Studio项目能使用Firebase Auth,你必须在你module’s build.gradle文件下添加如下依赖:
1 compile 'com.google.firebase:firebase-auth:9.4.0'
Step 2: Enable Password-Based Authentication
默认下,Firebase不允许用户认证。因此,你必须手动启动 password-based user authentication 在Firebase 控制台。to do so,切换到Auth 选项,点击Set up sign-in method 按钮。你将可以看到一系列可以使用的Sign-in providers
选择Email/Password,启动它,点击保存。
Step 3: Support User Registration(支持用户注册)
使用基于密码的身份认证,现在用户必须通过提供一个独一无二的邮箱地址和密码来注册。为了添加这个功能到你的app,你可以使用FirebaseAuth类中的createUserWithEmailAndPassword( )方法。正如方法名所写的,方法需要两个参数:邮箱地址、密码。
为了能够得到createUserEmailAndPassword( )方法的结果,在使用addOnCompleteLister()方法时你必须添加一个监听器OnCompleteListener。下面的代码片段将向你展示如何注册新用户以及回调这个注册进程是否成功。
FirebaseAuth.getInstance()
.createUserWithEmailAndPassword(emailAddress, password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()) {
// User registered successfully
}
}
});
该注意的是,你的职责还有验证Email的正确性以及确保用户使用了比较牢固不易破解的密码。
你可以在Firebase控制台的Auth选项中的User选项卡中查看那些成功注册了的用户的账户信息:邮箱地址。
Step 4: Support User Sign-In(支持用户登录)
成功注册后,用户将自动登录。即使你的app重新启动,用户也将还继续保持着登录的状态。不过,你的app也必须部署可以手动登录的功能。
用户手动的登录,你必须使用FirebaseAuth类的signInWithEmailAndPassword( )方法,这个方法有两个参数:邮箱地址、密码。这个方法还返回一个Task<AuthResult>
类型的对象。通过添加一个onCompleteListener
,你可以检查到是否成功登录你的app。
为了避免已经登录的用户再次“登录”,只用当 当前的FirebaseUser
对象为空的时候,你才必须调用signInWithEmailAndPassword()
方法。
下面的代码片段演示用户如何登录:
FirebaseAuth auth = FirebaseAuth.getInstance();
if (auth.getCurrentUser() != null) {
// Already signed in
// Do nothing
} else {
auth.signInWithEmailAndPassword(emailAddress, password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// User signed in successfully
}
}
});
}
Step 5: Support User Sign-Out(支持用户退出)
用户退出,可以简单的调用FirebaseAuth类
中的signOut()方法
FirebaseAuth.getInstance().signOut();
3. Using Firebase’s Real-Time Database(使用Firebase的实时数据库)
Firebase平台其中一个最强大的特点就是它的实时数据库,之所以这样说是有一个好原因:所以的写操作在所有的客户端上都可以同步看的到。在这样的数据库下,你可以创建一个允许用户无缝地在设备间转移的应用,并且立即可以协作。(这个感觉和 有道云协作 差不多)
Step 1: Configure Your Project(配置工程)
使用real-time database 实时数据库之前,你需要在你module’s的build.gradle
文件里面添加compile
依赖:
compile 'com.google.firebase:firebase-database:9.4.0'
Step 2: Write Data(写入数据)
你可以认为实时数据库存储的是JSON对象,这就表明你可以添加key-value键值对进数据库。key是String
类型,但是value可以是:primitives, arrays,
或其他 JSON objects
。
数据写入实时数据库前,你必须通过FirebaseDatabase
类中的getInstance()方法
获得数据库的一个引用(对象)。然后通过使用getReference()方法
你可以得到一个在数据库(任何路径)中的引用(key),路径中可以包含一个键或按层次结构排列的几个键。
当你得到一个路径的一个DatabaseReference
(key的引用),你可以使用setValue()
方法设置value的值。
下面的 代码片段表示如何添加一个简单的key-value键值对到数据库中:
FirebaseDatabase db = FirebaseDatabase.getInstance();
DatabaseReference ref = db.getReference("message"); // Key
ref.setValue("This is a test message"); // Value
去到Firebase console的Database选项卡,你可以查看实时数据库中的所有数据。
Step 3: Read Data(读取数据)
为了从实时数据库中读取数据,你必须附加一个异步观察者到关联的key
或路径。更准确地说,你必须使用addValueEventListener()方法
给DatabaseReference对象
关联一个ValueEventListener
ValueEventListener
的onDataChange()
方法允许您访问DataSnapshot
对象,其可以使用getValue()
方法来检索key对应的最新Value。
如下代码演示如何获取最新的value:
FirebaseDatabase db = FirebaseDatabase.getInstance();
DatabaseReference ref = db.getReference("message"); // Key
// Attach listener
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Retrieve latest value
String message = dataSnapshot.getValue(String.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Error handling
}
});
要注意的是,一旦ValueEventListener
被使用,任何时候当value被监听到有改变,它的onDataChange( )方法都会被触发。
Conclusion
谷歌Firebase platform
让开发者专注于开发一个更好的app而不是纠结于后台服务。在本教程,你学习了如何使用这个平台来添加anaytics、用户认证、实时云存储数据仓库到你的app中。
要想学习更多有关Firebase的使用,你可以参考官方教程在使用Firebase Crash Reporting时候,你也可以查阅另一篇文章Android From Scratch: Firebase Crash Reporting