accessibility
Use when working on accessibility, a11y, WCAG, ARIA, screen readers, keyboard nav, focus order, contrast, alt text, captions, reduced motion, or target sizes;…
Use when implementing app attestation, configuring App Check providers, setting up debug tokens, enabling backend enforcement, or managing token refresh.
$ npx -y skills add evanca/flutter-ai-rules --skill firebase-app-check --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/firebase-app-checkContext preview
The summary Claude sees to decide when to auto-load this skill.
Use when implementing app attestation, configuring App Check providers, setting up debug tokens, enabling backend enforcement, or managing token refresh.
name: firebase-app-check description: "Use when implementing app attestation, configuring App Check providers, setting up debug tokens, enabling backend enforcement, or managing token refresh." license: MIT
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,
);1. Register apps in the Firebase console under **Project Settings > App Check**. 2. For web, obtain a reCAPTCHA v3 site key from the Firebase console. 3. Confirm activation completes before any Firestore, Storage, or RTDB calls. 4. Consider setting a custom **TTL** — shorter TTLs are more secure but consume quota faster.
Avoid calling `FirebaseApp.configure()` natively in your `AppDelegate` — `Firebase.initializeApp()` already configures the native default app. If you must call it, install your `AppCheckProviderFactory` **before** `configure()`; otherwise the Apple SDK locks in `DeviceCheck` on physical devices and the `appleProvider` passed to `activate()` (including `AppleProvider.debug`) is silently ignored. This is easiest to miss because simulators already default to the debug provider. `activate()` on Android is unaffected. See [flutterfire#18613](https://github.com/firebase/flutterfire/issues/18613).
---
**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. On **physical devices**, `AppleProvider.debug` is ignored if your `AppDelegate` calls `FirebaseApp.configure()` natively — see the native `configure()` note in Setup and Configuration.
**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.
1. Copy the debug token from the device/emulator console output. 2. In the Firebase console, navigate to **App Check > Apps > Manage debug tokens**. 3. Add the token. It is immediately active for that app.
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:
1. **Deploy** App Check activation code to all app versions. 2. **Monitor** App Check metrics in the Firebase console — wait until most traffic shows valid tokens. 3. **Enable enforcement** gradually, starting with non-critical Firebase services (e.g., Cloud Storage before Firestore). 4. **Verify** that unverified request percentage drops to near zero before enforcing on critical services.
---
36 Flutter and Dart skills your coding agent loads by itself, sourced only from official documentation. A skill is a folder with a SKILL.md file.
Use when working on accessibility, a11y, WCAG, ARIA, screen readers, keyboard nav, focus order, contrast, alt text, captions, reduced motion, or target sizes;…
Use when creating a feature, designing folder structure, adding repositories/services/view models, wiring dependency injection, or deciding which layer owns…
Use when creating a Cubit or Bloc, modeling state with sealed classes or status enums, wiring BlocBuilder/BlocListener/BlocProvider, writing bloc tests, or…
Use when asked to review a PR, MR, branch, or diff, audit changed files, or check code quality.
Use when writing switch statements, refactoring if-else chains, creating data classes, choosing records vs classes, destructuring values, or modernizing…
Use when building AI agents in Dart, implementing Genkit flows or tools, integrating LLMs into Dart or Flutter applications, or using Genkit Dart plugins.