Skip to content

google-services.jsonなしでFirebase Cloud MessagingとAnalyticsを使う

  • GitHub に上げれないので CI/CD しようと思ったときめんどくさい
  • apply plugin: ‘com.google.gms.google-services’ を app/build.gradle の 1 番下に書く必要がある
  • FCM と com.google.gms.google-services の仲が悪い(らしい)

ということで環境変数に APP_ID などを設定して FCM と Analytics を使う方法について書いていきます.

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 は使えるようになる. 環境変数に値を設定するのを忘れずに.

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 っぽい.