FlutterでFirebaseAnalyticsを使う その2(Android編)

前回の復習

記事はこちら。

AndroidとiOSで共通する設定も行ってますので、先に上記記事の内容から行うことをオススメします。今回はAndroid編です。と言っても大体の設定やコード追加は終わってますので、難しい事はありません。

(Firebase側)プロジェクト作成&GoogleServices.json設定

まずはGoogleServices.jsonをダウンロードするところまで進めてください。ダウンロードしたら、android/app内に配置します。次にandroid/build.gradleをVSCode等で開き、

dependencies { 
  classpath 'com.android.tools.build:gradle:3.5.0'  
  classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 
  classpath 'com.google.gms:google-services:4.3.3' } <-追加

Google-Servicesの記述を追加します。バージョンに関しては最新版をこちらで確認してください。
https://maven.google.com/web/index.html#com.google.gms:google-services

また、最終行に

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

を追加します。
その次はandroid/app/build.gradleを開きます。先ほどとはパスが違いますので気をつけてください。

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services' ←追加する
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

真ん中ぐらいに上記の記述があるので、apply plugin: ‘com.google.gms.google-services’を追加してください。そして一番最後に

dependencies { 
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 
    implementation 'com.google.firebase:firebase-analytics:17.4.4' <=追加する
}

com.google.firebase:firebase-analyticsに関する記述を追加します。バージョンはググって新しい分を指定してください。
更に、minSdkVersionを上げておく必要があるそうです。

minSdkVersion 21

自分の環境では21でOKでした。

まだ作業はあります。次はandroid/settings.gladleを開き、一番下に

def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()

def plugins = new Properties()
def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
if (pluginsFile.exists()) {
    pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
}

plugins.each { name, path ->
    def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
    include ":$name"
    project(":$name").projectDir = pluginDirectory
}

を追加します。追加したら保存し、ターミナルを開きプロジェクトのルートフォルダで

flutter packages get

を実行してください。

デバッグしてみる

デバッグしてみると動くはずです。ですがエラーメッセージもコンソールに表示される場合があります。自分の場合は

* What went wrong: Execution failed for task ':app:processDebugGoogleServices'. 
> No matching client found for package name 'プロジェクトのID'

でした。どうもダウンロードした設定ファイルとアプリでIDが違っている様です。android/app/build.gradleの中にある、applicationIdを見てみると,

com.muchilog.appname.appname

の様に、なぜかアプリ名が2回繰り返されてましたので修正しました。

https://www.it-swarm.dev/ja/android/flutter%E3%81%A7%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E5%90%8D%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%EF%BC%9F/805768980/

こちらを参考にしました。補足するとするならば、AndroidManifest.xmlは複数存在します。

あとはandroid/app/src/main/kotlin/com/muchilog/appname/appnameとなっている場所があるので、正しいバンドルIDと揃う様にファインダーでフォルダを増減させ、そして一番深いところにMainactivity.ktを配置します。このMainactivity.ktも編集してください。

にしても不思議ですね。iOSは前回でも確認しましたがバンドルIDはプロジェクトを作成した時点で正しく設定されていました。Androidだけ変な事に。原因は不明です。何か情報ありましたら教えていただけると幸いです。

今度こそデバッグ

今度こそはうまく行きました。FirebaseConsoleを確認すると、

まとめ

長かったですね!これでAndroidも無事完了です。次はFirebaseAuthenticationの実装を行います。よろしければこちらも試してみてください。