Skip to content

Commit a031d71

Browse files
authored
feat(remote-config): add setDefaults (#970)
1 parent 99ec0f0 commit a031d71

File tree

8 files changed

+113
-0
lines changed

8 files changed

+113
-0
lines changed

.changeset/eighty-chicken-jam.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@capacitor-firebase/remote-config': minor
3+
---
4+
5+
feat: add `setDefaults(...)` method

packages/remote-config/README.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ const removeAllListeners = async () => {
154154
* [`getString(...)`](#getstring)
155155
* [`getInfo()`](#getinfo)
156156
* [`setMinimumFetchInterval(...)`](#setminimumfetchinterval)
157+
* [`setDefaults(...)`](#setdefaults)
157158
* [`setSettings(...)`](#setsettings)
158159
* [`addConfigUpdateListener(...)`](#addconfigupdatelistener)
159160
* [`removeConfigUpdateListener(...)`](#removeconfigupdatelistener)
@@ -301,6 +302,23 @@ Only available for Web.
301302
--------------------
302303

303304

305+
### setDefaults(...)
306+
307+
```typescript
308+
setDefaults(options: SetDefaultsOptions) => Promise<void>
309+
```
310+
311+
Sets config defaults for parameter keys and values in the default namespace config.
312+
313+
| Param | Type |
314+
| ------------- | ----------------------------------------------------------------- |
315+
| **`options`** | <code><a href="#setdefaultsoptions">SetDefaultsOptions</a></code> |
316+
317+
**Since:** 8.3.0
318+
319+
--------------------
320+
321+
304322
### setSettings(...)
305323

306324
```typescript
@@ -429,6 +447,13 @@ Remove all listeners for this plugin.
429447
| **`minimumFetchIntervalInSeconds`** | <code>number</code> | Define the maximum age in seconds of an entry in the config cache before it is considered stale. During development, it's recommended to set a relatively low minimum fetch interval. | <code>43200</code> | 1.3.0 |
430448

431449

450+
#### SetDefaultsOptions
451+
452+
| Prop | Type | Description | Since |
453+
| -------------- | -------------------------------------------------------------- | ---------------------------------------------------- | ----- |
454+
| **`defaults`** | <code>Record&lt;string, string \| number \| boolean&gt;</code> | Defines the dictionary of values to set as defaults. | 8.3.0 |
455+
456+
432457
#### SetSettingsOptions
433458

434459
| Prop | Type | Description | Default | Since |

packages/remote-config/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/remoteconfig/FirebaseRemoteConfig.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ public GetInfoResult getInfo() {
8989
return new GetInfoResult(lastFetchTime, lastFetchStatus);
9090
}
9191

92+
public Task<Void> setDefaults(@NonNull Map<String, Object> defaults) {
93+
return getFirebaseRemoteConfigInstance().setDefaultsAsync(defaults);
94+
}
95+
9296
public Task<Void> setSettings(@Nullable Integer fetchTimeoutInSeconds, @Nullable Integer minimumFetchIntervalInSeconds) {
9397
FirebaseRemoteConfigSettings.Builder builder = new FirebaseRemoteConfigSettings.Builder();
9498
if (fetchTimeoutInSeconds != null) {

packages/remote-config/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/remoteconfig/FirebaseRemoteConfigPlugin.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public class FirebaseRemoteConfigPlugin extends Plugin {
2020
public static final String TAG = "FirebaseRemoteConfig";
2121
public static final String ERROR_KEY_MISSING = "key must be provided.";
2222
public static final String ERROR_CALLBACK_ID_MISSING = "callbackId must be provided.";
23+
public static final String ERROR_DEFAULTS_MISSING = "defaults must be provided.";
2324

2425
private static final int DEFAULT_MINIMUM_FETCH_INTERVAL_IN_SECONDS = 43200;
2526
private static final int DEFAULT_FETCH_TIMEOUT_IN_SECONDS = 60;
@@ -176,6 +177,39 @@ public void setMinimumFetchInterval(PluginCall call) {
176177
call.reject("Not available on Android.");
177178
}
178179

180+
@PluginMethod
181+
public void setDefaults(PluginCall call) {
182+
try {
183+
JSObject defaults = call.getObject("defaults");
184+
if (defaults == null) {
185+
call.reject(ERROR_DEFAULTS_MISSING);
186+
return;
187+
}
188+
189+
Map<String, Object> parsedDefaults = new HashMap<>();
190+
Iterator<String> keys = defaults.keys();
191+
while (keys.hasNext()) {
192+
String key = keys.next();
193+
parsedDefaults.put(key, defaults.get(key));
194+
}
195+
196+
implementation
197+
.setDefaults(parsedDefaults)
198+
.addOnCompleteListener(t -> {
199+
if (t.isSuccessful()) {
200+
call.resolve();
201+
} else {
202+
Exception exception = t.getException();
203+
String errorMessage = exception != null ? exception.getMessage() : "Failed to set defaults.";
204+
call.reject(errorMessage);
205+
}
206+
});
207+
} catch (Exception exception) {
208+
Logger.error(TAG, exception.getMessage(), exception);
209+
call.reject(exception.getMessage());
210+
}
211+
}
212+
179213
@PluginMethod
180214
public void setSettings(PluginCall call) {
181215
try {

packages/remote-config/ios/Plugin/FirebaseRemoteConfig.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ import Capacitor
7171
completion(lastFetchTimeMillis, statusInt, nil)
7272
}
7373

74+
@objc public func setDefaults(_ defaults: [String: NSObject]) {
75+
RemoteConfig.remoteConfig().setDefaults(defaults)
76+
}
77+
7478
@objc public func setSettings(fetchTimeoutInSeconds: Double, minimumFetchIntervalInSeconds: Double) {
7579
let settings = RemoteConfigSettings()
7680
settings.fetchTimeout = fetchTimeoutInSeconds

packages/remote-config/ios/Plugin/FirebaseRemoteConfigPlugin.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public class FirebaseRemoteConfigPlugin: CAPPlugin, CAPBridgedPlugin {
1818
CAPPluginMethod(name: "getNumber", returnType: CAPPluginReturnPromise),
1919
CAPPluginMethod(name: "getString", returnType: CAPPluginReturnPromise),
2020
CAPPluginMethod(name: "setMinimumFetchInterval", returnType: CAPPluginReturnPromise),
21+
CAPPluginMethod(name: "setDefaults", returnType: CAPPluginReturnPromise),
2122
CAPPluginMethod(name: "setSettings", returnType: CAPPluginReturnPromise),
2223
CAPPluginMethod(name: "addConfigUpdateListener", returnType: CAPPluginReturnCallback),
2324
CAPPluginMethod(name: "removeConfigUpdateListener", returnType: CAPPluginReturnPromise)
@@ -26,6 +27,7 @@ public class FirebaseRemoteConfigPlugin: CAPPlugin, CAPBridgedPlugin {
2627
public let errorKeyMissing = "key must be provided."
2728
public let errorFetchAndActivatefailed = "fetchAndActivate failed."
2829
public let errorCallbackIdMissing = "callbackId must be provided."
30+
public let errorDefaultsMissing = "defaults must be provided."
2931

3032
private let defaultMinimumFetchIntervalInSeconds: Double = 43200
3133
private let defaultFetchTimeoutInSeconds: Double = 60
@@ -107,6 +109,21 @@ public class FirebaseRemoteConfigPlugin: CAPPlugin, CAPBridgedPlugin {
107109
call.reject("Not available on iOS.")
108110
}
109111

112+
@objc func setDefaults(_ call: CAPPluginCall) {
113+
guard let defaults = call.getObject("defaults") else {
114+
call.reject(errorDefaultsMissing)
115+
return
116+
}
117+
118+
// Convert JSObject ([String: Any]) to [String: NSObject]
119+
let bridgedDefaults = defaults.compactMapValues { $0 as? NSObject }
120+
121+
// Pass the correctly typed dictionary to your implementation
122+
implementation?.setDefaults(bridgedDefaults)
123+
124+
call.resolve()
125+
}
126+
110127
@objc func setSettings(_ call: CAPPluginCall) {
111128
let fetchTimeoutInSeconds = call.getDouble("fetchTimeoutInSeconds") ?? defaultFetchTimeoutInSeconds
112129
let minimumFetchIntervalInSeconds = call.getDouble("minimumFetchIntervalInSeconds") ?? defaultMinimumFetchIntervalInSeconds

packages/remote-config/src/definitions.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@ export interface FirebaseRemoteConfigPlugin {
5252
setMinimumFetchInterval(
5353
options: SetMinimumFetchIntervalOptions,
5454
): Promise<void>;
55+
/**
56+
* Sets config defaults for parameter keys and values in the default namespace config.
57+
*
58+
* @since 8.3.0
59+
*/
60+
setDefaults(options: SetDefaultsOptions): Promise<void>;
5561
/**
5662
* Set the remote config settings.
5763
*
@@ -207,6 +213,18 @@ export interface SetMinimumFetchIntervalOptions {
207213
minimumFetchIntervalInSeconds: number;
208214
}
209215

216+
/**
217+
* @since 8.3.0
218+
*/
219+
export interface SetDefaultsOptions {
220+
/**
221+
* Defines the dictionary of values to set as defaults.
222+
*
223+
* @since 8.3.0
224+
*/
225+
defaults: Record<string, string | number | boolean>;
226+
}
227+
210228
/**
211229
* @since 6.2.0
212230
*/

packages/remote-config/src/web.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import type {
1919
GetStringResult,
2020
RemoveConfigUpdateListenerOptions,
2121
SetMinimumFetchIntervalOptions,
22+
SetDefaultsOptions,
2223
SetSettingsOptions,
2324
} from './definitions';
2425
import { LastFetchStatus } from './definitions';
@@ -84,6 +85,11 @@ export class FirebaseRemoteConfigWeb
8485
options.minimumFetchIntervalInSeconds * 1000;
8586
}
8687

88+
public async setDefaults(options: SetDefaultsOptions): Promise<void> {
89+
const remoteConfig = getRemoteConfig();
90+
remoteConfig.defaultConfig = options.defaults;
91+
}
92+
8793
public async setSettings(options: SetSettingsOptions): Promise<void> {
8894
const remoteConfig = getRemoteConfig();
8995
if (options.fetchTimeoutInSeconds !== undefined) {

0 commit comments

Comments
 (0)