-
Notifications
You must be signed in to change notification settings - Fork 47
Add Remote config skills #113
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: next
Are you sure you want to change the base?
Changes from all commits
b3641c6
88480ac
84b8db8
a20013e
d400313
6b99ae4
b0fa95a
a3c3e3c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,34 @@ | ||
| --- | ||
| name: firebase-remote-config-basics | ||
| description: Comprehensive guide for Firebase Remote Config, including template management and SDK usage. Use this skill when the user needs help setting up Remote Config, managing feature flags, or updating app behavior dynamically. | ||
| compatibility: This skill is best used with the Firebase CLI, but does not require it. Firebase CLI can be accessed through `npx -y firebase-tools@latest`. | ||
| --- | ||
|
|
||
| # Remote Config | ||
|
|
||
| This skill provides a complete guide for getting started with Remote Config on Android or iOS. Remote Config allows you to change the behavior and appearance of your app without publishing an app update by maintaining a cloud-based configuration template. | ||
|
|
||
| ## Prerequisites | ||
|
|
||
| Provisioning Remote Config requires both a Firebase project and a Firebase app, either Android or iOS. To manage the Remote Config template and conditions via the command line, use the Firebase CLI. See the `firebase-basics` skill for references on project initialization. | ||
|
|
||
| ## SDK Setup | ||
|
|
||
| To learn how to set up Remote Config in your application code, choose your platform: | ||
|
|
||
| * **Android**: [android_setup.md](references/android_setup.md) | ||
| * **iOS**: [ios_setup.md](references/ios_setup.md) | ||
|
|
||
| ## SDK Usage | ||
|
|
||
| The SDK provides a number of features to make your application dynamic and responsive to user segments. | ||
|
|
||
| * **Set In-App Defaults**: Define baseline values to ensure the app functions offline or before the first fetch. | ||
| * **Fetch and Activate**: Retrieve values from the Firebase backend and apply them to the local UI/Logic. | ||
| * **Real-time Updates**: Listen for server-side configuration changes to update the app instantly without a refresh. | ||
| * **Template Management**: Use the Firebase CLI to version-control, get, and deploy your config JSON files. | ||
|
|
||
| To learn how to implement advanced targeting, conditions, and A/B testing, consult the documentation for your platform. | ||
|
|
||
| * **Android**: [Get started with Firebase Remote Config on Android](https://firebase.google.com/docs/remote-config/get-started?platform=android) | ||
| * **iOS**: [Get started with Firebase Remote Config on Apple Platforms](https://firebase.google.com/docs/remote-config/get-started?platform=ios) | ||
|
Comment on lines
+33
to
+34
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This feels repetitive with the previous section on SDK setup? |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,100 @@ | ||
| # Firebase Remote Config Android Setup Guide | ||
|
|
||
| Important references: | ||
|
|
||
| - Refer to the `firebase-basics` skills, particularly those for project and app setup, before proceeding. | ||
|
|
||
| ## Project and App Setup | ||
|
|
||
| Before you begin, ensure you have the following. If a `google-services.json` file is present, then use that Firebase project and app. Otherwise you may need to create them. | ||
|
|
||
| - **Firebase CLI**: Installed and logged in (see `firebase-basics`). | ||
| - **Firebase Project**: Created via `npx -y firebase-tools@latest projects:create` (see `firebase-basics`). | ||
| - **Firebase App**: Created via `npx -y firebase-tools@latest apps:create <IOS|ANDROID|WEB> <package-name-or-bundle-id>` | ||
|
|
||
| The `google-services.json` file must be present in the Android app's module directory. If missing, get the config using the Firebase CLI: `npx -y firebase-tools@latest apps:sdkconfig ANDROID <App-ID>`. | ||
|
|
||
| ## Add Dependencies to Gradle Build | ||
|
|
||
| These changes are made to your Android project's Gradle files. Google Analytics is highly recommended as it enables conditional targeting based on user properties and audiences. | ||
|
|
||
| ### Project-level `build.gradle.kts` (`<project>/build.gradle.kts`) | ||
|
|
||
| Ensure the Google Services plugin is in the `plugins` block: | ||
|
|
||
| ```kotlin | ||
| plugins { | ||
| // ... other plugins | ||
| id("com.google.gms.google-services") version "4.4.0" apply false | ||
| } | ||
| ``` | ||
|
|
||
| ### App-level `build.gradle.kts` (`<project>/<app-module>/build.gradle.kts`) | ||
|
|
||
| 1. Add the Google Services plugin to the `plugins` block: | ||
|
|
||
| ```kotlin | ||
| plugins { | ||
| // ... other plugins | ||
| id("com.google.gms.google-services") | ||
| } | ||
| ``` | ||
|
|
||
| 2. Add the Firebase Remote Config and Analytics dependencies. Using the Firebase Bill of Materials (BoM) is the best practice for version management. | ||
|
|
||
| ```kotlin | ||
| dependencies { | ||
| // ... other dependencies | ||
|
|
||
| // Import the Firebase BoM | ||
| implementation(platform("com.google.firebase:firebase-bom:32.7.0")) | ||
|
|
||
| // Add the dependencies for Remote Config and Analytics | ||
| implementation("com.google.firebase:firebase-config") | ||
| implementation("com.google.firebase:firebase-analytics") | ||
| } | ||
| ``` | ||
|
|
||
|
|
||
| ## Follow up Steps | ||
|
|
||
| The following steps cover the essential patterns for using Remote Config effectively. | ||
|
|
||
| ### Set In-App Defaults | ||
| Define default values so your app has functional logic before it ever fetches a template from the server. Create an XML file (e.g., `res/xml/remote_config_defaults.xml`): | ||
| ```xml | ||
| <?xml version="1.0" encoding="utf-8"?> | ||
| <defaultsMap> | ||
| <entry> | ||
| <key>welcome_message</key> | ||
| <value>Welcome to the app!</value> | ||
| </entry> | ||
| <entry> | ||
| <key>is_feature_enabled</key> | ||
| <value>false</value> | ||
| </entry> | ||
| </defaultsMap> | ||
| ``` | ||
|
Comment on lines
+65
to
+77
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Let's add a comment inside the code block or prefix this by saying that this is an example XML defaults file. |
||
| Then, initialize the SDK in your Activity or Application class: | ||
|
|
||
| ```kotlin | ||
| val remoteConfig = Firebase.remoteConfig | ||
| remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults) | ||
| ``` | ||
|
|
||
|
|
||
| ### Fetch and Activate Values | ||
| To apply values from the cloud, you must fetch them and then activate them. | ||
| ```kotlin | ||
| remoteConfig.fetchAndActivate() | ||
| .addOnCompleteListener(this) { task -> | ||
| if (task.isSuccessful) { | ||
| val updated = task.result | ||
| println("Config params updated: $updated") | ||
| } else { | ||
| println("Fetch failed") | ||
| } | ||
| // Access a value | ||
| val message = remoteConfig.getString("welcome_message") | ||
| } | ||
| ``` | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,71 @@ | ||
| # Firebase Remote Config iOS Setup Guide | ||
|
|
||
| Important references: | ||
|
|
||
| - Refer to the `firebase-basics` skills, particularly those for iOS setup, before proceeding. | ||
| - Refer to the `xcode-project-setup` skills. | ||
|
|
||
| ## Project and App Setup | ||
|
|
||
| Use the `firebase-tools` CLI to set up the project if necessary. | ||
|
|
||
| 1. **Find Bundle ID:** Read the Xcode project to find the iOS bundle ID. Check the `PRODUCT_BUNDLE_IDENTIFIER` value in the `.pbxproj` file or the `Info.plist` file. | ||
| 2. **Create Firebase Project:** If no project exists, create one: | ||
| `npx -y firebase-tools@latest projects:create <project-id> --display-name="My Awesome App"` | ||
| 3. **Create Firebase App:** Register the iOS app with the discovered bundle ID: | ||
| `npx -y firebase-tools@latest apps:create IOS <bundle-id>` | ||
| 4. **Link the GoogleService-Info.plist file:** Use the script in the `xcode-project-setup` skill to obtain the config and link. | ||
|
|
||
| ## Add Swift Package Dependencies | ||
|
|
||
| Install the Remote Config and Analytics SDKs using the Swift package manager, or the script in the `xcode-project-setup` skill. | ||
|
|
||
| Install the `FirebaseRemoteConfig` and `FirebaseAnalytics` packages from the [https://github.com/firebase/firebase-ios-sdk.git](https://github.com/firebase/firebase-ios-sdk.git) repository. | ||
|
|
||
| ## Initialize Firebase in App Code | ||
|
|
||
| Modify the application's entry point to initialize Firebase. Refer to the iOS setup reference in the firebase-basics skill. | ||
|
|
||
| ## Follow up Steps | ||
|
|
||
| The following steps cover the essential patterns for using Remote Config effectively in your iOS app. | ||
|
|
||
| ### Set In-App Defaults | ||
| Define default values so your app behaves as intended before it connects to the backend. Create a property list file (e.g., RemoteConfigDefaults.plist): | ||
|
|
||
| ```xml | ||
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| <plist version="1.0"> | ||
| <dict> | ||
| <key>welcome_message</key> | ||
| <string>Welcome to the app!</string> | ||
| <key>is_feature_enabled</key> | ||
| <false/> | ||
| </dict> | ||
| </plist> | ||
| ``` | ||
|
|
||
| Then, initialize the SDK and set the defaults: | ||
|
|
||
| ```swift | ||
| import FirebaseRemoteConfig | ||
|
|
||
| let remoteConfig = RemoteConfig.remoteConfig() | ||
| remoteConfig.setDefaults(fromPlist: "RemoteConfigDefaults") | ||
| ``` | ||
| ### Fetch and Activate Values | ||
| To retrieve values from the cloud and apply them to your app: | ||
|
|
||
| ```swift | ||
| remoteConfig.fetchAndActivate { (status, error) in | ||
| if status == .successFetchedFromRemote || status == .successUsingPreFetchedData { | ||
| print("Config fetched and activated!") | ||
| } else { | ||
| print("Config not fetched") | ||
| } | ||
|
|
||
| // Access a value | ||
| let message = remoteConfig.configValue(forKey: "welcome_message").stringValue | ||
| } | ||
| ``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
3/4 topics are already covered in the platform-specific setup instructions. Should we instead guide the agent towards best practices on fetching and how to manage template via CLI?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
+1 - I'd also suggest stating specific CLI commands that the agent should use for differrnt CUJS