Using Firebase Cloud Messaging and Analytics without google-services.json
🏷️
Photo by Daniel Sturgess on Unsplash
イケてない
- GitHub に上げれないので CI/CD しようと思ったときめんどくさい
- apply plugin: ‘com.google.gms.google-services’ を app/build.gradle の 1 番下に書く必要がある
- FCM と com.google.gms.google-services の仲が悪い(らしい)
ということで環境変数に APP_ID などを設定して FCM と Analytics を使う方法について書いていきます.
FCM
root の build.gradle(これは公式のやつと変わらない)
buildscript {
ext.kotlin_version = '1.2.51'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.3'
classpath 'com.google.gms:google-services:3.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}allprojects {
repositories {
google()
jcenter()
}
}
app/build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'android {
compileSdkVersion 27
defaultConfig {
applicationId "net.yuzumone.test"
minSdkVersion 21
targetSdkVersion 27
versionCode 1
versionName "1.0"
buildConfigField("String", "APP_ID", "\"${System.env.FCM_APP_ID}\"")
buildConfigField("String", "API_KEY", "\"${System.env.FCM_API_KEY}\"")
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
} dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.google.firebase:firebase-messaging:17.1.0'
}
Application
class TestApplication : Application() {
override fun onCreate() {
super.onCreate()
FirebaseApp.initializeApp(this, FirebaseOptions.Builder()
.setApplicationId(BuildConfig.APP_ID)
.setApiKey(BuildConfig.API_KEY)
.build(), getString(R.string.app_name))
}
}
ポイント
- buildConfigField を使用して環境変数から BuildConfig へ APP_ID を読み込む
- Application クラスで FirebaseApp#initializeApp を呼び,APP_ID と API_KEY を入れる
これだけでとりあえず FCM は使えるようになる.
環境変数に値を設定するのを忘れずに.
Analytics
FCM にものに追加で設定する必要がある.
app/build.gradle
android {
defaultConfig {
// 追加
resValue("string", "google_app_id", "\"${System.env.FCM_APP_ID}\"")
}
} dependencies {
// 追加
implementation 'com.google.firebase:firebase-analytics:16.0.1'
}
上に示している通り,Analytics を使うには string.xml に google_app_id という name で APP_ID を追加で設定する必要がある.
string.xml に直で書くと意味がないので,resValue を使用して string.xml に値をセットするようにしてみた.
とりあえずこれでエラーが出なくなったので OK っぽい.