FlutterでFirebaseを使ってみる〜Firebase導入編（Android）〜

## 投稿の経緯
FlutterのキャッチアップでFirebaseと連携してFirestoreを使うサンプルプロジェクトを立ち上げました。今回はAndroidアプリにFirebaseを導入してエミュレーターでビルドするところまでを書こうと思います。

iOSアプリにFirebaseを導入する記事は↓コチラ↓

https://qiita.com/nkekisasa222/items/ebca2a89319fd0dcfe72

## 環境
Flutter：2.8.1
MacOS：12.1

## サンプルプロジェクト
GitHubにコードPushしています。気になる方はご覧ください。
![QR_925113.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/f774b418-6fc2-a814-c742-ebf8dde02847.png)

## Firebaseの導入
公式情報を参考にして進めていきます。

https://firebase.google.com/docs/flutter/setup?hl=ja&platform=android

Firebaseプロジェクトの作成は[iOSの記事](https://qiita.com/nkekisasa222/items/ebca2a89319fd0dcfe72)の方で作成したのでアプリをFirebaseに登録するところから書いていきます。

#### アプリをFirebaseに登録する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/151792bd-6aee-465b-a799-660ebc29d67f.png)
Firebaseプロジェクトを作成したらコンソールのAndroidアイコンからアプリをFirebaseに登録しましょう。
`Android パッケージ名`の箇所にアプリのパッケージ名を入力します。
パッケージ名は、アプリケーション ID と呼ばれることもあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/753abc22-1495-a15e-798e-9478f2e78215.png)
パッケージ名は`/Flutterプロジェクト/android/app/build.gradle/`から取得します。

```build.gradle
defaultConfig {
    // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
    applicationId "com.ken.firestore_training"

    // 以下省略 //
}
```
今回のサンプルプロジェクトの場合は`com.ken.firestore_training`になります。
アプリのニックネームとデバッグ用の署名証明書 SHA-1は任意なので今回はスキップしてアプリを登録します。

#### Firebase 構成ファイルを追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/0d59d737-8381-9ea0-fd56-5992ac4d4aa4.png)
続いて`google-services.json`をダウンロードしてファイルをFlutterアプリに追加します。
![fs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/822a8058-b740-52a3-7028-a412ee64e0be.png)
保存場所は`/Flutterプロジェクト/android/app/`に保存します。

続いて、Gradleファイルに`google-servicesプラグイン`を追加します。
`/Flutterプロジェクト/android/build.gradle`に、GoogleサービスのGradleプラグインを含めるためのルールを追加します。GoogleのMavenリポジトリがあることも確認してください。

```build.gradle
buildscript {
    ext.kotlin_version = '1.3.50'
    repositories {
        google() // Google's Maven repository ここがあるか確認
        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' // Google Services plugin を追加
    }
}

allprojects {
    repositories {
        google() // Google's Maven repository ここがあるか確認
        mavenCentral()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
```
続いて、`/Flutterプロジェクト/android/app/build.gradle/`で、GoogleサービスのGradleプラグインを適用します。

```build.gradle
// 省略

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

// 省略
```
ここまでできたらターミナルで`flutter packages get`を実行してください。

#### FlutterFireプラグインを追加する
https://qiita.com/nkekisasa222/items/ebca2a89319fd0dcfe72

コチラの記事にFlutterFireプラグインを追加する内容を記事にしています。

## アプリをビルドする
FlutterFireプラグインを追加してプラグインをメジャーバージョンへアップデートしたらビルドを実行しましょう。

```
The plugin cloud_firestore requires a higher Android SDK version.

Fix this issue by adding the following to the file /Users/ユーザー名/Library/Mobile Documents/com~apple~CloudDocs/Flutter_projects/アプリ名/android/app/build.gradle:
android {
  defaultConfig {
    minSdkVersion 19
  }
}

Note that your app won't be available to users running Android SDKs below 19.
Alternatively, try to find a version of this plugin that supports these lower versions of the Android SDK.
```
するとこのようなエラーが発生すると思います。このエラーは下記の**stackoverflow**の記事で解説されています。

https://stackoverflow.com/questions/70106952/my-flutter-app-is-not-running-after-adding-cloud-firebase-package

私はひとまず`minSdkVersion 30`に変更して対応しました。

この状態でビルドすれば成功すると思います。

## おわりに
今回はFlutterプロジェクトのAndroidアプリにFirebaseを導入して、エミュレーターでビルドするところまでを記事にしました。

ご覧いただきありがとうございました。
こうしたほうがいいや、ここはちょっと違うなど気になる箇所があった場合、ご教示いただけると幸いです。

## お知らせ
現在副業でiOSアプリ開発案件を募集しています。

↓活動リンクはこちら↓
https://linktr.ee/sasaki.ken

[Twitter DM](https://twitter.com/ken_sasaki2)でご依頼お待ちしております！
![Twitter_QR.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/de273ca6-120d-5727-48b0-7fcdf52eed34.png)