Integrates Firebase App Check into Flutter apps. Use when implementing app attestation, configuring App Check providers per platform, setting up debug tokens for development and CI, enabling enforcement for backend resources, managing token refresh and TTL, or hardening app security against abuse.
This skill defines how to correctly implement Firebase App Check in Flutter applications, covering provider selection, debug configuration, enforcement rollout, and security hardening.
Use this skill when:
flutter pub add firebase_app_check
import 'package:firebase_app_check/firebase_app_check.dart';
Initialize App Check after Firebase.initializeApp() and before using any Firebase services:
await Firebase.initializeApp();
await FirebaseAppCheck.instance.activate(
webProvider: ReCaptchaV3Provider('recaptcha-v3-site-key'),
androidProvider: AndroidProvider.playIntegrity,
appleProvider: AppleProvider.deviceCheck,
);
Android:
| Provider | Use case |
|---|---|
AndroidProvider.playIntegrity | Production (default) |
AndroidProvider.debug | Development / CI only |
Apple (iOS / macOS):
| Provider | Use case |
|---|---|
AppleProvider.deviceCheck | Production default (iOS 11+, macOS 10.15+) |
AppleProvider.appAttest | Enhanced security (iOS 14+, macOS 14+) |
AppleProvider.appAttestWithDeviceCheckFallback | App Attest with Device Check fallback |
AppleProvider.debug | Development / CI only |
Web:
| Provider | Use case |
|---|---|
ReCaptchaV3Provider | Standard reCAPTCHA v3 |
ReCaptchaEnterpriseProvider | Enhanced with additional features |
Android note: For certain Android devices, enable "Meets basic device integrity" in the Google Play console to ensure proper App Check functionality.
Use debug providers during development to run in emulators or CI environments:
await Firebase.initializeApp();
await FirebaseAppCheck.instance.activate(
androidProvider: AndroidProvider.debug,
appleProvider: AppleProvider.debug,
);
iOS: Enable debug logging by adding -FIRDebugEnabled to Arguments Passed on Launch in Xcode. The debug token appears in the console output.
Android: The debug token prints to logcat on first run. Filter by DebugAppCheckProvider.
Web: Set self.FIREBASE_APPCHECK_DEBUG_TOKEN = true; in web/index.html before Firebase scripts load.
FirebaseAppCheck.instance.onTokenChange.listen((token) {
// Attach token to custom backend requests
// e.g., set as Authorization header
});
Follow this sequence to avoid disrupting legitimate users:
// Node.js Admin SDK example for verifying App Check tokens
const appCheckToken = req.header('X-Firebase-AppCheck');
const appCheckClaims = await getAppCheck().verifyToken(appCheckToken);