😆

【Flutter】AppCheck導入とエラーハンドリング

2023/11/02に公開
1

AppCheckとは

不正行為からAPIを保護し、サービスへのアクセスを保護する追加のセキュリティ層です。 トラフィックがアプリから発信されていることを証明し、有効な認証情報のないトラフィックをブロックします。
https://firebase.google.com/products/app-check?hl=ja
画像参照先[1] ぜひこちらも見てみてください!

開発者向け

AppCheckが適用されている環境で作業する場合デバッグトークンが必要です。また機種やOSを変更した際にも再度デバッグトークンを表示する必要があります。
https://firebase.google.com/docs/app-check/flutter/debug-provider?hl=ja

セットアップ

1: Firebaseプロジェクトを追加する(今回は省略)

2: アプリに App Check ライブラリを追加する

flutter pub add firebase_app_check
flutter run 

3: App Check を初期化する

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  //Firebase.initializeApp() を呼び出した後すぐに実行する
  //-----AppCheckの初期化コード-----//
  await FirebaseAppCheck.instance.activate(
      appleProvider:
          kReleaseMode ? AppleProvider.deviceCheck : AppleProvider.debug,
      androidProvider:
          kReleaseMode ? AndroidProvider.playIntegrity :
	  AndroidProvider.debug,
    );
   //------------------------------//
  runApp(App());
}

終わり!!

適用方法

AppCheckを有効後
Firebase > AppCheck 非適用から適用済みとするだけ。※非適用状態でもモニタリングは可能

デバッグトークンの設定

AppCheckが適用されている環境で作業する場合デバッグトークンが必要です。また機種やOSを変更した際にも再度デバッグトークンを表示する必要があります。

ios

$ flutter run
//アプリ側でFirebaseAppCheckが初期化された時に以下が表示される
Firebase App Check Debug Token: **ここに表示されるトークンを追加**

Android:

$ flutter run
//アプリ側でFirebaseAppCheckが初期化された時に以下が表示される
D DebugAppCheckProvider: Enter this debug secret into the allow list in
the Firebase Console for your project: **ここに表示されるトークンを追加**

備考: Firebase App Check APIが有効になっていない場合、次章に記載されている403エラーが発生する。

エラーハンドリング

不正なリクエストの場合

----------------FIREBASE CRASHLYTICS----------------
[cloud_firestore/permission-denied] The caller does not have permission to execute the specified operation.

前章の手順でデバッグトークンを設定する。
Firebase > AppCheck > アプリ > デバッグトークンを表示 > デバッグトークンを追加

403エラー ※internal error等もここに該当する

W/LocError getting App Check token; using placeholder token instead.
Error: com.google.firebase.FirebaseException: 
Error returned from API. code: 403 body: 
Firebase App Check API has not been used in project **12桁のID** before or it is disabled. 
Enable it by visiting https://console.developers.google.com/apis/api/firebaseappcheck.googleapis.com/overview?project=**12桁のID** then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.

Firebase App Check APIが有効になっておらず、App Check Tokenを取得できていない。

//以下のように記載がある
Enable it by visiting https://console.developers.google.com/apis/api/firebaseappcheck.googleapis.com/overview?project=**12桁のID** then retry.

指示されているwebサイトに移動しFirebase App Check APIを有効にする。

以下のようにAPIが有効となればOK

脚注
  1. https://zenn.dev/flutteruniv_dev/articles/20230316-172748-flutter-firebase-app-check#app-check-とは ↩︎