体育会系エンジニア 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))
}
}
実行
デフォルトのメッセージが表示されます。
コンソールで操作する
1. Firebaseコンソールでプロジェクトに移動
2. Remote Config
を選択
3. 文言を変更する
4. キーとバリューを追加して、変更を保存する
5. 結果
6. 別のメッセージに変更する
7. 再起動
まとめ
Firebase便利ですね〜。アプリ開発に必須なものや、サービス作れそうなものもあるのでいろいろ試してみたい。(時間があれば。。)