diff --git a/android/build.gradle b/android/build.gradle index 537df8d..1bf257c 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -34,8 +34,8 @@ repositories { } dependencies { - compile "com.facebook.react:react-native:${safeExtGet('reactNative', '+')}" - compile('com.launchdarkly:launchdarkly-android-client:2.5.1') { + implementation "com.facebook.react:react-native:${safeExtGet('reactNative', '+')}" + implementation('com.launchdarkly:launchdarkly-android-client:2.5.1') { exclude group: 'com.squareup.okhttp', module: 'okhttp' } diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 41a92ab..33098b8 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + package="com.launchdarkly"> \ No newline at end of file diff --git a/android/src/main/java/com/reactlibrary/RNLaunchDarklyModule.java b/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java similarity index 77% rename from android/src/main/java/com/reactlibrary/RNLaunchDarklyModule.java rename to android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java index 0ec679a..8044b0b 100644 --- a/android/src/main/java/com/reactlibrary/RNLaunchDarklyModule.java +++ b/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java @@ -1,10 +1,12 @@ -package com.reactlibrary; +package com.launchdarkly; +import android.app.Activity; import android.app.Application; import android.util.Log; import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; @@ -12,6 +14,7 @@ import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.ReadableMapKeySetIterator; import com.facebook.react.bridge.WritableMap; +import com.facebook.react.bridge.ReadableType; import com.facebook.react.modules.core.DeviceEventManagerModule; import com.google.common.collect.Sets; import com.launchdarkly.android.FeatureFlagChangeListener; @@ -39,7 +42,7 @@ public String getName() { } @ReactMethod - public void configure(String apiKey, ReadableMap options) { + public void configure(String apiKey, ReadableMap options, Promise promise) { LDConfig ldConfig = new LDConfig.Builder() .setMobileKey(apiKey) .build(); @@ -68,7 +71,11 @@ public void configure(String apiKey, ReadableMap options) { while (iterator.hasNextKey()) { String key = iterator.nextKey(); if (!nonCustomFields.contains(key)) { - userBuilder = userBuilder.custom(key, options.getString(key)); + if (options.getType(key) == ReadableType.Number) { + userBuilder = userBuilder.custom(key, options.getDouble(key)); + } else if (options.getType(key) == ReadableType.String) { + userBuilder = userBuilder.custom(key, options.getString(key)); + } Log.d("RNLaunchDarklyModule", "Launch Darkly custom field: " + key); } } @@ -76,18 +83,24 @@ public void configure(String apiKey, ReadableMap options) { if (user != null && ldClient != null) { user = userBuilder.build(); ldClient.identify(user); - + WritableMap map = Arguments.createMap(); + map.putString("email", options.getString("email")); + promise.resolve(map); return; } user = userBuilder.build(); - Application application = reactContext.getCurrentActivity().getApplication(); + Activity reactActivity = reactContext.getCurrentActivity(); - if (application != null) { - ldClient = LDClient.init(application, ldConfig, user, 0); + if (reactActivity != null && reactActivity.getApplication() != null) { + ldClient = LDClient.init(reactActivity.getApplication(), ldConfig, user, 0); + WritableMap map = Arguments.createMap(); + map.putString("email", options.getString("email")); + promise.resolve(map); } else { Log.d("RNLaunchDarklyModule", "Couldn't init RNLaunchDarklyModule cause application was null"); + promise.reject(new Throwable("Couldn't init RNLaunchDarklyModule cause application was null")); } } diff --git a/android/src/main/java/com/reactlibrary/RNLaunchDarklyPackage.java b/android/src/main/java/com/launchdarkly/RNLaunchDarklyPackage.java similarity index 96% rename from android/src/main/java/com/reactlibrary/RNLaunchDarklyPackage.java rename to android/src/main/java/com/launchdarkly/RNLaunchDarklyPackage.java index ae017cf..aed9fc7 100644 --- a/android/src/main/java/com/reactlibrary/RNLaunchDarklyPackage.java +++ b/android/src/main/java/com/launchdarkly/RNLaunchDarklyPackage.java @@ -1,5 +1,5 @@ -package com.reactlibrary; +package com.launchdarkly; import java.util.Arrays; import java.util.Collections; diff --git a/index.js b/index.js index ab4f0f3..57587b7 100644 --- a/index.js +++ b/index.js @@ -13,7 +13,7 @@ class LaunchDarkly { } configure (apiKey, options) { - RNLaunchDarkly.configure(apiKey, options); + return RNLaunchDarkly.configure(apiKey, options); } boolVariation (featureName, callback) { diff --git a/ios/RNLaunchDarkly.m b/ios/RNLaunchDarkly.m index 31a53ba..f661cee 100644 --- a/ios/RNLaunchDarkly.m +++ b/ios/RNLaunchDarkly.m @@ -9,7 +9,7 @@ @implementation RNLaunchDarkly return @[@"FeatureFlagChanged"]; } -RCT_EXPORT_METHOD(configure:(NSString*)apiKey options:(NSDictionary*)options) { +RCT_EXPORT_METHOD(configure:(NSString*)apiKey options:(NSDictionary*)options resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { NSLog(@"configure with %@", options); NSString* key = options[@"key"]; @@ -53,6 +53,7 @@ @implementation RNLaunchDarkly if ( self.user ) { bool updatedSuccesfully = [[LDClient sharedInstance] updateUser:user]; NSLog(@"LaunchDarkly User was updated. Key=%@ IsSuccess=%@", key, updatedSuccesfully ? @"YES" : @"NO"); + resolve(@{ @"email": email}); return; } @@ -65,6 +66,7 @@ @implementation RNLaunchDarkly object:nil]; [[LDClient sharedInstance] start:config userBuilder:user]; + resolve(@{ @"email": email}); } RCT_EXPORT_METHOD(boolVariation:(NSString*)flagName callback:(RCTResponseSenderBlock)callback) {