diff --git a/android/src/main/java/com/launchdarkly/reactnative/LaunchdarklyReactNativeClientModule.java b/android/src/main/java/com/launchdarkly/reactnative/LaunchdarklyReactNativeClientModule.java index 9bf022c..cabce69 100644 --- a/android/src/main/java/com/launchdarkly/reactnative/LaunchdarklyReactNativeClientModule.java +++ b/android/src/main/java/com/launchdarkly/reactnative/LaunchdarklyReactNativeClientModule.java @@ -196,16 +196,11 @@ public void configureWithTimeout(ReadableMap config, ReadableMap user, Integer t private void internalConfigure(ReadableMap config, ReadableMap user, final Integer timeout, final Promise promise) { try { - if (LDClient.get() != null) { - promise.reject(ERROR_INIT, "Client was already initialized"); - return; - } - } catch (LaunchDarklyException e) { - //This exception indicates that the SDK has not been initialized yet - } catch (Exception e) { - Timber.w(e); - promise.reject(ERROR_INIT, e); + LDClient.get(); + promise.reject(ERROR_INIT, "Client was already initialized"); return; + } catch (LaunchDarklyException e) { + // This exception indicates that the SDK has not been initialized yet } final LDConfig.Builder ldConfigBuilder = configBuild(config); @@ -236,7 +231,11 @@ public void run() { if (timeout != null) { LDClient.init(application, ldConfigBuilder.build(), userBuilder.build(), timeout); } else { - LDClient.init(application, ldConfigBuilder.build(), userBuilder.build()); + try { + LDClient.init(application, ldConfigBuilder.build(), userBuilder.build()).get(); + } catch (ExecutionException | InterruptedException e) { + Timber.e(e, "Exception during Client initialization"); + } } promise.resolve(null); } @@ -605,13 +604,9 @@ private void resolveJsonElementDetail(Promise promise, EvaluationDetail { + throw new Error('LaunchDarkly SDK already initialized'); + }, + () => { + const configWithOverriddenDefaults = Object.assign({ + backgroundPollingIntervalMillis: 3600000, // the iOS SDK defaults this to 900000 + disableBackgroundUpdating: false, // the iOS SDK defaults this to true + pollUri: 'https://clientsdk.launchdarkly.com', + wrapperName: 'react-native-client-sdk', + wrapperVersion: this.getVersion() + }, config); + + if (timeout == undefined) { + return LaunchdarklyReactNativeClient.configure(configWithOverriddenDefaults, this._addUserOverrides(user)); + } else { + return LaunchdarklyReactNativeClient.configureWithTimeout(configWithOverriddenDefaults, this._addUserOverrides(user), timeout); + } + } + ); } boolVariation(flagKey, defaultValue, environment) { diff --git a/ios/LaunchdarklyReactNativeClient.swift b/ios/LaunchdarklyReactNativeClient.swift index e389c33..5344588 100644 --- a/ios/LaunchdarklyReactNativeClient.swift +++ b/ios/LaunchdarklyReactNativeClient.swift @@ -11,6 +11,7 @@ class LaunchdarklyReactNativeClient: RCTEventEmitter { private let CONNECTION_MODE_PREFIX = "LaunchDarkly-Connection-Mode-" private let ERROR_INIT = "E_INITIALIZE" private let ERROR_IDENTIFY = "E_IDENTIFY" + private let ERROR_UNKNOWN = "E_UNKNOWN" override func supportedEvents() -> [String]! { return [FLAG_PREFIX, ALL_FLAGS_PREFIX, CONNECTION_MODE_PREFIX] @@ -605,9 +606,11 @@ class LaunchdarklyReactNativeClient: RCTEventEmitter { @objc func isInitialized(_ environment: String, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void { if LDClient.get() == nil { - resolve(false) + reject(ERROR_UNKNOWN, "SDK has not been configured", nil) + } else if let client = LDClient.get(environment: environment) { + resolve(client.isInitialized) } else { - resolve(LDClient.get(environment: environment)!.isInitialized) + reject(ERROR_UNKNOWN, "SDK not configured with requested environment", nil) } } } diff --git a/ios/LaunchdarklyReactNativeClientBridge.m b/ios/LaunchdarklyReactNativeClientBridge.m index 76bf0c3..835e4b2 100644 --- a/ios/LaunchdarklyReactNativeClientBridge.m +++ b/ios/LaunchdarklyReactNativeClientBridge.m @@ -5,7 +5,7 @@ @interface RCT_EXTERN_MODULE(LaunchdarklyReactNativeClient, RCTEventEmitter) RCT_EXTERN_METHOD(configure:(NSDictionary *)config user:(NSDictionary *)user resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) -RCT_EXTERN_METHOD(configureWithTimeout:(NSDictionary *)config userConfig:(NSDictionary *)userConfig timeout:(NSInteger *)timeout resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) +RCT_EXTERN_METHOD(configureWithTimeout:(NSDictionary *)config user:(NSDictionary *)user timeout:(NSInteger *)timeout resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) RCT_EXTERN_METHOD(boolVariationDefaultValue:(NSString *)flagKey defaultValue:(BOOL *)defaultValue environment:(NSString *)environment resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)