Help us understand the problem. What is going on with this article?

Firebase Realtime DatabaseをAndroidアプリからKotlinで使ってみる

More than 1 year has passed since last update.

Firebaeの設定

image.png

Firebaseのプロジェクトを作成

https://console.firebase.google.com/ にアクセスし、新規プロジェクトを作成します。
既存のものを使う場合は、そちらを使用してください。

FirebaseにAndroidアプリを登録する

アプリのパッケージ名を入力し、アプリを登録します。
複数アプリがある場合はアプリ毎に登録が必要です。
スクリーンショット 2017-07-26 6.46.15.png

google-services.jsonを配置する

アプリ登録後に作成された設定ファイルをダウンロードし、app配下にファイルを保存します。

./app/google-services.json
スクリーンショット 2017-07-26 7.04.03.png

Gradleにclasspathを追加

プロジェクトレベルのbuild.gradle
classpath 'com.google.gms:google-services:3.1.0'をdependenciesの中に追記します。

./build.gradle
buildscript {
    ext.kotlin_version = '1.1.3-2'
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0-alpha8'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.gms:google-services:3.1.0'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Gradleにpluginを追加

アプリレベルのbuild.gradle
apply plugin: 'com.google.gms.google-services'を最後に追記します。

./app/build.gradle
apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "tokyo.ibot.thor"
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:26.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.0'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.0'
}

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

ここまでで、Firebaseを使う準備は完了です。

Realtime Databaseの設定

ルールを変更

Realtime Databaseのルールタブに移動し中身を変更します。

スクリーンショット 2017-07-26 7.20.06.png

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

これで誰にでも読み書きができるようになります。
もちろん、セキュリティ上は良くないので実際に使用する場合には認証を入れる必要があります。

Gradleにdependencyを追加

アプリレベルのbuild.gradle
compile 'com.google.firebase:firebase-database:11.0.2'を追記します。

./app/build.gradle
apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "tokyo.ibot.thor"
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:26.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.0'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.0'
    compile 'com.google.firebase:firebase-database:11.0.2'
}

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

Realtime Databaseを使う準備も完了

Realtime Databaseに読み書きしてみる

データの更新

適当にMainActivityonCreateにRealtime Databaseへ書き込みするコードを追記してみます。

MainActivity.kt
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import com.google.firebase.database.FirebaseDatabase

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val key = "color"
        val value = "red"

        val database = FirebaseDatabase.getInstance()
        val ref = database.getReference(key)
        ref.setValue(value)
    }
}

これを実行すると、Webのコンソール上に反映されました。
Group.png

valueの値を変更し、再実行するとコンソールもリアルタイムに変更されているのがわかります。
スクリーンショット 2017-07-26 7.45.44.png

データの読み込み

読み込みでは変更をリアルタイムに通知されるため、addValueEventListenerにコードを書いていきます。
textViewの値がリアルタイムに変更されるように実装しました。

MainActivity.kt
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.FirebaseDatabase
import com.google.firebase.database.ValueEventListener
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val key = "color"
        val value = "blue"

        val database = FirebaseDatabase.getInstance()
        val ref = database.getReference(key)
        ref.setValue(value)


        ref.addValueEventListener(object: ValueEventListener {
            override fun onDataChange(dataSnapshot: DataSnapshot) {
                val value = dataSnapshot.value
                textView.text = value.toString()
            }

            override fun onCancelled(error: DatabaseError) {
                Log.w("onCancelled", "error:", error.toException())
            }
        })
    }
}

コンソール上で値を変更すると、アプリに通知されtextViewに反映されます。

おわり

実際に作ったAndroidアプリをスマホとAndroid Thingsにそれぞれインストールし、Firebase経由で繋げてみました。
Android Thingsでも問題なく使えて、実装も無理がなく便利でした。

#androidthings #firebase pic.twitter.com/0yrCDFF2gr

— なりたけいすけ (@narikei1030) 2017年7月25日
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした