13
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

体育会系エンジニアAdvent Calendar 2017

Day 16

【Android】Firebase Remote Config で、アプリの挨拶文を変更する

Last updated at Posted at 2017-12-15

体育会系エンジニア Advent Calendar 2017 16日目です。

静岡県でサッカー部でしたが、全く関係ないことを。。。

Firebase Remote Config とは

Firebase Remote Config は、アプリのアップデートをユーザーにダウンロードしてもらわなくても、アプリの動作と外観を変更できるクラウド サービスです。

主な用途は、
Remote Config のランダム割り当て機能Firebase 向け Google アナリティクスを使って、
ユーザー層のさまざまなセグメントに対してアプリの機能改善の A/B テストを行えるもの 

ですが、今回は、これを使って、挨拶文をコンソールから変更します。

プロジェクト作成(主な実装)

1. <プロジェクトルート>/appに、google-services.json を配置する

下記をご参考ください。

2. remote_config_defaults.xml を作成する

app/src/main/res/xmlremote_config_defaults.xml
<?xml version="1.0" encoding="utf-8"?>
<defaultsMap>
    <entry>
        <key>greeting_message</key>
        <value>こんにちは!</value>
    </entry>
    <entry>
        <key>greeting_message_color</key>
        <value>#000000</value>
    </entry>
</defaultsMap>

ファイル名は、なんでも良いです。

3. <プロジェクトルート>/build.gradleに加筆する

build.gradle
buildscript {
    ext.kotlin_version = '1.2.10'
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

        classpath 'com.google.gms:google-services:3.1.1'
    }
}

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

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

4. <プロジェクトルート>/app/build.gradleに加筆する

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'kotlin-kapt'

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.mkitahara.remoteconfigsample"
        minSdkVersion 18
        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'
        }
    }
    dataBinding {
        enabled = true
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'

    kapt 'com.android.databinding:compiler:3.0.1'

    implementation 'com.google.firebase:firebase-core:11.6.2'
    implementation 'com.google.firebase:firebase-config:11.6.2'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}

// ADD THIS AT THE BOTTOM
apply plugin: 'com.google.gms.google-services'

ポイントは、apply plugin: 'com.google.gms.google-services'をファイルの最下部に定義します

5. MainActivity.kt を実装します

MainActivity.kt
class MainActivity : AppCompatActivity() {

    companion object {
        // キャッシュをゼロ秒にする
        val CACHE_EXPIRATION: Long = 0L
        val KEY_GREETING_MESSAGE: String = "greeting_message"
        val KEY_GREETING_MESSAGE_COLOR: String = "greeting_message_color"
    }

    private lateinit var mFirebaseRemoteConfig: FirebaseRemoteConfig

    private lateinit var mBinding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)

        // FirebaseRemoteConfig の インスタンスを取得
        mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance()

        // デベロッパーモードをONにする
        val configSettings = FirebaseRemoteConfigSettings.Builder()
                .setDeveloperModeEnabled(BuildConfig.DEBUG)
                .build()
        mFirebaseRemoteConfig.setConfigSettings(configSettings)

        // 取得失敗時のデフォルトデータを用意する(1で作成したファイルを設定する)
        mFirebaseRemoteConfig.setDefaults(R.xml.remote_config_defaults)

        // フェッチとコールバックを設定
        mFirebaseRemoteConfig.fetch(CACHE_EXPIRATION).addOnCompleteListener(this@MainActivity) { task ->
            if (task.isSuccessful) {
                Toast.makeText(this@MainActivity, "Fetch Succeeded", Toast.LENGTH_SHORT).show()
                // フェッチした値を有効にする
                mFirebaseRemoteConfig.activateFetched()
            } else {
                Toast.makeText(this@MainActivity, "Fetch Failed", Toast.LENGTH_SHORT).show()
            }
            displayWelcomeMessage()
        }
    }

    private fun displayWelcomeMessage() {
        // 文言変更
        val welcomeMessage = mFirebaseRemoteConfig.getString(KEY_GREETING_MESSAGE)
        mBinding.greetingMessage.text = welcomeMessage

        // 色変更
        val welcomeMessageColor = mFirebaseRemoteConfig.getString(KEY_GREETING_MESSAGE_COLOR)
        mBinding.greetingMessage.setTextColor(Color.parseColor(welcomeMessageColor))
    }
}

実行

Screenshot_20171216-020903.jpg

デフォルトのメッセージが表示されます。

コンソールで操作する

1. Firebaseコンソールでプロジェクトに移動
2. Remote Config を選択
3. 文言を変更する
4. キーとバリューを追加して、変更を保存する
スクリーンショット 2017-12-16 2.12.22.png
5. 結果

Screenshot_20171216-021332.jpg

6. 別のメッセージに変更する
スクリーンショット 2017-12-16 2.32.12.png
7. 再起動

Screenshot_20171216-023300.jpg

まとめ

Firebase便利ですね〜。アプリ開発に必須なものや、サービス作れそうなものもあるのでいろいろ試してみたい。(時間があれば。。)

13
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?