🦔

Flutter / Firebaseの連携時チェックリストまとめ【Android】

2021/10/02に公開

はじめまして、ますみです!

株式会社Galirage(ガリレージ)という「生成AIに特化して、システム開発・アドバイザリー支援・研修支援をしているIT企業」で、代表をしております^^

自己紹介.png

この記事では、FlutterFire(firebase_coreなどのライブラリ)を導入する際のやることリストをまとめました。

ちなみに、うまく導入できないと以下のようなエラーが出てきます。

[core/not-initialized] Firebase has not been correctly initialized. Have you added the "google-services.json" file to the project.

1. google-services.jsonの導入

  • google-services.jsonをダウンロードし、/android/app/google-services.jsonという風に/android/app/の中に導入します。
  • iOSでは、Xcodeから直接入れることが推奨されているため、androidでもAndroid Studioから直接インポート(コピー)することを推奨します。
    google-services.png

2. bundle idの一致確認

  • bundle idが一致していることを確認しましょう。
  • 具体的には、「flutter project内でのbundle id」と「firebaseで設定したbundle id」が一致している必要があります。
  • 余談ですが、bundle idの変更はそこそこ大変なので(bundle idの変更方法)、個人的には、flutter create --org com.umimoriというようにcompany idを指定してプロジェクト作成することを推奨します。
  • 具体的な確認ポイントは以下の通りです。以下の2箇所が一致していない場合は、flutter側かfirebase側のbundle idを変更しましょう。
