Android でカスタム プロバイダを使用して App Check を使ってみる
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
このページでは、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:34.1.0"))
// 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 BoM を使用すると、アプリは常に互換性のあるバージョンの 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:19.0.0")
}
2. App Check インターフェースを実装する
まず、AppCheckProvider
インターフェースと AppCheckProviderFactory
インターフェースを実装するクラスを作成する必要があります。
AppCheckProvider
クラスには getToken()
メソッドが必要であり、これによってカスタム App Check プロバイダが真正性の証明に必要なあらゆる情報を収集し、App Check トークンの代わりに、トークン取得サービスに送信します。App Check SDK はトークン キャッシュ保存を処理するので、getToken()
の実装で常に新しいトークンを取得します。
Kotlin
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
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
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 指標を確認します。
App Check 適用を有効にする
App Check がユーザーに与える影響を理解し、続行する準備ができたら、App Check の適用を有効にできます。
デバッグ環境で App Check を使用する
アプリを App Check に登録した後に、開発中のエミュレータや継続的インテグレーション(CI)など、通常は App Check が有効と分類しない環境でアプリを実行する場合は、実際の証明書プロバイダの代わりに App Check デバッグ プロバイダを使用するデバッグビルドのアプリを作成できます。
Android のデバッグ プロバイダで App Check を使用するをご覧ください。
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2025-08-28 UTC。
[null,null,["最終更新日 2025-08-28 UTC。"],[],[],null,["This page shows you how to enable App Check in an Android app, using [your\ncustom App Check provider](/docs/app-check/android/custom-provider). When you enable App Check,\nyou help ensure that only your app can access your project's Firebase resources.\n\nIf you want to use App Check with the default Play Integrity provider, see\n[Enable App Check with Play Integrity on Android](/docs/app-check/android/play-integrity-provider).\n\nBefore you begin\n\n- [Add Firebase to your Android project](/docs/android/setup) if you haven't\n already done so.\n\n- [Implement your custom App Check provider's server-side logic](/docs/app-check/custom-provider).\n\n1. Add the App Check library to your app In your **module (app-level) Gradle file** (usually `\u003cproject\u003e/\u003capp-module\u003e/build.gradle.kts` or `\u003cproject\u003e/\u003capp-module\u003e/build.gradle`), add the dependency for the App Check library for Android. We recommend using the [Firebase Android BoM](/docs/android/learn-more#bom) to control library versioning.\n\n\u003cbr /\u003e\n\n```carbon\ndependencies {\n // Import the BoM for the Firebase platform\n implementation(platform(\"com.google.firebase:firebase-bom:34.1.0\"))\n\n // Add the dependency for the App Check library\n // When using the BoM, you don't specify versions in Firebase library dependencies\n implementation(\"com.google.firebase:firebase-appcheck\")\n}\n```\n\nBy using the [Firebase Android BoM](/docs/android/learn-more#bom),\nyour app will always use compatible versions of Firebase Android libraries.\n*(Alternative)*\nAdd Firebase library dependencies *without* using the BoM\n\nIf you choose not to use the Firebase BoM, you must specify each Firebase library version\nin its dependency line.\n\n**Note that if you use *multiple* Firebase libraries in your app, we strongly\nrecommend using the BoM to manage library versions, which ensures that all versions are\ncompatible.** \n\n```groovy\ndependencies {\n // Add the dependency for the App Check library\n // When NOT using the BoM, you must specify versions in Firebase library dependencies\n implementation(\"com.google.firebase:firebase-appcheck:19.0.0\")\n}\n```\n\n\u003cbr /\u003e\n\n2. Implement the App Check interfaces\n\nFirst, you need to create classes that implement the `AppCheckProvider` and\n`AppCheckProviderFactory` interfaces.\n\nYour `AppCheckProvider` class must have a `getToken()` method, which collects\nwhatever information your custom App Check provider requires as proof of\nauthenticity, and sends it to your token acquisition service in exchange for an\nApp Check token. The App Check SDK handles token caching, so always get\na new token in your implementation of `getToken()`. \n\nKotlin \n\n```kotlin\nclass YourCustomAppCheckToken(\n private val token: String,\n private val expiration: Long,\n) : AppCheckToken() {\n override fun getToken(): String = token\n override fun getExpireTimeMillis(): Long = expiration\n}\n\nclass YourCustomAppCheckProvider(firebaseApp: FirebaseApp) : AppCheckProvider {\n override fun getToken(): Task\u003cAppCheckToken\u003e {\n // Logic to exchange proof of authenticity for an App Check token and\n // expiration time.\n // ...\n\n // Refresh the token early to handle clock skew.\n val expMillis = expirationFromServer * 1000L - 60000L\n\n // Create AppCheckToken object.\n val appCheckToken: AppCheckToken = YourCustomAppCheckToken(tokenFromServer, expMillis)\n return Tasks.forResult(appCheckToken)\n }\n}https://github.com/firebase/snippets-android/blob/391c1646eacf44d2aab3f76bcfa60dfc6c14acf1/appcheck/app/src/main/java/com/google/firebase/example/appcheck/kotlin/CustomProvider.kt#L16-L40\n```\n\nJava \n\n```java\npublic class YourCustomAppCheckToken extends AppCheckToken {\n private String token;\n private long expiration;\n\n YourCustomAppCheckToken(String token, long expiration) {\n this.token = token;\n this.expiration = expiration;\n }\n\n @NonNull\n @Override\n public String getToken() {\n return token;\n }\n\n @Override\n public long getExpireTimeMillis() {\n return expiration;\n }\n}\n\npublic class YourCustomAppCheckProvider implements AppCheckProvider {\n public YourCustomAppCheckProvider(FirebaseApp firebaseApp) {\n // ...\n }\n\n @NonNull\n @Override\n public Task\u003cAppCheckToken\u003e getToken() {\n // Logic to exchange proof of authenticity for an App Check token and\n // expiration time.\n // ...\n\n // Refresh the token early to handle clock skew.\n long expMillis = expirationFromServer * 1000L - 60000L;\n\n // Create AppCheckToken object.\n AppCheckToken appCheckToken =\n new YourCustomAppCheckToken(tokenFromServer, expMillis);\n\n return Tasks.forResult(appCheckToken);\n }\n}https://github.com/firebase/snippets-android/blob/391c1646eacf44d2aab3f76bcfa60dfc6c14acf1/appcheck/app/src/main/java/com/google/firebase/example/appcheck/CustomProvider.java#L17-L62\n```\n\nAlso, implement a `AppCheckProviderFactory` class that creates instances of your\n`AppCheckProvider` implementation: \n\nKotlin \n\n```kotlin\nclass YourCustomAppCheckProviderFactory : AppCheckProviderFactory {\n override fun create(firebaseApp: FirebaseApp): AppCheckProvider {\n // Create and return an AppCheckProvider object.\n return YourCustomAppCheckProvider(firebaseApp)\n }\n}https://github.com/firebase/snippets-android/blob/391c1646eacf44d2aab3f76bcfa60dfc6c14acf1/appcheck/app/src/main/java/com/google/firebase/example/appcheck/kotlin/CustomProvider.kt#L44-L49\n```\n\nJava \n\n```java\npublic class YourCustomAppCheckProviderFactory implements AppCheckProviderFactory {\n @NonNull\n @Override\n public AppCheckProvider create(@NonNull FirebaseApp firebaseApp) {\n // Create and return an AppCheckProvider object.\n return new YourCustomAppCheckProvider(firebaseApp);\n }\n}https://github.com/firebase/snippets-android/blob/391c1646eacf44d2aab3f76bcfa60dfc6c14acf1/appcheck/app/src/main/java/com/google/firebase/example/appcheck/CustomProvider.java#L66-L73\n```\n\n3. Initialize App Check\n\nAdd the following initialization code to your app so that it runs before you use\nany other Firebase SDKs: \n\nKotlin \n\n```kotlin\nFirebase.initialize(context)\nFirebase.appCheck.installAppCheckProviderFactory(\n YourCustomAppCheckProviderFactory(),\n)https://github.com/firebase/snippets-android/blob/391c1646eacf44d2aab3f76bcfa60dfc6c14acf1/appcheck/app/src/main/java/com/google/firebase/example/appcheck/kotlin/CustomProvider.kt#L54-L57\n```\n\nJava \n\n```java\nFirebaseApp.initializeApp(/*context=*/ context);\nFirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();\nfirebaseAppCheck.installAppCheckProviderFactory(\n new YourCustomAppCheckProviderFactory());https://github.com/firebase/snippets-android/blob/391c1646eacf44d2aab3f76bcfa60dfc6c14acf1/appcheck/app/src/main/java/com/google/firebase/example/appcheck/CustomProvider.java#L78-L81\n```\n\nNext steps\n\nOnce the App Check library is installed in your app, start distributing the\nupdated app to your users.\n\nThe updated client app will begin sending App Check tokens along with every\nrequest it makes to Firebase, but Firebase products will not require the tokens\nto be valid until you enable enforcement in the App Check section of the\nFirebase console.\n\nMonitor metrics and enable enforcement\n\nBefore you enable enforcement, however, you should make sure that doing so won't\ndisrupt your existing legitimate users. On the other hand, if you're seeing\nsuspicious use of your app resources, you might want to enable enforcement\nsooner.\n\nTo help make this decision, you can look at App Check metrics for the\nservices you use:\n\n- [Monitor App Check request metrics](/docs/app-check/monitor-metrics) for Firebase AI Logic, Data Connect, Realtime Database, Cloud Firestore, Cloud Storage, Authentication, Google Identity for iOS, Maps JavaScript API, and Places API (New).\n- [Monitor App Check request metrics for Cloud Functions](/docs/app-check/monitor-functions-metrics).\n\nEnable App Check enforcement\n\nWhen you understand how App Check will affect your users and you're ready to\nproceed, you can enable App Check enforcement:\n\n- [Enable App Check enforcement](/docs/app-check/enable-enforcement) for Firebase AI Logic, Data Connect, Realtime Database, Cloud Firestore, Cloud Storage, Authentication, Google Identity for iOS, Maps JavaScript API, and Places API (New).\n- [Enable App Check enforcement for Cloud Functions](/docs/app-check/cloud-functions).\n\nUse App Check in debug environments\n\nIf, after you have registered your app for App Check, you want to run your\napp in an environment that App Check would normally not classify as valid,\nsuch as an emulator during development, or from a continuous integration (CI)\nenvironment, you can create a debug build of your app that uses the\nApp Check debug provider instead of a real attestation provider.\n\nSee [Use App Check with the debug provider on Android](/docs/app-check/android/debug-provider)."]]