Firebase是一家实时后端数据库创业公司,它能免费地帮助开发者很快的写出Web端和移动端的应用。自2014年10月Google收购Firebase以来,用户可以在更方便地使用Firebase的同时,结合了Google强大的云服务。据说Firebase数据库的功能十分强大,所以自己决定着手学习,下面我们就尝试用最简单的方式把自己的Android项目连接到Firebase上。
环境:AndroidStudio 2.3.1
一、配置Android项目与Firebase数据库的连接:
1.打开AndroidStudio,任一创建一个空项目,进入项目主页后,打开菜单栏的SDK Manager,切换到SDK Tools项,确认安装最新的两个工具:(1)谷歌“播放”服务插件“Google Play service”和谷歌支持库“Google Repository”:
2.进入Firebase官网https://firebase.google.com/,当然你需要先登录你的谷歌帐号,进入主界面如下:
3.点击免费开始使用按钮,进入以下界面,点击创建项目,我这里选择项目名称为“DatabaseTest”,当然,可以填任意合法的字符,选择的国家/地区为中国,点击创建按钮即可:
4.创建完成之后进入项目主界面,我们可以选择将Firebase添加到iOS、Android和网页应用中,这里我们选择将Firebase添加到Android应用:
5.进入如下界面,有三个填写项目
(1)软件包名:我们返回我们的AndroidStudio打开应用级(app节点下)的build.gradle文件,找到applicatonId键对应的值“”,复制过来粘贴即可;
(2)应用别名:我们不填即可:
(3)调试签名证书SHA1:
介于安全和功能需求,强烈建议大家匹配SHA1加密证书,使用keytool工具(keytool工具是JDK提供的,在JDK的bin目录下)在用户目录下的隐藏目录".android"下创建加密的Android调试证书,打开终端命令行输入以下命令,我的电脑是LinuxMint:
一、Linux:
keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore
二、windows:
keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
按下回车后,窗口会提示输入密钥库口令,输入默认口令为小写的“android”,再按回车键生成密钥,最后把通过SHA1算法生成的十六进制组合的密钥字符复制到Firebase项目中即可,如下图:
6.注册应用后进入以下界面并下载通过我们配置生成的google-services.json文件,下载成功之后再点击下一步:
7.把下载的json文件移动到自己的工程中的app目录中,我的工程在“~/work/Idea”目录下,现在我把json文件移动到我的“Firebase”工程目录下的app目录中:
在次打开AndroidStudio,已经自动刷新多出了我们复制过来的文件,如下图:
8.进入下一个网页,要求我们添加以下两行代码:
(1)在项目级的build.gradle代码中声明添加谷歌服务构建依赖的代码如下:
classpath 'com.google.gms:google-services:3.0.0'
(2)在应用级(app节点下)的build.gradle代码中声明加载谷歌服务插件法的代码如下:
apply plugin: 'com.google.gms.google-services'
添加完这一行代码后,AndroidStudio便可以加载我们应用级目录(app节点)下的json文件。
9.最后进入Firebase移动应用主页,插个小曲,Firebase进入了大中华,用户可以免费使用,对国内的开发者来说是有利用价值的,但是现在的文档还不是完全中文的,我相信后期也会得到优化。这里我们进行简单的数据交互测试可以了,如果大家需要了解更多,后期可以自行查看文档https://firebase.google.com/docs/android/setup?hl=zh-cn,现在我们点击Database数据库菜单,创建简单的两条字符串数据,
(1)date:"今天是星期四"
(2)content:"我在测试Firebase数据库是否连接正常"
点击规则按钮,更改json代码如下,这样才能在设备中顺利读取数据,再点击发布即可:
{
"rules": {
".read": true,
".write": true
}
}
10.至此数据库准备数据完成,修改Android源代码之前,我们先查看文档中最新支持的依赖库https://firebase.google.com/docs/android/setup,
我们在项目中只要测试连接是否成功,我们需要添加Firebase核心依赖库和Firebase实时数据库依赖库即可,在应用级(app节点)的build.gradle文件中添加以下代码,并且点击右上角Gradle同步按钮:
compile 'com.google.firebase:firebase-core:9.6.1'
compile 'com.google.firebase:firebase-database:9.6.1'
最后不要忘记在AndroidManifest.xml配置文件中给应用添加使用网络的权限
二、修改源代码,进行通信测试:
1.首先更改xml布局文件,设置两个文本框,用于显示对应数据库的两条数据:
2.修改java源代码,获取数据库的数据并显示到对应的TextView上:
package cn.jkdev.firebase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
public class MainActivity extends AppCompatActivity {
private TextView tv_date;
private TextView tv_content;
private DatabaseReference mReference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
iniUI();
//初始化数据
initData();
}
private void initData() {
//构建数据库实例对象,引用为mReference
mReference = FirebaseDatabase.getInstance().getReference();
//通过键名,获取数据库实例对象的子节点对象
DatabaseReference date = mReference.child("date");
DatabaseReference content = mReference.child("content");
//注册子第一个节点对象数据变化的监听者对象
date.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//数据库数据变化时调用此方法
String value = dataSnapshot.getValue(String.class);
tv_date.setText("date:" + value);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
//注册子第二个节点对象数据变化的监听者对象
content.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//数据库数据变化时调用此方法
String value = dataSnapshot.getValue(String.class);
tv_content.setText("content:" + value);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void iniUI() {
tv_date = (TextView) findViewById(R.id.tv_date);
tv_content = (TextView) findViewById(R.id.tv_content);
}
}
代码修改完成之后,运行项目,手机正常显示Firebase数据库中的内容,说明连接成功:
通信成功后,我再次修改数据库如下:
在此同时,显示内容也会同时更改
至此,我们已经完成了与Firebase数据库的正常通信,感谢你的阅读!