firebase-remote-config

$npx mdskill add evanca/flutter-ai-rules/firebase-remote-config

Integrates Firebase Remote Config into Flutter apps for remote configuration and real-time updates.

  • Helps manage app behavior remotely without deploying updates, including parameter defaults and conditional targeting.
  • Integrates with Firebase Remote Config SDK, Google Analytics, and the Remote Config REST API.
  • Decides based on configured settings like fetch intervals and throttling for optimal performance.
  • Presents results through fetched and activated config values, with real-time updates for dynamic changes.

SKILL.md

.github/skills/firebase-remote-configView on GitHub ↗
---
name: firebase-remote-config
description: Integrates Firebase Remote Config into Flutter apps. Use when setting up Remote Config, managing parameter defaults, fetching and activating values, implementing real-time updates, or handling throttling and testing.
---

# Firebase Remote Config Skill

This skill defines how to correctly use Firebase Remote Config in Flutter applications.

## When to Use

Use this skill when:

* Setting up Remote Config to configure your app without deploying updates.
* Managing parameter defaults and remote values.
* Fetching, activating, and listening to config updates.
* Applying throttling, A/B testing, or conditional targeting.

---

## 1. Setup and Configuration

```
flutter pub add firebase_remote_config
flutter pub add firebase_analytics  # required for conditional targeting of app instances
```

```dart
import 'package:firebase_remote_config/firebase_remote_config.dart';

final remoteConfig = FirebaseRemoteConfig.instance;
```

- Enable **Google Analytics** in your Firebase project for user property and audience targeting.
- Ensure the **Remote Config REST API** is not disabled — the SDK depends on it.
- For **macOS**, enable Keychain Sharing in Xcode.

**Configure settings:**

```dart
await remoteConfig.setConfigSettings(RemoteConfigSettings(
  fetchTimeout: const Duration(minutes: 1),
  minimumFetchInterval: const Duration(hours: 1),
));
```

---

## 2. Parameter Management

**Set in-app defaults** (ensures your app behaves as intended before connecting to the backend):

```dart
await remoteConfig.setDefaults(const {
  "example_param_1": 42,
  "example_param_2": 3.14159,
  "example_param_3": true,
  "example_param_4": "Hello, world!",
});
```

- **Never** store confidential data in Remote Config keys or values — they can be accessed by end users.
- Use type-specific getters: `getBool()`, `getDouble()`, `getInt()`, `getString()`.
- Define parameters with the **same names** in the Firebase console as those in your app.
- Group related parameters with common prefixes (e.g., `login_timeout`, `login_attempts_max`).

---

## 3. Fetching and Activating

```dart
await remoteConfig.fetchAndActivate();
```

- Use `fetchAndActivate()` to fetch and apply values in a single call.
- Alternatively, call `fetch()` then `activate()` separately to control when values take effect.
- Activate fetched values at appropriate times (e.g., app start) for a smooth user experience.
- Check `remoteConfig.lastFetchStatus` to determine if the fetch was successful, failed, or throttled.
- Handle fetch failures gracefully by falling back to default values.

---

## 4. Real-time Updates

```dart
remoteConfig.onConfigUpdated.listen((event) async {
  await remoteConfig.activate();
  // Use the new config values here
});
```

- Real-time Remote Config is **not available for Web**.
- Update your UI state when new configuration values are activated.
- Ensure real-time updates don't disrupt the user experience.

---

## 5. Throttling and Performance

- Fetch calls are **throttled** if an app fetches too frequently.
- Default minimum fetch interval in production: **12 hours**.
- For development, use a shorter interval — but only in debug builds:

```dart
await remoteConfig.setConfigSettings(RemoteConfigSettings(
  fetchTimeout: const Duration(minutes: 1),
  minimumFetchInterval: const Duration(minutes: 5),
));
```

- Be mindful of **service-side quota limits** with a large user base.

---

## 6. Testing and Debugging

- Use **conditional values** in the Firebase console to test configurations without new app deployments.
- Implement **A/B testing** with different parameter values for different user segments.
- Test your app with both default and remote values.
- Verify graceful handling of configuration changes at runtime.
- Test **offline behavior** to ensure proper fallback to defaults.

---

## References

- [Firebase Remote Config Flutter documentation](https://firebase.google.com/docs/remote-config/get-started?platform=flutter)

More from evanca/flutter-ai-rules

SkillDescription
architecture-feature-firstStructures Flutter apps using layered architecture (UI / Logic / Data) with feature-first file organization. Use when creating new features, designing the project structure, adding repositories/services/view models (or cubits/providers/notifiers), or wiring dependency injection. State management agnostic.
blocImplements Flutter state management using the bloc library (Bloc and Cubit). Use when creating new features, screens, or state management logic with bloc/cubit, modeling state, wiring Flutter widgets to blocs, or writing bloc/cubit unit tests.
dart-3-updatesApplies Dart 3 language features in Flutter/Dart code. Use when writing if-else or switch statements, creating new classes, or deciding between a data class and a record.
effective-dartApplies Effective Dart guidelines in Flutter/Dart code. Use when writing or reviewing Dart code for naming conventions, types, style, imports, file structure, usage patterns, documentation, testing, widgets, state management, or performance.
firebase-aiIntegrates Firebase AI Logic into Flutter apps. Use when setting up the firebase_ai plugin, calling Gemini models, handling AI service errors, or applying security and privacy considerations for AI features.
firebase-analyticsIntegrates Firebase Analytics into Flutter apps. Use when setting up analytics, logging events, setting user properties, or configuring event parameters.
firebase-app-checkIntegrates Firebase App Check into Flutter apps. Use when setting up App Check, selecting providers per platform, using debug providers during development, enabling enforcement, or applying App Check security best practices.
firebase-authIntegrates Firebase Authentication into Flutter apps. Use when setting up auth, managing auth state, implementing email/password or social sign-in, handling auth errors, managing users, or applying security best practices.
firebase-cloud-firestoreIntegrates Cloud Firestore into Flutter apps. Use when setting up Firestore, designing document/collection structure, reading and writing data, working with real-time listeners, designing for scale, or applying security rules.
firebase-cloud-functionsCalls Firebase Cloud Functions from Flutter apps. Use when setting up callable functions, passing data to functions, handling errors from function calls, optimizing performance, or testing with the Firebase Emulator Suite.