/android/app/google-services.json
...
"client": [
  {
    "client_info": {
      "mobilesdk_app_id": "xxxxx",
      "android_client_info": {
+       "package_name": "com.umimori.sample"
      }
    },
    ...
/android/app/build.gradle
...
defaultConfig {
    // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
+   applicationId "com.umimori.sample"
    minSdkVersion 21
    targetSdkVersion 30
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
}
...

4. google()の確認(/android/build.gradle

  • 以下のように/android/build.gradleのファイルにgoogle()が明記されていることを確認しましょう。
/android/build.gradle
buildscript {
    ext.kotlin_version = '1.3.50'
    repositories {
+       google()
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.gms:google-services:4.3.10'
    }
}

allprojects {
    repositories {
+       google()
        mavenCentral()
    }
}
...

5. dependenciesの追加(/android/build.gradle

  • 続いて、classpath 'com.google.gms:google-services:4.3.10'/android/build.gradleに追加しましょう。
  • ここのバージョンはFirebaseの導入時期によって変わるため、適宜最新のものを確認しましょう(2021年10月2日時点では、4.3.10が最新)。
/android/build.gradle
buildscript {
...
    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+       classpath 'com.google.gms:google-services:4.3.10'
    }
}
...

6. pluginの反映(/android/app/build.gradle

  • /android/app/build.gradleapply plugin: 'com.google.gms.google-services'を追加します。
/android/app/build.gradle
...
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
+ apply plugin: 'com.google.gms.google-services'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
...

7. dependenciesの追加(/android/app/build.gradle

  • 公式が推奨しているため、極力追加しましょう。
/android/app/build.gradle
...
dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+   implementation platform('com.google.firebase:firebase-bom:28.4.1')
+   implementation 'com.google.firebase:firebase-analytics'
}

8. multiDexの反映(/android/app/build.gradle

  • minSdkVersionが20以下の場合は、multiDexの反映も行う必要があります。
/android/app/build.gradle
...
android {
    ...
    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.umimori.sample"
        minSdkVersion 16
        targetSdkVersion 28
+       multiDexEnabled true
 versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }
}
...
dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation platform('com.google.firebase:firebase-bom:28.4.1')
    implementation 'com.google.firebase:firebase-analytics'
+   implementation 'com.android.support:multidex:1.0.3'
}

9. Firebaseの「コンソールに進む」

  • 適度に慣れてくるとgoogle-services.jsonをダウンロードして、満足している方も多そうですね。
  • Firebase上の「コンソールに進む」ボタンを押すところまで実行しましょう。
  • 少しだけローダーが回る時間があるので、何かしら裏側で処理が回っていそうですね。
    firebase_console.png

10. Android Studioの再起動

  • 人それぞれの環境にも寄りますが、IDEなどを再起動すると読み込みが再度行われるため、これでエラー/バグが直ることがあります。
  • Sync nowを押しましょう」というような推奨もされています(私は、こういった処理をしなくてもflutter runしたら自動的にsyncされました)。

最後に

最後まで読んでくださり、ありがとうございました!
この記事を通して、少しでもあなたの学びに役立てば幸いです!

おまけ①:Raggle

RAGの精度改善に挑戦しませんか?

Raggleにて、「法務RAGシステムの性能改善ハッカソン」を開催中です!(10月20日に募集締切)

Raggleは、RAGの性能改善技術を競い合い、AIエンジニアのスキルアップを支援するプラットフォームです🥇

優勝者(GOLD🥇)の賞金は、なんと30万円!!!

SILVERは10万円、BRONZEでも5万円の賞金を用意しています!

また、参加賞として、大会終了後に「RAG精度改善ハンドブック」を贈呈予定なため、初学者の方もぜひ挑戦してみてください 🔰

みなさん、奮ってご参加ください🔥

※ 生成AIエンジニアの権利を守るため、投稿されたソースコードの著作権は、投稿者に帰属する規約としているため、その点もご安心ください◎

▼ エントリーはこちら ▼
https://raggle.jp/competition/29676d73-5675-4278-b1a6-d4a9fdd0a0ba

おまけ②:書籍出版のお知らせ

ついに『AIとコミュニケーションする技術(インプレス出版)』という書籍の事前予約が始まりました🎉

これからの未来において「変わらない知識」を見極めて、生成AIの業界において、読まれ続ける「バイブル」となる本をまとめ上げました。

かなり自信のある一冊なため、もしもよろしければ、ご一読いただけますと幸いです^^

▼ Amazonの事前予約はこちらから ▼
https://amzn.to/3ME8mLF

おまけ③:生成AIアカデミー

より専門的な「生成AIエンジニア人材」を目指しませんか?

そんな方々に向けて、「生成AIアカデミー(旧:生成AIエンジニア塾)」というプログラムを始めました🎉

最終的なゴールとして、『エンタープライズ向けの生成AIシステムを構築するためのスキルを習得し、大手案件で活躍できる人材』を目標とします。

また、一人一人にしっかりと向き合って、メンタリングをできるようにするため、現在メンバーの人数制限をしております。本気度やスキルレベルの高い人から、順番にご案内しております。

▼ 登録はこちらから ▼
https://bit.ly/generative_ai_engineer_school_by_zenn

おまけ④:AI Newsletter for Biz

最新のAIニュースの情報を収集しませんか?

AI Newsltter for Bizは、ビジネスパーソン向けに「AIニュース」を定期配信する完全無料のニュースレターです📩

一人でも多くの方にとって、「AI人材としてのスキルアップ」につながれば幸いです^^

また、現在、登録者限定で「明日から使える 無料AIサービス3選」のPDFを配布中です 🎁
※ ご登録完了のメールに、PDFリンクを添付いたします。

▼ 登録はこちらから ▼
https://bit.ly/ai_newsletter_for_biz_zenn

おまけ⑤:生成AIの仕事をしたい仲間を募集中 🤝

弊社Galirageでは常に、40-50件ほどの生成AI案件が走っております。

そして、ほとんどが「生成AIの案件(RAGシステム開発 / 精度改善の研究開発など)」の仕事になります!

かなり人手が不足しており、以下のポジションの仲間を募集しています💪

  • RAGエンジニア(RAG / LangChain / Python)
  • バックエンドエンジニア(Python / FastAPI)
  • フロントエンジニア(Next.js / TypeScript)
  • Azureエンジニア(AOAI / AI Search)
  • UI/UXデザイナー
  • 生成AIリサーチャー(研究開発 / 論文執筆)
  • 生成AIコンサルタント
  • PM / PMO

ご興味がある方は、下記のフォームよりお気軽にご連絡ください!

https://forms.gle/XMd19irZU4Fi7VAQ9

採用基準は下記の通りです。
  • 平日の日中に動ける方だと嬉しいですが、週8時間くらいの副業でもOKです!
  • 開始時期は、直近だと嬉しいですが、遠い未来でもOKです!まずはカジュアルに話しましょう😊
  • 年齢は不問です!現状は、平均年齢は30歳前後の会社です!
  • 「スキルセット」よりも「カルチャーマッチ・仕事への姿勢・ものづくりへのワクワク」を重視します。
    • 10月には新しく10名採用しました。
    • その内、エンジニア経験が3年未満の方は、4名いました。
    • スキルについては、ジョインした後に、必要に応じて、キャッチアップする時間を作ります。
    • 弊社は、正社員7名、業務委託80名の組織で構成されており、業務委託の仲間に支えられているため、正社員と業務委託の間にあまり差をつけていません。
    • 契約形態に関わらず、一緒に働く仲間として受け入れたその日から、大切な仲間です!
    • 新卒や転職の正社員採用もしていますが、業務委託での仕事を通して、お互いにWin-Winだと判断できた方のみを採用しています。
    • 私自身、フリーランスを5年間やっていたため、個人事業主と正社員のメリデメは両方の立場から理解しています。
  • 人手不足ではあるものの、採用基準をかなり厳しくしています。目の前の売上よりも、カルチャーのマッチする人だけを入れることにこだわっています。
  • ちなみに、弊社のリーダーを紹介したプロフィールページはこちらです!
    • Galirageに、本当に素敵な方が多いことは、保証します!

参考文献

https://firebase.flutter.dev/docs/installation/android/

https://stackoverflow.com/questions/63804012/flutter-firebase-and-android-issue-unable-to-initialise-cannot-find-google-se

Discussion