FlutterでGoogle Driveを使ったバックアップ

Flutterに限りませんが、Google Driveを使用してアプリケーション領域にバックアップ、リストアをしたい場合、色々と設定がややこしくて詰まるので、自分用の備忘録として確認すべき項目をリスト化しておきます。

他の人にも役立てば幸いです。


自分のPC

  • keytoolが使用できる事(自分の場合、パスが通っていないので[Java > jdk-xxx > bin](keytool.exeがあるフォルダ)まで移動)
  • コマンドでデバッグキーストアの取得
keytool -list -v -alias androiddebugkey -keystore C:\Users\YOUR_USERNAME\.android\debug.keystore

* [YOUR_USERNAME] 自分のユーザー名
* [キーストアのパスワード] 通常は「android」
  • 表示された「SHA-1」(key1)と「SHA-256」(key2)をコピペしておく
  • コマンドでリリースキーストアの作成と取得
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

* [my-release-key.keystore] 生成されるキーストアの名前
* [my-key-alias] キーエイリアスの名前
  • キーストアのパスワードとキーエイリアスのパスワードを設定後、名前、組織部署、組織名(会社名)、都市名(市)、州(県)、国コード(JP)を入力して、[はい]でキーストアの作成
  • コマンドで作成したキーストアのフィンガープリントを取得
keytool -list -v -alias my-key-alias -keystore my-release-key.keystore

* [my-key-alias] 先程の作成したキーエイリアスの名前
* [my-release-key.keystore] 先程の作成したキーストアの名前
  • キーストアのパスワードとキーエイリアスのパスワードを入力して、表示された「SHA-1」(key3)と「SHA-256」(key4)をコピペしておく

Google Play

  • アプリの登録(大前提)(テスト公開でOK)
  • [設定 > アプリの署名]から「SHA-1 証明書のフィンガープリント」(key5)「SHA-256 証明書のフィンガープリント」(key6)を取得

Firebase

  • プロジェクトの作成(大前提)
  • アプリの追加(Android)
  • [Authentication > Sign-in method(ログイン方法)]のログインプロバイダで「Google」を有効にする
  • [プロジェクトの概要 > プロジェクトの設定]もしくは[プロジェクト > アプリ]を選択
  • [マイアプリ]のアプリを選択して「フィンガープリントを追加」する(key1, key2, key3, key4, key5, key6)
  • google-services.jsonをダウンロードしておく

Google Cloud

  • プロジェクトの作成(大前提)
  • [ナビゲーションメニュー > APIとサービス > ライブラリ]に移動
  • 「Google Drive」を検索して、「Google Drive API」を有効にする
  • [APIとサービス > OAuth 同意画面]に移動
  • [公開ステータス]は「テスト」(公開したら本番環境へ)
  • [ユーザーの種類]は「外部」
  • [スコープの設定]は「Google Drive」で検索して「…/auth/drive.file」と「…/auth/drive.appdata」を追加

Flutter

  • (ここからルートはアプリのトップディレクトリ)
  • [android/app]にgoogle-services.jsonを追加
  • [android/build.gradle]に以下を追加
    dependencies {
        ...

        // versionはその都度合わせる
        classpath 'com.google.gms:google-services:4.3.15'
    }
  • [android/app/build.gradle]に以下を追加
plugins {
    ...
    id 'com.google.gms.google-services'
}
dependencies {
    ...
    implementation(platform("com.google.firebase:firebase-bom:32.7.0"))
    implementation("com.google.firebase:firebase-analytics")

    // Firebaseを利用しない場合、ここから下は必要ないかも
    implementation("com.google.firebase:firebase-auth")
    implementation("com.google.firebase:firebase-firestore")
}
  • 「flutter pub add」コマンドで必要なパッケージを取得
  •   google_sign_in
  •   firebase_core(Firebaseの機能が不要なら要らない?)
  •   firebase_auth(Firebaseの機能が不要なら要らない?)
  •   flutter_secure_storage
  •   googleapis
  •   googleapis_auth
  •   http(コードの中で使うなら必要)

Flutterでの接続について

設定はGoogle Play, Firebase, Google Cloudがちゃんとしていれば大丈夫のはずです。
しかし私の場合、GoogleサインインはできるのですがGoogle Driveに接続できないので、Flutterのコードでサインインの時にスコープを設定しました。

GoogleSignIn googleSignIn = GoogleSignIn(
  scopes: [
    'https://www.googleapis.com/auth/drive.file',
    'https://www.googleapis.com/auth/drive.appdata',
  ],
);

これで上手くいきました。
ちなみにここまでBingと二人三脚でやりました。Bing、めちゃくちゃ優秀です。

Google Driveへのバックアップ、リストアだけが目的の場合、Firebase関連のbuild.gradleの設定やパッケージのインストールは不要かな?と思っています。


ここまでやって接続できない、エラーが出る人は私にとっても勉強になるので教えてください。


レシピブック(レシピ登録アプリ)

投稿日

カテゴリー:

ブログランキング・にほんブログ村へ

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です