Skip to content

Commit c6b4c91

Browse files
committed
fix(core): Default app has already been configured
improves getting previously initialized apps
1 parent d15fc20 commit c6b4c91

File tree

3 files changed

+43
-17
lines changed

3 files changed

+43
-17
lines changed

packages/firebase-core/index.android.ts

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,10 @@ export class FirebaseOptions implements IFirebaseOptions {
111111
}
112112
}
113113

114+
let firebaseInstance: Firebase;
115+
let defaultApp: FirebaseApp;
116+
const firebaseApps = new Map<string, FirebaseApp>();
117+
114118
export class FirebaseApp {
115119
#native: com.google.firebase.FirebaseApp;
116120
#options: FirebaseOptions;
@@ -142,6 +146,7 @@ export class FirebaseApp {
142146

143147
delete() {
144148
return new Promise<void>((resolve, reject) => {
149+
firebaseApps.delete(this.native.getName());
145150
this.native.delete();
146151
resolve();
147152
});
@@ -161,9 +166,6 @@ export class FirebaseApp {
161166
}
162167
}
163168

164-
let firebaseInstance: Firebase;
165-
let defaultApp: FirebaseApp;
166-
167169
export class Firebase {
168170
constructor() {
169171
if (firebaseInstance) {
@@ -175,6 +177,9 @@ export class Firebase {
175177

176178
app(name?: string) {
177179
if (name) {
180+
if (firebaseApps.has(name)) {
181+
return firebaseApps.get(name);
182+
}
178183
return FirebaseApp.fromNative(com.google.firebase.FirebaseApp.getInstance(name));
179184
}
180185
if (!defaultApp) {
@@ -185,7 +190,7 @@ export class Firebase {
185190

186191
initializeApp(options: FirebaseOptions = null, configOrName?: FirebaseConfig | string) {
187192
let nativeOptions;
188-
if(options){
193+
if (options) {
189194
nativeOptions = new com.google.firebase.FirebaseOptions.Builder();
190195
}
191196
if (options?.apiKey) {
@@ -220,27 +225,34 @@ export class Firebase {
220225
let app: com.google.firebase.FirebaseApp;
221226
let isDefault = false;
222227
if (name) {
223-
if(!nativeOptions){
224-
nativeOptions = new com.google.firebase.FirebaseOptions.Builder()
228+
if (!nativeOptions) {
229+
nativeOptions = new com.google.firebase.FirebaseOptions.Builder();
225230
}
226231
app = com.google.firebase.FirebaseApp.initializeApp(Utils.android.getApplicationContext(), nativeOptions.build(), name);
227232
} else {
233+
if (defaultApp) {
234+
defaultApp;
235+
}
228236
isDefault = true;
229-
if(nativeOptions){
237+
if (nativeOptions) {
230238
app = com.google.firebase.FirebaseApp.initializeApp(Utils.android.getApplicationContext(), nativeOptions.build());
231-
}else {
239+
} else {
232240
app = com.google.firebase.FirebaseApp.initializeApp(Utils.android.getApplicationContext());
233241
}
234242
}
235243

236244
if (app && typeof configOrName === 'object' && typeof configOrName.automaticResourceManagement === 'boolean') {
237245
app.setAutomaticResourceManagementEnabled(configOrName.automaticDataCollectionEnabled);
238246
}
239-
247+
240248
const fbApp = FirebaseApp.fromNative(app);
241249

242-
if(isDefault){
243-
defaultApp = fbApp
250+
if (isDefault) {
251+
defaultApp = fbApp;
252+
}
253+
254+
if (!isDefault) {
255+
firebaseApps.set(name, fbApp);
244256
}
245257

246258
return fbApp;

packages/firebase-core/index.ios.ts

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,10 @@ export class FirebaseOptions implements IFirebaseOptions {
171171
}
172172
}
173173

174+
let firebaseInstance: Firebase;
175+
let defaultApp: FirebaseApp;
176+
const firebaseApps = new Map<string, FirebaseApp>();
177+
174178
export class FirebaseApp {
175179
#native: FIRApp;
176180
#options: FirebaseOptions;
@@ -205,6 +209,7 @@ export class FirebaseApp {
205209
return new Promise<void>((resolve, reject) => {
206210
this.native.deleteApp((done) => {
207211
if (done) {
212+
firebaseApps.delete(this.native.name);
208213
resolve();
209214
} else {
210215
reject();
@@ -228,9 +233,6 @@ export class FirebaseApp {
228233
}
229234
}
230235

231-
let firebaseInstance: Firebase;
232-
let defaultApp: FirebaseApp;
233-
234236
export class Firebase {
235237
constructor() {
236238
if (firebaseInstance) {
@@ -241,6 +243,9 @@ export class Firebase {
241243
}
242244
app(name?: string) {
243245
if (name) {
246+
if (firebaseApps.has(name)) {
247+
return firebaseApps.get(name);
248+
}
244249
return FirebaseApp.fromNative(FIRApp.appNamed(name));
245250
}
246251
if (!defaultApp) {
@@ -256,7 +261,7 @@ export class Firebase {
256261
nativeOptions = FIROptions.alloc().initWithGoogleAppIDGCMSenderID(options.googleAppId, options.gcmSenderId);
257262
}
258263

259-
if(!nativeOptions && options){
264+
if (!nativeOptions && options) {
260265
nativeOptions = FIROptions.defaultOptions();
261266
}
262267

@@ -314,13 +319,18 @@ export class Firebase {
314319
FIRApp.configureWithNameOptions(name, nativeOptions);
315320
app = FIRApp.appNamed(name);
316321
} else {
322+
if (defaultApp) {
323+
return defaultApp;
324+
}
325+
317326
if (nativeOptions) {
318327
FIRApp.configureWithOptions(nativeOptions);
319328
} else {
320329
FIRApp.configure();
321330
}
322331

323332
app = FIRApp.defaultApp();
333+
isDefault = true;
324334
}
325335

326336
if (app && typeof configOrName === 'object' && typeof configOrName.automaticDataCollectionEnabled === 'boolean') {
@@ -333,6 +343,10 @@ export class Firebase {
333343
defaultApp = fbApp;
334344
}
335345

346+
if (!isDefault) {
347+
firebaseApps.set(name, fbApp);
348+
}
349+
336350
return fbApp;
337351
}
338352
}
@@ -343,4 +357,4 @@ export function firebase() {
343357
}
344358
firebaseInstance = new Firebase();
345359
return firebaseInstance;
346-
}
360+
}

packages/firebase-core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@nativescript/firebase-core",
3-
"version": "1.0.0-alpha.0",
3+
"version": "1.0.0-alpha.1",
44
"description": "NativeScript Firebase - Core",
55
"main": "index",
66
"typings": "index.d.ts",

0 commit comments

Comments
 (0)