@react-native-firebase/messaging 25.1.0 → 26.1.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.
Files changed (82) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/RNFBMessaging.podspec +27 -8
  3. package/android/build.gradle +24 -0
  4. package/android/src/main/java/io/invertase/firebase/messaging/{ReactNativeFirebaseMessagingModule.java → NativeRNFBTurboMessaging.java} +143 -81
  5. package/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingPackage.java +1 -1
  6. package/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingReceiver.java +16 -0
  7. package/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStoreImpl.java +50 -11
  8. package/android/src/main/java/io/invertase/firebase/messaging/generated/java/com/facebook/fbreact/specs/NativeRNFBTurboMessagingSpec.java +151 -0
  9. package/android/src/main/java/io/invertase/firebase/messaging/generated/jni/CMakeLists.txt +36 -0
  10. package/android/src/main/java/io/invertase/firebase/messaging/generated/jni/RNFBMessagingTurboModules-generated.cpp +152 -0
  11. package/android/src/main/java/io/invertase/firebase/messaging/generated/jni/RNFBMessagingTurboModules.h +31 -0
  12. package/android/src/main/java/io/invertase/firebase/messaging/generated/jni/react/renderer/components/RNFBMessagingTurboModules/RNFBMessagingTurboModulesJSI-generated.cpp +161 -0
  13. package/android/src/main/java/io/invertase/firebase/messaging/generated/jni/react/renderer/components/RNFBMessagingTurboModules/RNFBMessagingTurboModulesJSI.h +356 -0
  14. package/app.plugin.js +1 -1
  15. package/dist/module/index.js +622 -7
  16. package/dist/module/index.js.map +1 -1
  17. package/dist/module/statics.js +1 -1
  18. package/dist/module/types/internal.js +4 -0
  19. package/dist/module/types/internal.js.map +1 -0
  20. package/dist/module/types/messaging.js +0 -15
  21. package/dist/module/types/messaging.js.map +1 -1
  22. package/dist/module/version.js +1 -1
  23. package/dist/typescript/lib/index.d.ts +182 -5
  24. package/dist/typescript/lib/index.d.ts.map +1 -1
  25. package/dist/typescript/lib/types/internal.d.ts +41 -0
  26. package/dist/typescript/lib/types/internal.d.ts.map +1 -0
  27. package/dist/typescript/lib/types/messaging.d.ts +7 -55
  28. package/dist/typescript/lib/types/messaging.d.ts.map +1 -1
  29. package/dist/typescript/lib/version.d.ts +1 -1
  30. package/ios/RNFBMessaging/RNFBMessaging+AppDelegate.h +24 -2
  31. package/ios/RNFBMessaging/RNFBMessaging+AppDelegate.m +90 -12
  32. package/ios/RNFBMessaging/RNFBMessaging+FIRMessagingDelegate.h +8 -0
  33. package/ios/RNFBMessaging/RNFBMessaging+NSNotificationCenter.m +22 -4
  34. package/ios/RNFBMessaging/RNFBMessaging+UNUserNotificationCenter.m +31 -28
  35. package/ios/RNFBMessaging/RNFBMessagingModule.h +3 -2
  36. package/ios/RNFBMessaging/RNFBMessagingModule.mm +508 -0
  37. package/ios/RNFBMessaging/RNFBMessagingSerializer.h +8 -0
  38. package/ios/RNFBMessaging.xcodeproj/project.pbxproj +8 -8
  39. package/ios/generated/RCTAppDependencyProvider.h +25 -0
  40. package/ios/generated/RCTAppDependencyProvider.mm +55 -0
  41. package/ios/generated/RCTModulesConformingToProtocolsProvider.h +18 -0
  42. package/ios/generated/RCTModulesConformingToProtocolsProvider.mm +33 -0
  43. package/ios/generated/RCTThirdPartyComponentsProvider.h +16 -0
  44. package/ios/generated/RCTThirdPartyComponentsProvider.mm +23 -0
  45. package/ios/generated/RNFBMessagingTurboModules/RNFBMessagingTurboModules-generated.mm +184 -0
  46. package/ios/generated/RNFBMessagingTurboModules/RNFBMessagingTurboModules.h +222 -0
  47. package/ios/generated/RNFBMessagingTurboModulesJSI-generated.cpp +161 -0
  48. package/ios/generated/RNFBMessagingTurboModulesJSI.h +356 -0
  49. package/ios/generated/ReactAppDependencyProvider.podspec +34 -0
  50. package/lib/index.ts +821 -15
  51. package/lib/statics.ts +1 -1
  52. package/lib/types/internal.ts +59 -0
  53. package/lib/types/messaging.ts +7 -72
  54. package/lib/version.ts +1 -1
  55. package/package.json +30 -5
  56. package/plugin/build/android/setupFirebaseNotifationIcon.d.ts +3 -2
  57. package/plugin/build/android/setupFirebaseNotifationIcon.js +14 -7
  58. package/plugin/build/app.plugin.d.ts +2 -0
  59. package/plugin/build/app.plugin.js +6 -0
  60. package/plugin/build/index.d.ts +2 -1
  61. package/plugin/build/index.js +4 -4
  62. package/plugin/build/pluginConfig.d.ts +7 -0
  63. package/plugin/build/pluginConfig.js +2 -0
  64. package/plugin/src/android/setupFirebaseNotifationIcon.ts +19 -6
  65. package/plugin/src/app.plugin.ts +3 -0
  66. package/plugin/src/index.ts +5 -4
  67. package/plugin/src/pluginConfig.ts +8 -0
  68. package/plugin/tsconfig.tsbuildinfo +1 -1
  69. package/react-native.config.js +10 -0
  70. package/specs/NativeRNFBTurboMessaging.ts +46 -0
  71. package/typedoc.json +2 -19
  72. package/dist/module/modular.js +0 -396
  73. package/dist/module/modular.js.map +0 -1
  74. package/dist/module/namespaced.js +0 -415
  75. package/dist/module/namespaced.js.map +0 -1
  76. package/dist/typescript/lib/modular.d.ts +0 -255
  77. package/dist/typescript/lib/modular.d.ts.map +0 -1
  78. package/dist/typescript/lib/namespaced.d.ts +0 -12
  79. package/dist/typescript/lib/namespaced.d.ts.map +0 -1
  80. package/ios/RNFBMessaging/RNFBMessagingModule.m +0 -439
  81. package/lib/modular.ts +0 -455
  82. package/lib/namespaced.ts +0 -593
