Remote Config and A/B Testing are two powerful tools to optimize your app experience without code changes or app updates.
The Remote Config and A/B Testing features are available in Countly Enterprise and as an add-on in Flex.
Remote Config
Remote Config lets you update how your app works or looks without requiring a new release by fetching dynamic key-value data from your Countly server. These values can be personalized based on user data, ensuring a tailored experience for every user.
To understand how you can leverage Remote Config in your dashboard check here.
Downloading Values
To turn on automatic Remote Config value downloads during SDK init and device ID changes:
To download Remote Config values directly:
// Before init
Countly.remote_config = true;Countly.init({
app_key: "APP_KEY",
url: "SERVER_URL",
remote_config: true,
});config.enableRemoteConfigAutomaticTriggers();
config.enableRemoteConfigAutomaticTriggers = YES;
config.enableRemoteConfigAutomaticTriggers = true
Countly.init({
app_key: "APP_KEY",
url: "SERVER_URL",
remote_config: true,
});config.enableRemoteConfigAutomaticTriggers();// during init config.remoteConfig.enableAutomaticTriggers(); // or download manually after init await Countly.sharedInstance().remoteConfig.downloadAllKeys(null); await Countly.sharedInstance().remoteConfig.downloadOmittingKeys(['key1'], null);
await Countly.remoteConfig.update(); await Countly.remoteConfig.updateForKeysOnly(["key1", "key2"]); await Countly.remoteConfig.updateExceptKeys(["key1", "key2"]);
await Countly.Instance.RemoteConfigs.Update();
config.enableRemoteConfigAutomaticTriggers();
cly::Countly.getInstance().updateRemoteConfig();
To fetch remote config values from the server:
curl --request POST \ --url 'https://YOUR_SERVER/o/sdk' \ --header 'Accept: application/json' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data 'app_key=APP_KEY' \ --data 'device_id=DEVICE_ID' \ --data 'method=rc' \ --data 'keys=["keys","include"]' \ # Optional --data 'omit_keys=["keys", "except"]' \ # Optional --data 'timestamp=TIMESTAMP' \ --data 'hour=HOUR' \ --data 'dow=DAYOFTHEWEEK'
You should expect the responses to be:
# 200
{
"key1": "value1",
"key2": "value2",
...
}
# 200 - No remote config values
{}
Accessing Values
To use dowloaded Remote Config values:
Countly.q.push(() => {
var remoteConfigValues = Countly.get_remote_config();
});var remoteConfigValues = Countly.get_remote_config();Map<String, RCData> remoteConfigValues = Countly.sharedInstance().remoteConfig().getAllValues();
NSDictionary<NSString*, CountlyRCData*> *remoteConfigValues = [Countly.sharedInstance.remoteConfig getAllValues];
let remoteConfigValues = Countly.sharedInstance().remoteConfig.getAllValues()
var remoteConfigValues = Countly.get_remote_config();Map<String, RCData> remoteConfigValues = await Countly.instance.remoteConfig.getAllValues();
const remoteConfig = Countly.sharedInstance().remoteConfig;
const single: RCData | null = remoteConfig.getValue('KeyName');
const all: Record<string, RCData> = remoteConfig.getValues();const remoteConfigValue = await Countly.remoteConfig.getValue("KeyName");
await Countly.remoteConfig.clearValues();Dictionary<string, object> remoteConfigValues = Countly.Instance.RemoteConfigs.Configs;
Map<String,RCData> remoteConfigValues = Countly.instance().remoteConfig().getValues();
nlohmann::json remoteConfigValue = cly::Countly.getInstance().getRemoteConfigValue("KeyName");Remote Config values can either be cached after download for later access or accessed immediately upon download.
A/B Testing
Building on Remote Config, A/B Testing empowers you to safely experiment with Remote Config values for running tests and measuring results to make data-driven decisions.
To understand how you can leverage A/B Testing in your dashboard check here.
SDK will automatically enroll eligible users to A/B tests by default.
To turn on automatic test participation upon Remote Config downloads:
config.enrollABOnRCDownload();
config.enrollABOnRCDownload = YES;
config.enrollABOnRCDownload = true
config.enrollABOnRCDownload();
// during init config.remoteConfig.enrollABonDownload(); // or enroll explicitly post-init await Countly.sharedInstance().remoteConfig.enrollIntoABTestsForKeys(['key1', 'key2']);
config.enrollABOnRCDownload();
To automatically enroll users in A/B Tests when fetching Remote Config values, add the following line to your fetch request:
--data 'oi=1' \
The expected response format is the same as that of a standard fetch request.