[core][both] added delete app method (android is just a stub method as the firebase sdk does not support it)

This commit is contained in:
Salakar 2017-07-18 06:02:53 +01:00
parent e96c5db8d1
commit 03377255f6
3 changed files with 76 additions and 58 deletions

View File

@ -10,6 +10,7 @@ import java.util.HashMap;
// react // react
import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableMap; import com.facebook.react.bridge.WritableMap;
import com.facebook.react.bridge.LifecycleEventListener; import com.facebook.react.bridge.LifecycleEventListener;
@ -50,7 +51,7 @@ public class RNFirebaseModule extends ReactContextBaseJavaModule implements Life
} }
@ReactMethod @ReactMethod
public void initializeApp(String name, ReadableMap options, Callback callback) { public void initializeApp(String appName, ReadableMap options, Callback callback) {
FirebaseOptions.Builder builder = new FirebaseOptions.Builder(); FirebaseOptions.Builder builder = new FirebaseOptions.Builder();
builder.setApplicationId(options.getString("appId")); builder.setApplicationId(options.getString("appId"));
@ -61,14 +62,28 @@ public class RNFirebaseModule extends ReactContextBaseJavaModule implements Life
builder.setStorageBucket(options.getString("storageBucket")); builder.setStorageBucket(options.getString("storageBucket"));
// todo firebase sdk has no client id setter // todo firebase sdk has no client id setter
FirebaseApp.initializeApp(getReactApplicationContext(), builder.build(), name); FirebaseApp.initializeApp(getReactApplicationContext(), builder.build(), appName);
// todo expand on callback result
WritableMap response = Arguments.createMap(); WritableMap response = Arguments.createMap();
response.putString("result", "success"); response.putString("result", "success");
callback.invoke(null, response); callback.invoke(null, response);
} }
@ReactMethod
public void deleteApp(String appName, Promise promise) {
FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
if (firebaseApp == null) {
promise.resolve(null);
} else {
// todo ? not implemented on firebase sdk
promise.reject(
"app/delete-app-failed",
"Failed to delete app. The android Firebase SDK currently does not support this functionality"
);
}
}
private WritableMap getPlayServicesStatus() { private WritableMap getPlayServicesStatus() {
GoogleApiAvailability gapi = GoogleApiAvailability.getInstance(); GoogleApiAvailability gapi = GoogleApiAvailability.getInstance();
final int status = gapi.isGooglePlayServicesAvailable(getReactApplicationContext()); final int status = gapi.isGooglePlayServicesAvailable(getReactApplicationContext());
@ -117,8 +132,8 @@ public class RNFirebaseModule extends ReactContextBaseJavaModule implements Life
appProps.put("name", appName); appProps.put("name", appName);
appProps.put("apiKey", appOptions.getApiKey()); appProps.put("apiKey", appOptions.getApiKey());
appProps.put("applicationId", appOptions.getApplicationId()); appProps.put("appId", appOptions.getApplicationId());
appProps.put("databaseUrl", appOptions.getDatabaseUrl()); appProps.put("databaseURL", appOptions.getDatabaseUrl());
appProps.put("messagingSenderId", appOptions.getGcmSenderId()); appProps.put("messagingSenderId", appOptions.getGcmSenderId());
appProps.put("projectId", appOptions.getProjectId()); appProps.put("projectId", appOptions.getProjectId());
appProps.put("storageBucket", appOptions.getStorageBucket()); appProps.put("storageBucket", appOptions.getStorageBucket());

View File

@ -21,14 +21,14 @@ RCT_EXPORT_MODULE(RNFirebase);
* @return * @return
*/ */
RCT_EXPORT_METHOD(initializeApp: RCT_EXPORT_METHOD(initializeApp:
(NSString *) name (NSString *) appName
options: options:
(NSDictionary *) options (NSDictionary *) options
callback: callback:
(RCTResponseSenderBlock) callback) { (RCTResponseSenderBlock) callback) {
dispatch_sync(dispatch_get_main_queue(), ^{ dispatch_sync(dispatch_get_main_queue(), ^{
FIRApp *existingApp = [FIRApp appNamed:name]; FIRApp *existingApp = [FIRApp appNamed:appName];
if (!existingApp) { if (!existingApp) {
FIROptions *firOptions = [[FIROptions alloc] initWithGoogleAppID:[options valueForKey:@"appId"] GCMSenderID:[options valueForKey:@"messagingSenderId"]]; FIROptions *firOptions = [[FIROptions alloc] initWithGoogleAppID:[options valueForKey:@"appId"] GCMSenderID:[options valueForKey:@"messagingSenderId"]];
@ -43,27 +43,57 @@ RCT_EXPORT_METHOD(initializeApp:
firOptions.deepLinkURLScheme = [options valueForKey:@"deepLinkURLScheme"]; firOptions.deepLinkURLScheme = [options valueForKey:@"deepLinkURLScheme"];
firOptions.bundleID = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleIdentifier"]; firOptions.bundleID = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleIdentifier"];
[FIRApp configureWithName:name options:firOptions]; [FIRApp configureWithName:appName options:firOptions];
} }
// todo expand on callback result
callback(@[[NSNull null], @{@"result": @"success"}]); callback(@[[NSNull null], @{@"result": @"success"}]);
}); });
} }
/**
* Delete a firebase app
* @return
*/
RCT_EXPORT_METHOD(deleteApp:
(NSString *) appName
resolver:
(RCTPromiseResolveBlock) resolve
rejecter:
(RCTPromiseRejectBlock) reject) {
FIRApp *existingApp = [FIRApp appNamed:appName];
if (!existingApp) {
return resolve([NSNull null]);
}
[existingApp deleteApp:^(BOOL success) {
if (success) {
resolve([NSNull null]);
} else {
reject(@"app/delete-app-failed", @"Failed to delete the specified app.", nil);
}
}];
}
/**
* React native constant exports - exports native firebase apps mainly
* @return
*/
- (NSDictionary *)constantsToExport { - (NSDictionary *)constantsToExport {
NSMutableDictionary *constants = [NSMutableDictionary new]; NSMutableDictionary *constants = [NSMutableDictionary new];
NSDictionary *firApps = [FIRApp allApps]; NSDictionary *firApps = [FIRApp allApps];
NSMutableArray *appsArray = [NSMutableArray new]; NSMutableArray *appsArray = [NSMutableArray new];
for (id key in firApps) { for (id key in firApps) {
NSMutableDictionary * appOptions = [NSMutableDictionary new]; NSMutableDictionary *appOptions = [NSMutableDictionary new];
FIRApp *firApp = firApps[key]; FIRApp *firApp = firApps[key];
FIROptions *firOptions = [firApp options]; FIROptions *firOptions = [firApp options];
appOptions[@"name"] = firApp.name; appOptions[@"name"] = firApp.name;
appOptions[@"apiKey"] = firOptions.APIKey; appOptions[@"apiKey"] = firOptions.APIKey;
appOptions[@"applicationId"] = firOptions.googleAppID; appOptions[@"appId"] = firOptions.googleAppID;
appOptions[@"databaseUrl"] = firOptions.databaseURL; appOptions[@"databaseURL"] = firOptions.databaseURL;
appOptions[@"messagingSenderId"] = firOptions.GCMSenderID; appOptions[@"messagingSenderId"] = firOptions.GCMSenderID;
appOptions[@"projectId"] = firOptions.projectID; appOptions[@"projectId"] = firOptions.projectID;
appOptions[@"storageBucket"] = firOptions.storageBucket; appOptions[@"storageBucket"] = firOptions.storageBucket;
@ -75,7 +105,6 @@ RCT_EXPORT_METHOD(initializeApp:
appOptions[@"deepLinkUrlScheme"] = firOptions.deepLinkURLScheme; appOptions[@"deepLinkUrlScheme"] = firOptions.deepLinkURLScheme;
[appsArray addObject:appOptions]; [appsArray addObject:appOptions];
NSLog(@"test");
} }
constants[@"apps"] = appsArray; constants[@"apps"] = appsArray;

View File

@ -22,6 +22,18 @@ export default class FirebaseApp {
// native ios/android to confirm initialized // native ios/android to confirm initialized
this._initialized = false; this._initialized = false;
this._nativeInitialized = false;
// modules
this.admob = this._staticsOrModuleInstance('admob', AdMobStatics, AdMob);
this.auth = this._staticsOrModuleInstance('auth', AuthStatics, Auth);
this.analytics = this._staticsOrModuleInstance('analytics', {}, Analytics);
this.config = this._staticsOrModuleInstance('config', {}, RemoteConfig);
this.crash = this._staticsOrModuleInstance('crash', {}, Crash);
this.database = this._staticsOrModuleInstance('database', DatabaseStatics, Database);
this.messaging = this._staticsOrModuleInstance('messaging', MessagingStatics, Messaging);
this.perf = this._staticsOrModuleInstance('perf', {}, Performance);
this.storage = this._staticsOrModuleInstance('storage', StorageStatics, Storage);
} }
/** /**
@ -31,14 +43,13 @@ export default class FirebaseApp {
*/ */
_initializeApp(native = false) { _initializeApp(native = false) {
if (native) { if (native) {
// for apps already initialized natively that we have info // for apps already initialized natively that
// from RN constants // we have info from RN constants
this._initialized = true; this._initialized = true;
this._nativeInitialized = true; this._nativeInitialized = true;
} else { } else {
FirebaseCoreModule.initializeApp(this._name, this._options, (error, result) => { FirebaseCoreModule.initializeApp(this._name, this._options, (error, result) => {
this._initialized = true; this._initialized = true;
this._nativeInitialized = false;
INTERNALS.SharedEventEmitter.emit(`AppReady:${this._name}`, { error, result }); INTERNALS.SharedEventEmitter.emit(`AppReady:${this._name}`, { error, result });
}); });
} }
@ -78,10 +89,14 @@ export default class FirebaseApp {
); );
} }
return Promise.resolve(); return FirebaseCoreModule.deleteApp(this._name);
} }
/**
*
* @return {*}
*/
onReady(): Promise { onReady(): Promise {
if (this._initialized) return Promise.resolve(this); if (this._initialized) return Promise.resolve(this);
@ -93,47 +108,6 @@ export default class FirebaseApp {
}); });
} }
/*
* MODULES
*/
get admob() {
return this._staticsOrModuleInstance('admob', AdMobStatics, AdMob);
}
get auth() {
return this._staticsOrModuleInstance('auth', AuthStatics, Auth);
}
get analytics() {
return this._staticsOrModuleInstance('analytics', {}, Analytics);
}
get config() {
return this._staticsOrModuleInstance('config', {}, RemoteConfig);
}
get crash() {
return this._staticsOrModuleInstance('crash', {}, Crash);
}
get database() {
return this._staticsOrModuleInstance('database', DatabaseStatics, Database);
}
get messaging() {
return this._staticsOrModuleInstance('messaging', MessagingStatics, Messaging);
}
get perf() {
return this._staticsOrModuleInstance('perf', {}, Performance);
}
get storage() {
return this._staticsOrModuleInstance('storage', StorageStatics, Storage);
}
/** /**
* *
* @param name * @param name