package/lib/namespaced.ts DELETED
@@ -1,593 +0,0 @@
1
- /*
2
- * Copyright (c) 2016-present Invertase Limited & Contributors
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this library except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- *
16
- */
17
-
18
- import {
19
- hasOwnProperty,
20
- isAndroid,
21
- isBoolean,
22
- isFunction,
23
- isIOS,
24
- isObject,
25
- isString,
26
- isUndefined,
27
- } from '@react-native-firebase/app/dist/module/common';
28
- import {
29
- createModuleNamespace,
30
- FirebaseModule,
31
- getFirebaseRoot,
32
- } from '@react-native-firebase/app/dist/module/internal';
33
- import { AppRegistry } from 'react-native';
34
- import remoteMessageOptions from './remoteMessageOptions';
35
- import { version } from './version';
36
- import {
37
- AuthorizationStatus,
38
- NotificationAndroidPriority,
39
- NotificationAndroidVisibility,
40
- } from './statics';
41
- import type {
42
- Messaging,
43
- Statics,
44
- RemoteMessage,
45
- IOSPermissions,
46
- AuthorizationStatus as AuthorizationStatusType,
47
- } from './types/messaging';
48
- import type { ReactNativeFirebase } from '@react-native-firebase/app';
49
-
50
- const statics: Partial<Statics> = {
51
- AuthorizationStatus,
52
- NotificationAndroidPriority,
53
- NotificationAndroidVisibility,
54
- };
55
- const namespace = 'messaging';
56
-
57
- const nativeModuleName = 'RNFBMessagingModule';
58
-
59
- let backgroundMessageHandler: ((remoteMessage: RemoteMessage) => Promise<any>) | undefined;
60
- let openSettingsForNotificationHandler: ((remoteMessage: RemoteMessage) => any) | undefined;
61
- let playServicesAvailability: any;
62
-
63
- class FirebaseMessagingModule extends FirebaseModule implements Messaging {
64
- _isAutoInitEnabled: boolean;
65
- _isDeliveryMetricsExportToBigQueryEnabled: boolean;
66
- _isRegisteredForRemoteNotifications: boolean;
67
- _isNotificationDelegationEnabled: boolean;
68
-
69
- constructor(
70
- app: ReactNativeFirebase.FirebaseAppBase,
71
- config: any,
72
- customUrlOrRegion?: string | null,
73
- ) {
74
- super(app, config, customUrlOrRegion);
75
- this._isAutoInitEnabled =
76
- this.native.isAutoInitEnabled != null ? this.native.isAutoInitEnabled : true;
77
- this._isDeliveryMetricsExportToBigQueryEnabled =
78
- this.native.isDeliveryMetricsExportToBigQueryEnabled != null
79
- ? this.native.isDeliveryMetricsExportToBigQueryEnabled
80
- : false;
81
- this._isRegisteredForRemoteNotifications =
82
- this.native.isRegisteredForRemoteNotifications != null
83
- ? this.native.isRegisteredForRemoteNotifications
84
- : true;
85
- this._isNotificationDelegationEnabled =
86
- this.native.isNotificationDelegationEnabled != null
87
- ? this.native.isNotificationDelegationEnabled
88
- : false;
89
-
90
- AppRegistry.registerHeadlessTask('ReactNativeFirebaseMessagingHeadlessTask', () => {
91
- if (!backgroundMessageHandler) {
92
- // eslint-disable-next-line no-console
93
- console.warn(
94
- 'No background message handler has been set. Set a handler via the "setBackgroundMessageHandler" method.',
95
- );
96
- return () => Promise.resolve();
97
- }
98
- return (remoteMessage: RemoteMessage) => backgroundMessageHandler!(remoteMessage);
99
- });
100
-
101
- if (isIOS) {
102
- this.emitter.addListener(
103
- 'messaging_message_received_background',
104
- (remoteMessage: RemoteMessage) => {
105
- if (!backgroundMessageHandler) {
106
- // eslint-disable-next-line no-console
107
- console.warn(
108
- 'No background message handler has been set. Set a handler via the "setBackgroundMessageHandler" method.',
109
- );
110
- return Promise.resolve();
111
- }
112
-
113
- // Ensure the handler is a promise
114
- const handlerPromise = Promise.resolve(backgroundMessageHandler(remoteMessage));
115
- handlerPromise.finally(() => {
116
- this.native.completeNotificationProcessing();
117
- });
118
-
119
- return handlerPromise;
120
- },
121
- );
122
-
123
- this.emitter.addListener(
124
- 'messaging_settings_for_notification_opened',
125
- (remoteMessage: RemoteMessage) => {
126
- if (!openSettingsForNotificationHandler) {
127
- // eslint-disable-next-line no-console
128
- console.warn(
129
- 'No handler for notification settings link has been set. Set a handler via the "setOpenSettingsForNotificationsHandler" method',
130
- );
131
-
132
- return Promise.resolve();
133
- }
134
-
135
- return openSettingsForNotificationHandler(remoteMessage);
136
- },
137
- );
138
- }
139
- }
140
-
141
- get isAutoInitEnabled(): boolean {
142
- return this._isAutoInitEnabled;
143
- }
144
-
145
- /**
146
- * @ios
147
- */
148
- get isDeviceRegisteredForRemoteMessages(): boolean {
149
- if (isAndroid) {
150
- return true;
151
- }
152
-
153
- return this._isRegisteredForRemoteNotifications;
154
- }
155
-
156
- get isNotificationDelegationEnabled(): boolean {
157
- return this._isNotificationDelegationEnabled;
158
- }
159
-
160
- get isDeliveryMetricsExportToBigQueryEnabled(): boolean {
161
- return this._isDeliveryMetricsExportToBigQueryEnabled;
162
- }
163
-
164
- setAutoInitEnabled(enabled: boolean): Promise<void> {
165
- if (!isBoolean(enabled)) {
166
- throw new Error(
167
- "firebase.messaging().setAutoInitEnabled(*) 'enabled' expected a boolean value.",
168
- );
169
- }
170
-
171
- this._isAutoInitEnabled = enabled;
172
- return this.native.setAutoInitEnabled(enabled);
173
- }
174
-
175
- getInitialNotification(): Promise<RemoteMessage | null> {
176
- return this.native.getInitialNotification().then((value: RemoteMessage | null) => {
177
- if (value) {
178
- return value;
179
- }
180
- return null;
181
- });
182
- }
183
-
184
- getDidOpenSettingsForNotification(): Promise<boolean> {
185
- if (!isIOS) return Promise.resolve(false);
186
- return this.native.getDidOpenSettingsForNotification().then((value: boolean) => value);
187
- }
188
-
189
- getIsHeadless(): Promise<boolean> {
190
- return this.native.getIsHeadless();
191
- }
192
-
193
- getToken(options?: { appName?: string; senderId?: string }): Promise<string> {
194
- if (!isUndefined(options?.appName) && !isString(options?.appName)) {
195
- throw new Error("firebase.messaging().getToken(*) 'appName' expected a string.");
196
- }
197
-
198
- if (!isUndefined(options?.senderId) && !isString(options?.senderId)) {
199
- throw new Error("firebase.messaging().getToken(*) 'senderId' expected a string.");
200
- }
201
-
202
- const appName = options?.appName || this.app.name;
203
- const senderId = options?.senderId || this.app.options.messagingSenderId;
204
-
205
- return this.native.getToken(appName, senderId);
206
- }
207
-
208
- deleteToken(options?: { appName?: string; senderId?: string }): Promise<void> {
209
- if (!isUndefined(options?.appName) && !isString(options?.appName)) {
210
- throw new Error("firebase.messaging().deleteToken(*) 'appName' expected a string.");
211
- }
212
-
213
- if (!isUndefined(options?.senderId) && !isString(options?.senderId)) {
214
- throw new Error("firebase.messaging().deleteToken(*) 'senderId' expected a string.");
215
- }
216
-
217
- const appName = options?.appName || this.app.name;
218
- const senderId = options?.senderId || this.app.options.messagingSenderId;
219
-
220
- return this.native.deleteToken(appName, senderId);
221
- }
222
-
223
- onMessage(listener: (message: RemoteMessage) => any): () => void {
224
- if (!isFunction(listener)) {
225
- throw new Error("firebase.messaging().onMessage(*) 'listener' expected a function.");
226
- }
227
-
228
- const subscription = this.emitter.addListener('messaging_message_received', listener);
229
- return () => subscription.remove();
230
- }
231
-
232
- onNotificationOpenedApp(listener: (message: RemoteMessage) => any): () => void {
233
- if (!isFunction(listener)) {
234
- throw new Error(
235
- "firebase.messaging().onNotificationOpenedApp(*) 'listener' expected a function.",
236
- );
237
- }
238
-
239
- const subscription = this.emitter.addListener('messaging_notification_opened', listener);
240
- return () => subscription.remove();
241
- }
242
-
243
- onTokenRefresh(listener: (token: string) => any): () => void {
244
- if (!isFunction(listener)) {
245
- throw new Error("firebase.messaging().onTokenRefresh(*) 'listener' expected a function.");
246
- }
247
-
248
- const subscription = this.emitter.addListener(
249
- 'messaging_token_refresh',
250
- (event: { token: string }) => {
251
- const { token } = event;
252
- listener(token);
253
- },
254
- );
255
- return () => subscription.remove();
256
- }
257
-
258
- /**
259
- * @platform ios
260
- * @deprecated Use {@link https://github.com/zoontek/react-native-permissions react-native-permissions} or
261
- * {@link https://docs.expo.dev/versions/latest/sdk/notifications/ expo-notifications} for notification permission
262
- * requests instead. These APIs will be removed in a future major release.
263
- * See {@link https://github.com/invertase/react-native-firebase/issues/6283 #6283}.
264
- */
265
- requestPermission(permissions?: IOSPermissions): Promise<AuthorizationStatusType> {
266
- if (isAndroid) {
267
- return Promise.resolve(AuthorizationStatus.AUTHORIZED);
268
- }
269
-
270
- const defaultPermissions: IOSPermissions = {
271
- alert: true,
272
- announcement: false,
273
- badge: true,
274
- carPlay: true,
275
- provisional: false,
276
- sound: true,
277
- criticalAlert: false,
278
- providesAppNotificationSettings: false,
279
- };
280
-
281
- if (!permissions) {
282
- return this.native.requestPermission(defaultPermissions);
283
- }
284
-
285
- if (!isObject(permissions)) {
286
- throw new Error('firebase.messaging().requestPermission(*) expected an object value.');
287
- }
288
-
289
- Object.entries(permissions).forEach(([key, value]) => {
290
- if (!hasOwnProperty(defaultPermissions, key)) {
291
- throw new Error(
292
- `firebase.messaging().requestPermission(*) unexpected key "${key}" provided to permissions object.`,
293
- );
294
- }
295
-
296
- if (!isBoolean(value)) {
297
- throw new Error(
298
- `firebase.messaging().requestPermission(*) the permission "${key}" expected a boolean value.`,
299
- );
300
- }
301
-
302
- (defaultPermissions as any)[key] = value;
303
- });
304
-
305
- return this.native.requestPermission(defaultPermissions);
306
- }
307
-
308
- registerDeviceForRemoteMessages(): Promise<void> {
309
- if (isAndroid) {
310
- return Promise.resolve();
311
- }
312
-
313
- const autoRegister = this.firebaseJson['messaging_ios_auto_register_for_remote_messages'];
314
- if (autoRegister === undefined || autoRegister === true) {
315
- // eslint-disable-next-line no-console
316
- console.warn(
317
- `Usage of "messaging().registerDeviceForRemoteMessages()" is not required. You only need to register if auto-registration is disabled in your 'firebase.json' configuration file via the 'messaging_ios_auto_register_for_remote_messages' property.`,
318
- );
319
- }
320
-
321
- this._isRegisteredForRemoteNotifications = true;
322
- return this.native.registerForRemoteNotifications();
323
- }
324
-
325
- /**
326
- * @platform ios
327
- */
328
- unregisterDeviceForRemoteMessages(): Promise<void> {
329
- if (isAndroid) {
330
- return Promise.resolve();
331
- }
332
- this._isRegisteredForRemoteNotifications = false;
333
- return this.native.unregisterForRemoteNotifications();
334
- }
335
-
336
- /**
337
- * @platform ios
338
- */
339
- getAPNSToken(): Promise<string | null> {
340
- if (isAndroid) {
341
- return Promise.resolve(null);
342
- }
343
- return this.native.getAPNSToken();
344
- }
345
-
346
- /**
347
- * @platform ios
348
- */
349
- setAPNSToken(token: string, type?: string): Promise<void> {
350
- if (isUndefined(token) || !isString(token)) {
351
- throw new Error("firebase.messaging().setAPNSToken(*) 'token' expected a string value.");
352
- }
353
-
354
- if (!isUndefined(type) && (!isString(type) || !['prod', 'sandbox', 'unknown'].includes(type))) {
355
- throw new Error(
356
- "firebase.messaging().setAPNSToken(*) 'type' expected one of 'prod', 'sandbox', or 'unknown'.",
357
- );
358
- }
359
-
360
- if (isAndroid) {
361
- return Promise.resolve();
362
- }
363
-
364
- return this.native.setAPNSToken(token, type);
365
- }
366
-
367
- /**
368
- * @deprecated Use {@link https://github.com/zoontek/react-native-permissions react-native-permissions} or
369
- * {@link https://docs.expo.dev/versions/latest/sdk/notifications/ expo-notifications} for notification permission
370
- * requests instead. These APIs will be removed in a future major release.
371
- * See {@link https://github.com/invertase/react-native-firebase/issues/6283 #6283}.
372
- */
373
- hasPermission(): Promise<AuthorizationStatusType> {
374
- return this.native.hasPermission();
375
- }
376
-
377
- // https://firebase.google.com/docs/reference/android/com/google/firebase/messaging/FirebaseMessagingService.html#public-void-ondeletedmessages-
378
- onDeletedMessages(listener: () => void): () => void {
379
- if (!isFunction(listener)) {
380
- throw new Error("firebase.messaging().onDeletedMessages(*) 'listener' expected a function.");
381
- }
382
-
383
- const subscription = this.emitter.addListener('messaging_message_deleted', listener);
384
- return () => subscription.remove();
385
- }
386
-
387
- // https://firebase.google.com/docs/reference/android/com/google/firebase/messaging/FirebaseMessagingService.html#onMessageSent(java.lang.String)
388
- onMessageSent(listener: (messageId: string) => any): () => void {
389
- if (!isFunction(listener)) {
390
- throw new Error("firebase.messaging().onMessageSent(*) 'listener' expected a function.");
391
- }
392
-
393
- const subscription = this.emitter.addListener('messaging_message_sent', listener);
394
- return () => {
395
- subscription.remove();
396
- };
397
- }
398
-
399
- // https://firebase.google.com/docs/reference/android/com/google/firebase/messaging/FirebaseMessagingService.html#onSendError(java.lang.String,%20java.lang.Exception)
400
- onSendError(
401
- listener: (evt: { messageId: string; error: ReactNativeFirebase.NativeFirebaseError }) => any,
402
- ): () => void {
403
- if (!isFunction(listener)) {
404
- throw new Error("firebase.messaging().onSendError(*) 'listener' expected a function.");
405
- }
406
-
407
- const subscription = this.emitter.addListener('messaging_message_send_error', listener);
408
- return () => subscription.remove();
409
- }
410
-
411
- /**
412
- * Set a handler that will be called when a message is received while the app is in the background.
413
- * Should be called before the app is registered in `AppRegistry`, for example in `index.js`.
414
- * An app is considered to be in the background if no active window is displayed.
415
- * @param handler called with an argument of type messaging.RemoteMessage that must be async and return a Promise
416
- */
417
- setBackgroundMessageHandler(handler: (message: RemoteMessage) => Promise<any>): void {
418
- if (!isFunction(handler)) {
419
- throw new Error(
420
- "firebase.messaging().setBackgroundMessageHandler(*) 'handler' expected a function.",
421
- );
422
- }
423
-
424
- backgroundMessageHandler = handler;
425
- if (isIOS) {
426
- this.native.signalBackgroundMessageHandlerSet();
427
- }
428
- }
429
-
430
- setOpenSettingsForNotificationsHandler(handler: (message: RemoteMessage) => any): void {
431
- if (!isIOS) {
432
- return;
433
- }
434
-
435
- if (!isFunction(handler)) {
436
- throw new Error(
437
- "firebase.messaging().setOpenSettingsForNotificationsHandler(*) 'handler' expected a function.",
438
- );
439
- }
440
-
441
- openSettingsForNotificationHandler = handler;
442
- }
443
-
444
- sendMessage(remoteMessage: RemoteMessage): Promise<void> {
445
- if (isIOS) {
446
- throw new Error(`firebase.messaging().sendMessage() is only supported on Android devices.`);
447
- }
448
- let options;
449
- try {
450
- const senderId = this.app.options.messagingSenderId;
451
- if (!senderId) {
452
- throw new Error("'messagingSenderId' is required in Firebase app options.");
453
- }
454
- options = remoteMessageOptions(senderId, remoteMessage);
455
- } catch (e: any) {
456
- throw new Error(`firebase.messaging().sendMessage(*) ${e.message}.`);
457
- }
458
-
459
- return this.native.sendMessage(options);
460
- }
461
-
462
- subscribeToTopic(topic: string): Promise<void> {
463
- if (!isString(topic)) {
464
- throw new Error("firebase.messaging().subscribeToTopic(*) 'topic' expected a string value.");
465
- }
466
-
467
- if (topic.indexOf('/') > -1) {
468
- throw new Error('firebase.messaging().subscribeToTopic(*) \'topic\' must not include "/".');
469
- }
470
-
471
- return this.native.subscribeToTopic(topic);
472
- }
473
-
474
- unsubscribeFromTopic(topic: string): Promise<void> {
475
- if (!isString(topic)) {
476
- throw new Error(
477
- "firebase.messaging().unsubscribeFromTopic(*) 'topic' expected a string value.",
478
- );
479
- }
480
-
481
- if (topic.indexOf('/') > -1) {
482
- throw new Error(
483
- 'firebase.messaging().unsubscribeFromTopic(*) \'topic\' must not include "/".',
484
- );
485
- }
486
-
487
- return this.native.unsubscribeFromTopic(topic);
488
- }
489
-
490
- /**
491
- * unsupported
492
- */
493
-
494
- useServiceWorker(): void {
495
- // eslint-disable-next-line no-console
496
- console.warn(
497
- 'firebase.messaging().useServiceWorker() is not supported on react-native-firebase.',
498
- );
499
- }
500
-
501
- usePublicVapidKey(): void {
502
- // eslint-disable-next-line no-console
503
- console.warn(
504
- 'firebase.messaging().usePublicVapidKey() is not supported on react-native-firebase.',
505
- );
506
- }
507
-
508
- setDeliveryMetricsExportToBigQuery(enabled: boolean): Promise<void> {
509
- if (!isBoolean(enabled)) {
510
- throw new Error(
511
- "firebase.messaging().setDeliveryMetricsExportToBigQuery(*) 'enabled' expected a boolean value.",
512
- );
513
- }
514
-
515
- this._isDeliveryMetricsExportToBigQueryEnabled = enabled;
516
- return this.native.setDeliveryMetricsExportToBigQuery(enabled);
517
- }
518
-
519
- setNotificationDelegationEnabled(enabled: boolean): Promise<void> {
520
- if (!isBoolean(enabled)) {
521
- throw new Error(
522
- "firebase.messaging().setNotificationDelegationEnabled(*) 'enabled' expected a boolean value.",
523
- );
524
- }
525
-
526
- this._isNotificationDelegationEnabled = enabled;
527
- if (isIOS) {
528
- return Promise.resolve();
529
- }
530
-
531
- return this.native.setNotificationDelegationEnabled(enabled);
532
- }
533
-
534
- async isSupported(): Promise<boolean> {
535
- if (isAndroid) {
536
- const firebase = getFirebaseRoot();
537
- const app = this.app;
538
- // @ts-ignore - secret "app" argument to avoid deprecation warning when getApp() is called under the hood
539
- playServicesAvailability = firebase.utils(app).playServicesAvailability;
540
- return playServicesAvailability.isAvailable;
541
- }
542
- // Always return "true" for iOS. Web will be implemented when it is supported
543
- return true;
544
- }
545
- }
546
-
547
- // import { SDK_VERSION } from '@react-native-firebase/messaging';
548
- export const SDK_VERSION = version;
549
-
550
- // import messaging from '@react-native-firebase/messaging';
551
- // messaging().X(...);
552
- const messagingNamespace = createModuleNamespace({
553
- statics,
554
- version,
555
- namespace,
556
- nativeModuleName,
557
- nativeEvents: [
558
- 'messaging_token_refresh',
559
- 'messaging_message_sent',
560
- 'messaging_message_deleted',
561
- 'messaging_message_received',
562
- 'messaging_message_send_error',
563
- 'messaging_notification_opened',
564
- ...(isIOS
565
- ? ['messaging_message_received_background', 'messaging_settings_for_notification_opened']
566
- : []),
567
- ],
568
- hasMultiAppSupport: false,
569
- hasCustomUrlOrRegionSupport: false,
570
- ModuleClass: FirebaseMessagingModule,
571
- });
572
-
573
- type MessagingNamespace = ReactNativeFirebase.FirebaseModuleWithStaticsAndApp<
574
- Messaging,
575
- Statics
576
- > & {
577
- messaging: ReactNativeFirebase.FirebaseModuleWithStaticsAndApp<Messaging, Statics>;
578
- firebase: ReactNativeFirebase.Module;
579
- app(name?: string): ReactNativeFirebase.FirebaseApp;
580
- };
581
-
582
- export default messagingNamespace as unknown as MessagingNamespace;
583
-
584
- // import messaging, { firebase } from '@react-native-firebase/messaging';
585
- // messaging().X(...);
586
- // firebase.messaging().X(...);
587
- export const firebase =
588
- getFirebaseRoot() as unknown as ReactNativeFirebase.FirebaseNamespacedExport<
589
- 'messaging',
590
- Messaging,
591
- Statics,
592
- false
593
- >;