このページでは、デフォルトのプロバイダ(Android では Play Integrity、Apple プラットフォームでは Device Check、ウェブでは reCAPTCHA v3)を使用して、Flutter アプリで App Check を有効にする方法について説明します。App Check を有効にすると、プロジェクトの Firebase リソースにアクセスできるのは自分のアプリだけとなります。この機能の概要をご覧ください。
1. Firebase プロジェクトを設定する
FlutterFire をインストールして初期化します(まだ行っていない場合)。
Firebase コンソールで、[プロジェクトの設定] > [App Check] セクションに移動し、Play Integrity、Device Check、reCAPTCHA の各プロバイダで App Check を使用するようにアプリを登録します。
Firebase プロダクトで適用を有効にすると、プロダクトのバックエンド リソースにアクセスできるのは登録されているアプリのみとなるため、通常、プロジェクトのアプリすべてを登録する必要があります。
省略可: アプリの登録設定で、プロバイダが発行する App Check トークンにカスタム有効期間(TTL)を設定します。TTL は 30 分から 7 日までの任意の値に設定できます。この値を変更する場合は、次のトレードオフに注意してください。
- セキュリティ: TTL が短いほど、漏えいしたトークンや傍受されたトークンが攻撃者によって悪用される可能性が低減するため、セキュリティが向上します。
- パフォーマンス: TTL が短いほど、アプリで証明書の取得が頻繁に行われます。アプリで証明書が取得されるたびにネットワーク リクエストのレイテンシが増加するため、TTL が短いと、アプリのパフォーマンスに影響する可能性があります。
- 割り当てとコスト: TTL を短くすると、証明書の取得が頻繁に発生し、割り当てが早く消費されます。有料サービスの場合は、費用が増加する可能性があります。割り当てと上限をご覧ください。
通常は、デフォルトの TTL で十分です。App Check ライブラリは TTL の約半分でトークンを更新します。
2. アプリに App Check ライブラリを追加する
Flutter プロジェクトのルートから、次のコマンドを実行してプラグインをインストールします。
flutter pub add firebase_app_check
完了したら、Flutter アプリケーションを再ビルドします。
flutter run
3. App Check を初期化する
次の初期化コードをアプリに追加します。これにより、Storage などの Firebase サービスを使用する前に、かつ Firebase.initializeApp()
を呼び出した後に、そのコードが実行されます。
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
// Import the firebase_app_check plugin
import 'package:firebase_app_check/firebase_app_check.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
await FirebaseAppCheck.instance.activate(
// You can also use a `ReCaptchaEnterpriseProvider` provider instance as an
// argument for `webProvider`
webProvider: ReCaptchaV3Provider('recaptcha-v3-site-key'),
// Default provider for Android is the Play Integrity provider. You can use the "AndroidProvider" enum to choose
// your preferred provider. Choose from:
// 1. Debug provider
// 2. Safety Net provider
// 3. Play Integrity provider
androidProvider: AndroidProvider.debug,
// Default provider for iOS/macOS is the Device Check provider. You can use the "AppleProvider" enum to choose
// your preferred provider. Choose from:
// 1. Debug provider
// 2. Device Check provider
// 3. App Attest provider
// 4. App Attest provider with fallback to Device Check provider (App Attest provider is only available on iOS 14.0+, macOS 14.0+)
appleProvider: AppleProvider.appAttest,
);
runApp(App());
}
次のステップ
アプリに App Check ライブラリがインストールされたら、更新されたアプリのユーザーへの配布を開始します。
更新されたクライアント アプリは、Firebase にリクエストを送信するたびに App Check トークンを送信しますが、Firebase コンソールの [App Check] セクションで適用を有効にするまで、Firebase プロダクトは有効なトークンを必要としません。
指標をモニタリングして適用を有効にする
ただし、適用を有効にする前に、既存の正規ユーザーを中断しないように対策を行う必要があります。一方、アプリリソースの不審な使用に気づいた場合は、すぐに適用を有効にすることもできます。
使用するサービスの App Check 指標を確認すると、この決定を行ううえで役立ちます。
- Realtime Database、Cloud Firestore、Cloud Storage、Authentication で App Check リクエストの指標をモニタリングする。
- Cloud Functions で App Check リクエストの指標をモニタリングする。
App Check の適用を有効にする
App Check がユーザーに与える影響を理解し、続行する準備ができたら、App Check の適用を有効にします。
- Realtime Database、Cloud Firestore、Cloud Storage、Authentication で App Check の適用を有効にする。
- Cloud Functions で App Check の適用を有効にする。
デバッグ環境で App Check を使用する
アプリを App Check に登録した後に、開発中のエミュレータや継続的インテグレーション(CI)など、通常は App Check が有効と分類しない環境でアプリを実行する場合は、実際の証明書プロバイダの代わりに App Check デバッグ プロバイダを使用するデバッグビルドのアプリを作成できます。
Flutter アプリのデバッグ プロバイダで App Check を使用するをご覧ください。