このページでは、カスタムの App Check プロバイダを使用して Android アプリで App Check を有効にする方法を説明します。App Check を有効にすると、自分のアプリだけがプロジェクトの Firebase リソースにアクセスできるようになります。
デフォルトの Play Integrity プロバイダで App Check を使用する場合は、Android で Play Integrity を使用して App Check を有効にするをご覧ください。
始める前に
1. アプリに App Check ライブラリを追加する
モジュール(アプリレベル)の Gradle ファイル(通常は<project>/<app-module>/build.gradle.kts
または <project>/<app-module>/build.gradle
)に、Android 用の App Check ライブラリの依存関係を追加します。ライブラリのバージョニングの制御には、Firebase Android 部品構成表(BoM)を使用することをおすすめします。
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.7.2")) // Add the dependency for the App Check library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-appcheck") }
Firebase Android 部品構成表を使用すると、アプリは常に互換性のあるバージョンの Firebase Android ライブラリを使用します。
(代替方法)BoM を使用せずに Firebase ライブラリの依存関係を追加する
Firebase BoM を使用しない場合は、依存関係の行でそれぞれの Firebase ライブラリのバージョンを指定する必要があります。
アプリで複数の Firebase ライブラリを使用する場合は、すべてのバージョンの互換性を確保するため、BoM を使用してライブラリのバージョンを管理することを強くおすすめします。
dependencies { // Add the dependency for the App Check library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-appcheck:17.1.2") }
2. App Check インターフェースを実装する
まず、AppCheckProvider
インターフェースと AppCheckProviderFactory
インターフェースを実装するクラスを作成する必要があります。
AppCheckProvider
クラスで getToken()
メソッドを使用して、App Check カスタム プロバイダが真正性の証明に必要な情報を収集してトークン取得サービスに送信し、App Check トークンと交換する必要があります。App Check SDK はトークン キャッシュを処理するので、getToken()
の実装で常に新しいトークンを取得します。
Kotlin+KTX
class YourCustomAppCheckToken( private val token: String, private val expiration: Long, ) : AppCheckToken() { override fun getToken(): String = token override fun getExpireTimeMillis(): Long = expiration } class YourCustomAppCheckProvider(firebaseApp: FirebaseApp) : AppCheckProvider { override fun getToken(): Task<AppCheckToken> { // Logic to exchange proof of authenticity for an App Check token and // expiration time. // ... // Refresh the token early to handle clock skew. val expMillis = expirationFromServer * 1000L - 60000L // Create AppCheckToken object. val appCheckToken: AppCheckToken = YourCustomAppCheckToken(tokenFromServer, expMillis) return Tasks.forResult(appCheckToken) } }
Java
public class YourCustomAppCheckToken extends AppCheckToken { private String token; private long expiration; YourCustomAppCheckToken(String token, long expiration) { this.token = token; this.expiration = expiration; } @NonNull @Override public String getToken() { return token; } @Override public long getExpireTimeMillis() { return expiration; } } public class YourCustomAppCheckProvider implements AppCheckProvider { public YourCustomAppCheckProvider(FirebaseApp firebaseApp) { // ... } @NonNull @Override public Task<AppCheckToken> getToken() { // Logic to exchange proof of authenticity for an App Check token and // expiration time. // ... // Refresh the token early to handle clock skew. long expMillis = expirationFromServer * 1000L - 60000L; // Create AppCheckToken object. AppCheckToken appCheckToken = new YourCustomAppCheckToken(tokenFromServer, expMillis); return Tasks.forResult(appCheckToken); } }
また、AppCheckProvider
実装のインスタンスを作成する AppCheckProviderFactory
クラスを実装します。
Kotlin+KTX
class YourCustomAppCheckProviderFactory : AppCheckProviderFactory { override fun create(firebaseApp: FirebaseApp): AppCheckProvider { // Create and return an AppCheckProvider object. return YourCustomAppCheckProvider(firebaseApp) } }
Java
public class YourCustomAppCheckProviderFactory implements AppCheckProviderFactory { @NonNull @Override public AppCheckProvider create(@NonNull FirebaseApp firebaseApp) { // Create and return an AppCheckProvider object. return new YourCustomAppCheckProvider(firebaseApp); } }
3. App Check を初期化する
他の Firebase SDK を使用する前に、以下の初期化コードをアプリに追加します。
Kotlin+KTX
Firebase.initialize(context) Firebase.appCheck.installAppCheckProviderFactory( YourCustomAppCheckProviderFactory(), )
Java
FirebaseApp.initializeApp(/*context=*/ context); FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance(); firebaseAppCheck.installAppCheckProviderFactory( new YourCustomAppCheckProviderFactory());
次のステップ
アプリに 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 デバッグ プロバイダを使用するデバッグビルドのアプリを作成できます。
Android のデバッグ プロバイダで App Check を使用するをご覧ください。