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”:

[Android]如何将Android项目连接到Firebase数据库_android


2.进入Firebase官网https://firebase.google.com/,当然你需要先登录你的谷歌帐号,进入主界面如下:

[Android]如何将Android项目连接到Firebase数据库_android应用_02


3.点击免费开始使用按钮,进入以下界面,点击创建项目,我这里选择项目名称为“DatabaseTest”,当然,可以填任意合法的字符,选择的国家/地区为中国,点击创建按钮即可:

[Android]如何将Android项目连接到Firebase数据库_数据库_03


4.创建完成之后进入项目主界面,我们可以选择将Firebase添加到iOS、Android和网页应用中,这里我们选择将Firebase添加到Android应用:

[Android]如何将Android项目连接到Firebase数据库_android应用_04


5.进入如下界面,有三个填写项目

[Android]如何将Android项目连接到Firebase数据库_android应用_05
(1)软件包名:我们返回我们的AndroidStudio打开应用级(app节点下)的build.gradle文件,找到applicatonId键对应的值“”,复制过来粘贴即可;

[Android]如何将Android项目连接到Firebase数据库_谷歌_06

(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]如何将Android项目连接到Firebase数据库_android_07

按下回车后,窗口会提示输入密钥库口令,输入默认口令为小写的“android”,再按回车键生成密钥,最后把通过SHA1算法生成的十六进制组合的密钥字符复制到Firebase项目中即可,如下图:

[Android]如何将Android项目连接到Firebase数据库_android_08


6.注册应用后进入以下界面并下载通过我们配置生成的google-services.json文件,下载成功之后再点击下一步:

[Android]如何将Android项目连接到Firebase数据库_firebase_09


7.把下载的json文件移动到自己的工程中的app目录中,我的工程在“~/work/Idea”目录下,现在我把json文件移动到我的“Firebase”工程目录下的app目录中:

[Android]如何将Android项目连接到Firebase数据库_android应用_10

在次打开AndroidStudio,已经自动刷新多出了我们复制过来的文件,如下图:

[Android]如何将Android项目连接到Firebase数据库_firebase_11


8.进入下一个网页,要求我们添加以下两行代码:
(1)在项目级的build.gradle代码中声明添加谷歌服务构建依赖的代码如下:

classpath 'com.google.gms:google-services:3.0.0'

[Android]如何将Android项目连接到Firebase数据库_数据库_12

(2)在应用级(app节点下)的build.gradle代码中声明加载谷歌服务插件法的代码如下:

apply plugin: 'com.google.gms.google-services'

[Android]如何将Android项目连接到Firebase数据库_firebase_13

添加完这一行代码后,AndroidStudio便可以加载我们应用级目录(app节点)下的json文件。


9.最后进入Firebase移动应用主页,插个小曲,Firebase进入了大中华,用户可以免费使用,对国内的开发者来说是有利用价值的,但是现在的文档还不是完全中文的,我相信后期也会得到优化。这里我们进行简单的数据交互测试可以了,如果大家需要了解更多,后期可以自行查看文档https://firebase.google.com/docs/android/setup?hl=zh-cn现在我们点击Database数据库菜单,创建简单的两条字符串数据,
(1)date:"今天是星期四"
(2)content:"我在测试Firebase数据库是否连接正常"

[Android]如何将Android项目连接到Firebase数据库_谷歌_14

点击规则按钮,更改json代码如下,这样才能在设备中顺利读取数据,再点击发布即可:

{
       "rules": {
            ".read": true,
            ".write": true
       }
    }

[Android]如何将Android项目连接到Firebase数据库_android应用_15


10.至此数据库准备数据完成,修改Android源代码之前,我们先查看文档中最新支持的依赖库https://firebase.google.com/docs/android/setup

[Android]如何将Android项目连接到Firebase数据库_数据库_16

我们在项目中只要测试连接是否成功,我们需要添加Firebase核心依赖库和Firebase实时数据库依赖库即可,在应用级(app节点)的build.gradle文件中添加以下代码,并且点击右上角Gradle同步按钮:

compile 'com.google.firebase:firebase-core:9.6.1'
    compile 'com.google.firebase:firebase-database:9.6.1'
[Android]如何将Android项目连接到Firebase数据库_谷歌_17

最后不要忘记在AndroidManifest.xml配置文件中给应用添加使用网络的权限

<uses-permission android:name="android.permission.INTERNET" />
[Android]如何将Android项目连接到Firebase数据库_数据库_18


二、修改源代码,进行通信测试:

1.首先更改xml布局文件,设置两个文本框,用于显示对应数据库的两条数据:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp"
    tools:context="cn.jkdev.firebase.MainActivity">

    <TextView
        android:id="@+id/tv_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/holo_blue_light"
        android:textSize="18sp" />

    <TextView
        android:id="@+id/tv_content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:textColor="@android:color/holo_red_light"
        android:textSize="18sp" />

</LinearLayout>

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数据库中的内容,说明连接成功:

[Android]如何将Android项目连接到Firebase数据库_firebase_19

通信成功后,我再次修改数据库如下:

[Android]如何将Android项目连接到Firebase数据库_firebase_20

在此同时,显示内容也会同时更改

[Android]如何将Android项目连接到Firebase数据库_firebase_21


至此,我们已经完成了与Firebase数据库的正常通信,感谢你的阅读!