@react-native-firebase/app 22.2.1 → 22.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [22.3.0](https://github.com/invertase/react-native-firebase/compare/v22.2.1...v22.3.0) (2025-07-08)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **app, android:** adopt firebase-android-sdk 33.16.0 ([7221dc4](https://github.com/invertase/react-native-firebase/commit/7221dc4602963d50eddccfc315ffbf458d9e9b29))
11
+ - **app, ios:** adopt firebase-ios-sdk 11.15.0 ([28471dc](https://github.com/invertase/react-native-firebase/commit/28471dcc4948851106bc3be2e614dd59c358c403)), closes [/firebase.google.com/support/faq#analytics-odm2](https://github.com/invertase//firebase.google.com/support/faq/issues/analytics-odm2)
12
+ - **app:** firebase-js-sdk bump 11.3.1 > 11.10.0 ([29ea831](https://github.com/invertase/react-native-firebase/commit/29ea8310beed3eb0598bda55aacc29c100c7f770))
13
+
6
14
  ## [22.2.1](https://github.com/invertase/react-native-firebase/compare/v22.2.0...v22.2.1) (2025-06-10)
7
15
 
8
16
  ### Bug Fixes
@@ -18,5 +18,5 @@ package io.invertase.firebase.app;
18
18
  */
19
19
  // generated file - do not modify or commit
20
20
  public class ReactNativeFirebaseVersion {
21
- public static String VERSION = "22.2.1";
21
+ public static String VERSION = "22.3.0";
22
22
  }
@@ -18,4 +18,4 @@
18
18
  #import <React/RCTVersion.h>
19
19
 
20
20
  // generated file - do not modify or commit
21
- NSString* const RNFBVersionString = @"22.2.1";
21
+ NSString* const RNFBVersionString = @"22.3.0";
@@ -107,6 +107,64 @@ export function tryJSONStringify(data) {
107
107
  const NO_REPLACEMENT = true;
108
108
 
109
109
  const mapOfDeprecationReplacements = {
110
+ analytics: {
111
+ default: {
112
+ logEvent: 'logEvent()',
113
+ setAnalyticsCollectionEnabled: 'setAnalyticsCollectionEnabled()',
114
+ setSessionTimeoutDuration: 'setSessionTimeoutDuration()',
115
+ getAppInstanceId: 'getAppInstanceId()',
116
+ getSessionId: 'getSessionId()',
117
+ setUserId: 'setUserId()',
118
+ setUserProperty: 'setUserProperty()',
119
+ setUserProperties: 'setUserProperties()',
120
+ resetAnalyticsData: 'resetAnalyticsData()',
121
+ setDefaultEventParameters: 'setDefaultEventParameters()',
122
+ initiateOnDeviceConversionMeasurementWithEmailAddress:
123
+ 'initiateOnDeviceConversionMeasurementWithEmailAddress()',
124
+ initiateOnDeviceConversionMeasurementWithHashedEmailAddress:
125
+ 'initiateOnDeviceConversionMeasurementWithHashedEmailAddress()',
126
+ initiateOnDeviceConversionMeasurementWithPhoneNumber:
127
+ 'initiateOnDeviceConversionMeasurementWithPhoneNumber()',
128
+ initiateOnDeviceConversionMeasurementWithHashedPhoneNumber:
129
+ 'initiateOnDeviceConversionMeasurementWithHashedPhoneNumber()',
130
+ setConsent: 'setConsent()',
131
+ // We're deprecating all helper methods for event. e.g. `logAddPaymentInfo()` from namespaced and modular.
132
+ logAddPaymentInfo: 'logEvent()',
133
+ logScreenView: 'logEvent()',
134
+ logAddShippingInfo: 'logEvent()',
135
+ logAddToCart: 'logEvent()',
136
+ logAddToWishlist: 'logEvent()',
137
+ logAppOpen: 'logEvent()',
138
+ logBeginCheckout: 'logEvent()',
139
+ logCampaignDetails: 'logEvent()',
140
+ logEarnVirtualCurrency: 'logEvent()',
141
+ logGenerateLead: 'logEvent()',
142
+ logJoinGroup: 'logEvent()',
143
+ logLevelEnd: 'logEvent()',
144
+ logLevelStart: 'logEvent()',
145
+ logLevelUp: 'logEvent()',
146
+ logLogin: 'logEvent()',
147
+ logPostScore: 'logEvent()',
148
+ logSelectContent: 'logEvent()',
149
+ logPurchase: 'logEvent()',
150
+ logRefund: 'logEvent()',
151
+ logRemoveFromCart: 'logEvent()',
152
+ logSearch: 'logEvent()',
153
+ logSelectItem: 'logEvent()',
154
+ logSetCheckoutOption: 'logEvent()',
155
+ logSelectPromotion: 'logEvent()',
156
+ logShare: 'logEvent()',
157
+ logSignUp: 'logEvent()',
158
+ logSpendVirtualCurrency: 'logEvent()',
159
+ logTutorialBegin: 'logEvent()',
160
+ logTutorialComplete: 'logEvent()',
161
+ logUnlockAchievement: 'logEvent()',
162
+ logViewCart: 'logEvent()',
163
+ logViewItem: 'logEvent()',
164
+ logViewPromotion: 'logEvent()',
165
+ logViewSearchResults: 'logEvent()',
166
+ },
167
+ },
110
168
  appCheck: {
111
169
  default: {
112
170
  activate: 'initializeAppCheck()',
@@ -119,6 +177,82 @@ const mapOfDeprecationReplacements = {
119
177
  CustomProvider: 'CustomProvider',
120
178
  },
121
179
  },
180
+ appDistribution: {
181
+ default: {
182
+ isTesterSignedIn: 'isTesterSignedIn()',
183
+ signInTester: 'signInTester()',
184
+ checkForUpdate: 'checkForUpdate()',
185
+ signOutTester: 'signOutTester()',
186
+ },
187
+ },
188
+ auth: {
189
+ default: {
190
+ applyActionCode: 'applyActionCode()',
191
+ checkActionCode: 'checkActionCode()',
192
+ confirmPasswordReset: 'confirmPasswordReset()',
193
+ createUserWithEmailAndPassword: 'createUserWithEmailAndPassword()',
194
+ fetchSignInMethodsForEmail: 'fetchSignInMethodsForEmail()',
195
+ getMultiFactorResolver: 'getMultiFactorResolver()',
196
+ isSignInWithEmailLink: 'isSignInWithEmailLink()',
197
+ onAuthStateChanged: 'onAuthStateChanged()',
198
+ onIdTokenChanged: 'onIdTokenChanged()',
199
+ sendPasswordResetEmail: 'sendPasswordResetEmail()',
200
+ sendSignInLinkToEmail: 'sendSignInLinkToEmail()',
201
+ signInAnonymously: 'signInAnonymously()',
202
+ signInWithCredential: 'signInWithCredential()',
203
+ signInWithCustomToken: 'signInWithCustomToken()',
204
+ signInWithEmailAndPassword: 'signInWithEmailAndPassword()',
205
+ signInWithEmailLink: 'signInWithEmailLink()',
206
+ signInWithPhoneNumber: 'signInWithPhoneNumber()',
207
+ signInWithRedirect: 'signInWithRedirect()',
208
+ signInWithPopup: 'signInWithPopup()',
209
+ signOut: 'signOut()',
210
+ useUserAccessGroup: 'useUserAccessGroup()',
211
+ verifyPasswordResetCode: 'verifyPasswordResetCode()',
212
+ getCustomAuthDomain: 'getCustomAuthDomain()',
213
+ useEmulator: 'connectAuthEmulator()',
214
+ setLanguageCode: 'useDeviceLanguage()',
215
+ multiFactor: 'multiFactor()',
216
+ useDeviceLanguage: 'useDeviceLanguage()',
217
+ updateCurrentUser: 'updateCurrentUser()',
218
+ validatePassword: 'validatePassword()',
219
+ },
220
+ User: {
221
+ delete: 'deleteUser()',
222
+ getIdToken: 'getIdToken()',
223
+ getIdTokenResult: 'getIdTokenResult()',
224
+ linkWithCredential: 'linkWithCredential()',
225
+ linkWithPopup: 'linkWithPopup()',
226
+ linkWithRedirect: 'linkWithRedirect()',
227
+ reauthenticateWithCredential: 'reauthenticateWithCredential()',
228
+ reauthenticateWithPopup: 'reauthenticateWithPopup()',
229
+ reauthenticateWithRedirect: 'reauthenticateWithRedirect()',
230
+ reload: 'reload()',
231
+ sendEmailVerification: 'sendEmailVerification()',
232
+ toJSON: NO_REPLACEMENT,
233
+ unlink: 'unlink()',
234
+ updateEmail: 'updateEmail()',
235
+ updatePassword: 'updatePassword()',
236
+ updatePhoneNumber: 'updatePhoneNumber()',
237
+ updateProfile: 'updateProfile()',
238
+ verifyBeforeUpdateEmail: 'verifyBeforeUpdateEmail()',
239
+ },
240
+ statics: {
241
+ AppleAuthProvider: 'AppleAuthProvider',
242
+ EmailAuthProvider: 'EmailAuthProvider',
243
+ PhoneAuthProvider: 'PhoneAuthProvider',
244
+ GoogleAuthProvider: 'GoogleAuthProvider',
245
+ GithubAuthProvider: 'GithubAuthProvider',
246
+ TwitterAuthProvider: 'TwitterAuthProvider',
247
+ FacebookAuthProvider: 'FacebookAuthProvider',
248
+ PhoneMultiFactorGenerator: 'PhoneMultiFactorGenerator',
249
+ OAuthProvider: 'OAuthProvider',
250
+ OIDCAuthProvider: 'OIDCAuthProvider',
251
+ PhoneAuthState: 'PhoneAuthState',
252
+ getMultiFactorResolver: 'getMultiFactorResolver()',
253
+ multiFactor: 'multiFactor()',
254
+ },
255
+ },
122
256
  crashlytics: {
123
257
  default: {
124
258
  checkForUnsentReports: 'checkForUnsentReports()',
@@ -211,6 +345,124 @@ const mapOfDeprecationReplacements = {
211
345
  nanoseconds: NO_REPLACEMENT,
212
346
  },
213
347
  },
348
+ functions: {
349
+ default: {
350
+ useEmulator: 'connectFirestoreEmulator()',
351
+ httpsCallable: 'httpsCallable()',
352
+ httpsCallableFromUrl: 'httpsCallableFromUrl()',
353
+ },
354
+ statics: {
355
+ HttpsErrorCode: 'HttpsErrorCode',
356
+ },
357
+ },
358
+ installations: {
359
+ default: {
360
+ delete: 'deleteInstallations()',
361
+ getId: 'getId()',
362
+ getToken: 'getToken()',
363
+ },
364
+ },
365
+ messaging: {
366
+ default: {
367
+ isAutoInitEnabled: 'isAutoInitEnabled()',
368
+ isDeviceRegisteredForRemoteMessages: 'isDeviceRegisteredForRemoteMessages()',
369
+ isNotificationDelegationEnabled: 'isNotificationDelegationEnabled()',
370
+ isDeliveryMetricsExportToBigQueryEnabled: 'isDeliveryMetricsExportToBigQueryEnabled()',
371
+ setAutoInitEnabled: 'setAutoInitEnabled()',
372
+ getInitialNotification: 'getInitialNotification()',
373
+ getDidOpenSettingsForNotification: 'getDidOpenSettingsForNotification()',
374
+ getIsHeadless: 'getIsHeadless()',
375
+ onNotificationOpenedApp: 'onNotificationOpenedApp()',
376
+ onTokenRefresh: 'onTokenRefresh()',
377
+ requestPermission: 'requestPermission()',
378
+ registerDeviceForRemoteMessages: 'registerDeviceForRemoteMessages()',
379
+ unregisterDeviceForRemoteMessages: 'unregisterDeviceForRemoteMessages()',
380
+ getAPNSToken: 'getAPNSToken()',
381
+ setAPNSToken: 'setAPNSToken()',
382
+ hasPermission: 'hasPermission()',
383
+ onDeletedMessages: 'onDeletedMessages()',
384
+ onMessageSent: 'onMessageSent()',
385
+ onSendError: 'onSendError()',
386
+ setBackgroundMessageHandler: 'setBackgroundMessageHandler()',
387
+ setOpenSettingsForNotificationsHandler: 'setOpenSettingsForNotificationsHandler()',
388
+ sendMessage: 'sendMessage()',
389
+ subscribeToTopic: 'subscribeToTopic()',
390
+ unsubscribeFromTopic: 'unsubscribeFromTopic()',
391
+ setNotificationDelegationEnabled: 'setNotificationDelegationEnabled()',
392
+ // Actual firebase-js-sdk methods
393
+ getToken: 'getToken()',
394
+ deleteToken: 'deleteToken()',
395
+ onMessage: 'onMessage()',
396
+ isSupported: 'isSupported()',
397
+ setDeliveryMetricsExportToBigQuery:
398
+ 'experimentalSetDeliveryMetricsExportedToBigQueryEnabled()',
399
+ },
400
+ statics: {
401
+ AuthorizationStatus: 'AuthorizationStatus',
402
+ NotificationAndroidPriority: 'NotificationAndroidPriority',
403
+ NotificationAndroidVisibility: 'NotificationAndroidVisibility',
404
+ },
405
+ },
406
+ perf: {
407
+ default: {
408
+ setPerformanceCollectionEnabled: 'initializePerformance()',
409
+ newTrace: 'trace()',
410
+ newHttpMetric: 'httpMetric()',
411
+ newScreenTrace: 'newScreenTrace()',
412
+ startScreenTrace: 'startScreenTrace()',
413
+ },
414
+ },
415
+ remoteConfig: {
416
+ default: {
417
+ activate: 'activate()',
418
+ ensureInitialized: 'ensureInitialized()',
419
+ fetchAndActivate: 'fetchAndActivate()',
420
+ getAll: 'getAll()',
421
+ getBoolean: 'getBoolean()',
422
+ getNumber: 'getNumber()',
423
+ getString: 'getString()',
424
+ getValue: 'getValue()',
425
+ reset: 'reset()',
426
+ setConfigSettings: 'setConfigSettings()',
427
+ fetch: 'fetch()',
428
+ setDefaults: 'setDefaults()',
429
+ setDefaultsFromResource: 'setDefaultsFromResource()',
430
+ onConfigUpdated: 'onConfigUpdated()',
431
+ },
432
+ statics: {
433
+ LastFetchStatus: 'LastFetchStatus',
434
+ ValueSource: 'ValueSource',
435
+ },
436
+ },
437
+ storage: {
438
+ default: {
439
+ useEmulator: 'connectStorageEmulator()',
440
+ ref: 'ref()',
441
+ refFromURL: 'refFromURL()',
442
+ setMaxOperationRetryTime: 'setMaxOperationRetryTime()',
443
+ setMaxUploadRetryTime: 'setMaxUploadRetryTime()',
444
+ setMaxDownloadRetryTime: 'setMaxDownloadRetryTime()',
445
+ },
446
+ StorageReference: {
447
+ delete: 'deleteObject()',
448
+ getDownloadURL: 'getDownloadURL()',
449
+ getMetadata: 'getMetadata()',
450
+ list: 'list()',
451
+ listAll: 'listAll()',
452
+ updateMetadata: 'updateMetadata()',
453
+ put: 'uploadBytesResumable()',
454
+ putString: 'uploadString()',
455
+ putFile: 'putFile()',
456
+ writeToFile: 'writeToFile()',
457
+ toString: 'toString()',
458
+ child: 'child()',
459
+ },
460
+ statics: {
461
+ StringFormat: 'StringFormat',
462
+ TaskEvent: 'TaskEvent',
463
+ TaskState: 'TaskState',
464
+ },
465
+ },
214
466
  };
215
467
 
216
468
  const modularDeprecationMessage =
@@ -274,6 +526,10 @@ function getNamespace(target) {
274
526
  if (target._config && target._config.namespace) {
275
527
  return target._config.namespace;
276
528
  }
529
+ if (target.constructor.name === 'StorageReference') {
530
+ return 'storage';
531
+ }
532
+
277
533
  const className = target.name ? target.name : target.constructor.name;
278
534
  return Object.keys(mapOfDeprecationReplacements).find(key => {
279
535
  if (mapOfDeprecationReplacements[key][className]) {
@@ -291,6 +547,11 @@ function getInstanceName(target) {
291
547
  // module class instance, we use default to store map of deprecated methods
292
548
  return 'default';
293
549
  }
550
+
551
+ if (target.constructor.name === 'StorageReference') {
552
+ // if path passed into ref(), it will pass in the arg as target.name
553
+ return target.constructor.name;
554
+ }
294
555
  if (target.name) {
295
556
  // It's a function which has a name property unlike classes
296
557
  return target.name;
@@ -329,9 +590,41 @@ export function createDeprecationProxy(instance) {
329
590
  ) {
330
591
  deprecationConsoleWarning('firestore', prop, 'statics', false);
331
592
  }
593
+ if (prop === 'LastFetchStatus' || prop === 'ValueSource') {
594
+ deprecationConsoleWarning('remoteConfig', prop, 'statics', false);
595
+ }
332
596
  if (prop === 'CustomProvider') {
333
597
  deprecationConsoleWarning('appCheck', prop, 'statics', false);
334
598
  }
599
+ if (prop === 'StringFormat' || prop === 'TaskEvent' || prop === 'TaskState') {
600
+ deprecationConsoleWarning('storage', prop, 'statics', false);
601
+ }
602
+
603
+ if (
604
+ prop === 'PhoneAuthState' ||
605
+ prop === 'AppleAuthProvider' ||
606
+ prop === 'PhoneAuthProvider' ||
607
+ prop === 'GoogleAuthProvider' ||
608
+ prop === 'GithubAuthProvider' ||
609
+ prop === 'TwitterAuthProvider' ||
610
+ prop === 'FacebookAuthProvider' ||
611
+ prop === 'OAuthProvider' ||
612
+ prop === 'OIDCAuthProvider' ||
613
+ prop === 'PhoneMultiFactorGenerator' ||
614
+ prop === 'EmailAuthProvider' ||
615
+ prop === 'multiFactor' ||
616
+ prop === 'getMultiFactorResolver'
617
+ ) {
618
+ deprecationConsoleWarning('auth', prop, 'statics', false);
619
+ }
620
+
621
+ if (
622
+ prop === 'AuthorizationStatus' ||
623
+ prop === 'NotificationAndroidPriority' ||
624
+ prop === 'NotificationAndroidVisibility'
625
+ ) {
626
+ deprecationConsoleWarning('messaging', prop, 'statics', false);
627
+ }
335
628
 
336
629
  if (prop !== 'setLogLevel') {
337
630
  // we want to capture setLogLevel function call which we do below
@@ -339,6 +632,30 @@ export function createDeprecationProxy(instance) {
339
632
  }
340
633
  }
341
634
 
635
+ // Check if it's a getter/setter first
636
+ const descriptor =
637
+ Object.getOwnPropertyDescriptor(target, prop) ||
638
+ Object.getOwnPropertyDescriptor(Object.getPrototypeOf(target), prop);
639
+
640
+ if (descriptor && (descriptor.get || descriptor.set)) {
641
+ const instanceName = getInstanceName(target);
642
+ const nameSpace = getNamespace(target);
643
+
644
+ if (descriptor.get) {
645
+ // Handle getter - call it and show deprecation warning
646
+ deprecationConsoleWarning(nameSpace, prop, instanceName, _isModularCall);
647
+ return descriptor.get.call(target);
648
+ }
649
+
650
+ if (descriptor.set) {
651
+ // Handle setter - return a function that calls the setter with deprecation warning
652
+ return function (value) {
653
+ deprecationConsoleWarning(nameSpace, prop, instanceName, _isModularCall);
654
+ descriptor.set.call(target, value);
655
+ };
656
+ }
657
+ }
658
+
342
659
  if (typeof originalMethod === 'function') {
343
660
  return function (...args) {
344
661
  const isModularMethod = args.includes(MODULAR_DEPRECATION_ARG);
@@ -357,6 +674,19 @@ export function createDeprecationProxy(instance) {
357
674
 
358
675
  export const MODULAR_DEPRECATION_ARG = 'react-native-firebase-modular-method-call';
359
676
 
677
+ // Flag to track if we're currently in a modular call
678
+ let _isModularCall = false;
679
+
680
+ export function withModularFlag(fn) {
681
+ const previousFlag = _isModularCall;
682
+ _isModularCall = true;
683
+ try {
684
+ return fn();
685
+ } finally {
686
+ _isModularCall = previousFlag;
687
+ }
688
+ }
689
+
360
690
  export function filterModularArgument(list) {
361
691
  return list.filter(arg => arg !== MODULAR_DEPRECATION_ARG);
362
692
  }
package/lib/version.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // Generated by genversion.
2
- module.exports = '22.2.1';
2
+ module.exports = '22.3.0';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-native-firebase/app",
3
- "version": "22.2.1",
3
+ "version": "22.3.0",
4
4
  "author": "Invertase <oss@invertase.io> (http://invertase.io)",
5
5
  "description": "A well tested, feature rich Firebase implementation for React Native, supporting iOS & Android. Individual module support for Admob, Analytics, Auth, Crash Reporting, Cloud Firestore, Database, Dynamic Links, Functions, Messaging (FCM), Remote Config, Storage and more.",
6
6
  "main": "lib/index.js",
@@ -57,7 +57,7 @@
57
57
  "react-native": "*"
58
58
  },
59
59
  "dependencies": {
60
- "firebase": "11.3.1"
60
+ "firebase": "11.10.0"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@react-native-async-storage/async-storage": "^2.1.2",
@@ -74,7 +74,7 @@
74
74
  },
75
75
  "sdkVersions": {
76
76
  "ios": {
77
- "firebase": "11.13.0",
77
+ "firebase": "11.15.0",
78
78
  "iosTarget": "13.0",
79
79
  "macosTarget": "10.15",
80
80
  "tvosTarget": "13.0"
@@ -83,13 +83,13 @@
83
83
  "minSdk": 21,
84
84
  "targetSdk": 34,
85
85
  "compileSdk": 34,
86
- "firebase": "33.14.0",
87
- "firebaseCrashlyticsGradle": "3.0.3",
86
+ "firebase": "33.16.0",
87
+ "firebaseCrashlyticsGradle": "3.0.4",
88
88
  "firebasePerfGradle": "1.4.2",
89
- "gmsGoogleServicesGradle": "4.4.2",
89
+ "gmsGoogleServicesGradle": "4.4.3",
90
90
  "playServicesAuth": "21.3.0",
91
91
  "firebaseAppDistributionGradle": "5.1.1"
92
92
  }
93
93
  },
94
- "gitHead": "d0fa58166a3fd79c7a951161fa83d0421ae72c93"
94
+ "gitHead": "c04f2a3b681460edde5518812646cf5e0dd86627"
95
95
  }