@react-native-firebase/messaging 25.1.0 → 26.0.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 (71) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/RNFBMessaging.podspec +20 -6
  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 +82 -12
  32. package/ios/RNFBMessaging/RNFBMessaging+NSNotificationCenter.m +14 -4
  33. package/ios/RNFBMessaging/RNFBMessaging+UNUserNotificationCenter.m +31 -28
  34. package/ios/RNFBMessaging/RNFBMessagingModule.h +3 -2
  35. package/ios/RNFBMessaging/RNFBMessagingModule.mm +500 -0
  36. package/ios/RNFBMessaging.xcodeproj/project.pbxproj +8 -8
  37. package/ios/generated/RCTAppDependencyProvider.h +25 -0
  38. package/ios/generated/RCTAppDependencyProvider.mm +55 -0
  39. package/ios/generated/RCTModulesConformingToProtocolsProvider.h +18 -0
  40. package/ios/generated/RCTModulesConformingToProtocolsProvider.mm +33 -0
  41. package/ios/generated/RCTThirdPartyComponentsProvider.h +16 -0
  42. package/ios/generated/RCTThirdPartyComponentsProvider.mm +23 -0
  43. package/ios/generated/RNFBMessagingTurboModules/RNFBMessagingTurboModules-generated.mm +184 -0
  44. package/ios/generated/RNFBMessagingTurboModules/RNFBMessagingTurboModules.h +222 -0
  45. package/ios/generated/RNFBMessagingTurboModulesJSI-generated.cpp +161 -0
  46. package/ios/generated/RNFBMessagingTurboModulesJSI.h +356 -0
  47. package/ios/generated/ReactAppDependencyProvider.podspec +34 -0
  48. package/lib/index.ts +821 -15
  49. package/lib/statics.ts +1 -1
  50. package/lib/types/internal.ts +59 -0
  51. package/lib/types/messaging.ts +7 -72
  52. package/lib/version.ts +1 -1
  53. package/package.json +30 -5
  54. package/plugin/build/app.plugin.d.ts +2 -0
  55. package/plugin/build/app.plugin.js +6 -0
  56. package/plugin/src/app.plugin.ts +3 -0
  57. package/plugin/tsconfig.tsbuildinfo +1 -1
  58. package/react-native.config.js +10 -0
  59. package/specs/NativeRNFBTurboMessaging.ts +46 -0
  60. package/typedoc.json +2 -19
  61. package/dist/module/modular.js +0 -396
  62. package/dist/module/modular.js.map +0 -1
  63. package/dist/module/namespaced.js +0 -415
  64. package/dist/module/namespaced.js.map +0 -1
  65. package/dist/typescript/lib/modular.d.ts +0 -255
  66. package/dist/typescript/lib/modular.d.ts.map +0 -1
  67. package/dist/typescript/lib/namespaced.d.ts +0 -12
  68. package/dist/typescript/lib/namespaced.d.ts.map +0 -1
  69. package/ios/RNFBMessaging/RNFBMessagingModule.m +0 -439
  70. package/lib/modular.ts +0 -455
  71. package/lib/namespaced.ts +0 -593
@@ -1,439 +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 <Firebase/Firebase.h>
19
- #import <RNFBApp/RNFBSharedUtils.h>
20
- #import <React/RCTConvert.h>
21
- #import <React/RCTUtils.h>
22
-
23
- #import "RNFBMessaging+AppDelegate.h"
24
- #import "RNFBMessaging+NSNotificationCenter.h"
25
- #import "RNFBMessaging+UNUserNotificationCenter.h"
26
- #import "RNFBMessagingModule.h"
27
- #import "RNFBMessagingSerializer.h"
28
-
29
- @implementation RNFBMessagingModule
30
- #pragma mark -
31
- #pragma mark Module Setup
32
-
33
- RCT_EXPORT_MODULE();
34
-
35
- - (id)init {
36
- self = [super init];
37
- return self;
38
- }
39
-
40
- - (dispatch_queue_t)methodQueue {
41
- return dispatch_get_main_queue();
42
- }
43
-
44
- + (BOOL)requiresMainQueueSetup {
45
- return YES;
46
- }
47
-
48
- + (NSDictionary *)addCustomPropsToUserProps:(NSDictionary *_Nullable)userProps
49
- withLaunchOptions:(NSDictionary *_Nullable)launchOptions {
50
- NSMutableDictionary *appProperties =
51
- userProps != nil ? [userProps mutableCopy] : [NSMutableDictionary dictionary];
52
- appProperties[@"isHeadless"] = @([RCTConvert BOOL:@(NO)]);
53
-
54
- if (launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]) {
55
- if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) {
56
- appProperties[@"isHeadless"] = @([RCTConvert BOOL:@(YES)]);
57
- }
58
- }
59
-
60
- return [NSDictionary dictionaryWithDictionary:appProperties];
61
- }
62
-
63
- - (NSDictionary *)constantsToExport {
64
- NSMutableDictionary *constants = [NSMutableDictionary new];
65
- constants[@"isAutoInitEnabled"] =
66
- @([RCTConvert BOOL:@([FIRMessaging messaging].autoInitEnabled)]);
67
- #if TARGET_IPHONE_SIMULATOR
68
- // `isRegisteredForRemoteNotifications` is flaky and hangs on the simulator sometimes
69
- // It is reasonably safe to return a "NO" to avoid the simulator hang
70
- // Reasoning: registering multiple times is not harmful so if an app relies on this
71
- // constant, sees a "NO" and then re-register, that is fine.
72
- constants[@"isRegisteredForRemoteNotifications"] = NO;
73
- #else
74
- constants[@"isRegisteredForRemoteNotifications"] = @(
75
- [RCTConvert BOOL:@([[UIApplication sharedApplication] isRegisteredForRemoteNotifications])]);
76
- #endif
77
- constants[@"isDeliveryMetricsExportToBigQueryEnabled"] =
78
- @([RCTConvert BOOL:@(_isDeliveryMetricsExportToBigQueryEnabled)]);
79
- return constants;
80
- }
81
-
82
- #pragma mark -
83
- #pragma mark Firebase Messaging Methods
84
-
85
- RCT_EXPORT_METHOD(getInitialNotification
86
- : (RCTPromiseResolveBlock)resolve
87
- : (RCTPromiseRejectBlock)reject) {
88
- resolve([[RNFBMessagingUNUserNotificationCenter sharedInstance] getInitialNotification]);
89
- }
90
-
91
- RCT_EXPORT_METHOD(getDidOpenSettingsForNotification
92
- : (RCTPromiseResolveBlock)resolve
93
- : (RCTPromiseRejectBlock)reject) {
94
- resolve(
95
- [[RNFBMessagingUNUserNotificationCenter sharedInstance] getDidOpenSettingsForNotification]);
96
- }
97
-
98
- RCT_EXPORT_METHOD(setAutoInitEnabled
99
- : (BOOL)enabled
100
- : (RCTPromiseResolveBlock)resolve
101
- : (RCTPromiseRejectBlock)reject) {
102
- @try {
103
- [FIRMessaging messaging].autoInitEnabled = enabled;
104
- } @catch (NSException *exception) {
105
- return [RNFBSharedUtils rejectPromiseWithExceptionDict:reject exception:exception];
106
- }
107
-
108
- return resolve([NSNull null]);
109
- }
110
-
111
- RCT_EXPORT_METHOD(signalBackgroundMessageHandlerSet) {
112
- DLog(@"signalBackgroundMessageHandlerSet called");
113
- @try {
114
- [[RNFBMessagingAppDelegate sharedInstance] signalBackgroundMessageHandlerSet];
115
- } @catch (NSException *exception) {
116
- ELog(@"signalBackgroundMessageHandlerSet failed");
117
- }
118
- }
119
-
120
- RCT_EXPORT_METHOD(getToken
121
- : (NSString *)appName
122
- : (NSString *)senderId
123
- : (RCTPromiseResolveBlock)resolve
124
- : (RCTPromiseRejectBlock)reject) {
125
- if ([UIApplication sharedApplication].isRegisteredForRemoteNotifications == NO) {
126
- [RNFBSharedUtils
127
- rejectPromiseWithUserInfo:reject
128
- userInfo:(NSMutableDictionary *)@{
129
- @"code" : @"unregistered",
130
- @"message" :
131
- @"You must be registered for remote messages before calling "
132
- @"getToken, see messaging().registerDeviceForRemoteMessages().",
133
- }];
134
- return;
135
- }
136
-
137
- // As of firebase-ios-sdk 10.4.0, an APNS token is strictly required for getToken to work
138
- NSData *apnsToken = [FIRMessaging messaging].APNSToken;
139
- if (apnsToken == nil) {
140
- DLog(@"RNFBMessaging getToken - no APNS token is available. Firebase requires an APNS token to "
141
- @"vend an FCM token in firebase-ios-sdk 10.4.0 and higher. See documentation on "
142
- @"setAPNSToken and getAPNSToken.")
143
- }
144
-
145
- [[FIRMessaging messaging]
146
- retrieveFCMTokenForSenderID:senderId
147
- completion:^(NSString *_Nullable token, NSError *_Nullable error) {
148
- if (error) {
149
- [RNFBSharedUtils rejectPromiseWithNSError:reject error:error];
150
- } else {
151
- resolve(token);
152
- }
153
- }];
154
- }
155
-
156
- RCT_EXPORT_METHOD(deleteToken
157
- : (NSString *)appName
158
- : (NSString *)senderId
159
- : (RCTPromiseResolveBlock)resolve
160
- : (RCTPromiseRejectBlock)reject) {
161
- [[FIRMessaging messaging] deleteFCMTokenForSenderID:senderId
162
- completion:^(NSError *_Nullable error) {
163
- if (error) {
164
- [RNFBSharedUtils rejectPromiseWithNSError:reject
165
- error:error];
166
- } else {
167
- resolve([NSNull null]);
168
- }
169
- }];
170
- }
171
-
172
- RCT_EXPORT_METHOD(getAPNSToken : (RCTPromiseResolveBlock)resolve : (RCTPromiseRejectBlock)reject) {
173
- NSData *apnsToken = [FIRMessaging messaging].APNSToken;
174
- if (apnsToken) {
175
- resolve([RNFBMessagingSerializer APNSTokenFromNSData:apnsToken]);
176
- } else {
177
- #if TARGET_IPHONE_SIMULATOR
178
- #if !TARGET_CPU_ARM64
179
- DLog(@"RNFBMessaging getAPNSToken - Simulator without APNS support detected, with no token "
180
- @"set. Use setAPNSToken with an arbitrary string if needed for testing.")
181
- resolve([NSNull null]);
182
- return;
183
- #endif
184
- DLog(@"RNFBMessaging getAPNSToken - ARM64 Simulator detected, but no APNS token available. "
185
- @"APNS token may be possible. macOS13+ / iOS16+ / M1 mac required for assumption to be "
186
- @"valid. "
187
- @"Use setAPNSToken in testing if needed.");
188
- #endif
189
- if ([UIApplication sharedApplication].isRegisteredForRemoteNotifications == NO) {
190
- [RNFBSharedUtils
191
- rejectPromiseWithUserInfo:reject
192
- userInfo:(NSMutableDictionary *)@{
193
- @"code" : @"unregistered",
194
- @"message" : @"You must be registered for remote messages before "
195
- @"calling getAPNSToken, see "
196
- @"messaging().registerDeviceForRemoteMessages().",
197
- }];
198
- return;
199
- }
200
- resolve([NSNull null]);
201
- }
202
- }
203
-
204
- RCT_EXPORT_METHOD(setAPNSToken
205
- : (NSString *)token
206
- : (NSString *)type
207
- : (RCTPromiseResolveBlock)resolve
208
- : (RCTPromiseRejectBlock)reject) {
209
- // Default to unknown (determined by provisioning profile) type, but user may have passed type as
210
- // param
211
- FIRMessagingAPNSTokenType tokenType = FIRMessagingAPNSTokenTypeUnknown;
212
- if (type != nil && [@"prod" isEqualToString:type]) {
213
- tokenType = FIRMessagingAPNSTokenTypeProd;
214
- } else if (type != nil && [@"sandbox" isEqualToString:type]) {
215
- tokenType = FIRMessagingAPNSTokenTypeSandbox;
216
- }
217
-
218
- [[FIRMessaging messaging] setAPNSToken:[RNFBMessagingSerializer APNSTokenDataFromNSString:token]
219
- type:tokenType];
220
- resolve([NSNull null]);
221
- }
222
-
223
- RCT_EXPORT_METHOD(getIsHeadless : (RCTPromiseResolveBlock)resolve : (RCTPromiseRejectBlock)reject) {
224
- RNFBMessagingNSNotificationCenter *notifCenter =
225
- [RNFBMessagingNSNotificationCenter sharedInstance];
226
-
227
- return resolve(@([RCTConvert BOOL:@(notifCenter.isHeadless)]));
228
- }
229
-
230
- RCT_EXPORT_METHOD(completeNotificationProcessing) {
231
- dispatch_get_main_queue(), ^{
232
- RNFBMessagingAppDelegate *appDelegate = [RNFBMessagingAppDelegate sharedInstance];
233
- if (appDelegate.completionHandler) {
234
- appDelegate.completionHandler(UIBackgroundFetchResultNewData);
235
- appDelegate.completionHandler = nil;
236
- }
237
- if (appDelegate.backgroundTaskId != UIBackgroundTaskInvalid) {
238
- [[UIApplication sharedApplication] endBackgroundTask:appDelegate.backgroundTaskId];
239
- appDelegate.backgroundTaskId = UIBackgroundTaskInvalid;
240
- }
241
- };
242
- }
243
-
244
- RCT_EXPORT_METHOD(requestPermission
245
- : (NSDictionary *)permissions
246
- : (RCTPromiseResolveBlock)resolve
247
- : (RCTPromiseRejectBlock)reject) {
248
- if (RCTRunningInAppExtension()) {
249
- [RNFBSharedUtils
250
- rejectPromiseWithUserInfo:reject
251
- userInfo:[@{
252
- @"code" : @"unavailable-in-extension",
253
- @"message" : @"requestPermission can not be called in App Extensions"
254
- } mutableCopy]];
255
- return;
256
- }
257
-
258
- UNAuthorizationOptions options = UNAuthorizationOptionNone;
259
-
260
- if ([permissions[@"alert"] isEqual:@(YES)]) {
261
- options |= UNAuthorizationOptionAlert;
262
- }
263
-
264
- if ([permissions[@"badge"] isEqual:@(YES)]) {
265
- options |= UNAuthorizationOptionBadge;
266
- }
267
-
268
- if ([permissions[@"sound"] isEqual:@(YES)]) {
269
- options |= UNAuthorizationOptionSound;
270
- }
271
-
272
- if ([permissions[@"criticalAlert"] isEqual:@(YES)]) {
273
- options |= UNAuthorizationOptionCriticalAlert;
274
- }
275
-
276
- if ([permissions[@"provisional"] isEqual:@(YES)]) {
277
- options |= UNAuthorizationOptionProvisional;
278
- }
279
-
280
- if ([permissions[@"announcement"] isEqual:@(YES)]) {
281
- options |= UNAuthorizationOptionAnnouncement;
282
- }
283
-
284
- if ([permissions[@"carPlay"] isEqual:@(YES)]) {
285
- options |= UNAuthorizationOptionCarPlay;
286
- }
287
-
288
- if ([permissions[@"providesAppNotificationSettings"] isEqual:@(YES)]) {
289
- options |= UNAuthorizationOptionProvidesAppNotificationSettings;
290
- }
291
-
292
- UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
293
- [center requestAuthorizationWithOptions:options
294
- completionHandler:^(BOOL granted, NSError *_Nullable error) {
295
- if (error) {
296
- [RNFBSharedUtils rejectPromiseWithNSError:reject error:error];
297
- } else {
298
- // if we do not attempt to register immediately, registration fails
299
- // later unknown reason why, but this was the only difference between
300
- // using a react-native-permissions vs built-in permissions request in
301
- // a sequence of "request permissions" --> "register for messages" you
302
- // only want to request permission if you want to register for
303
- // messages, so we register directly now - see #7272
304
- dispatch_async(dispatch_get_main_queue(), ^{
305
- [[UIApplication sharedApplication] registerForRemoteNotifications];
306
- });
307
- [self hasPermission:resolve:reject];
308
- }
309
- }];
310
- }
311
-
312
- RCT_EXPORT_METHOD(registerForRemoteNotifications
313
- : (RCTPromiseResolveBlock)resolve
314
- : (RCTPromiseRejectBlock)reject) {
315
- #if TARGET_IPHONE_SIMULATOR
316
- #if !TARGET_CPU_ARM64
317
- // Register on this unsupported simulator, but no waiting for a token that won't arrive
318
- [[UIApplication sharedApplication] registerForRemoteNotifications];
319
- resolve(@([RCTConvert BOOL:@(YES)]));
320
- return;
321
- #endif
322
- DLog(@"RNFBMessaging registerForRemoteNotifications ARM64 Simulator detected, attempting real "
323
- @"registration. macOS13+ / iOS16+ / M1 mac required or will timeout.")
324
- #endif
325
- if ([UIApplication sharedApplication].isRegisteredForRemoteNotifications == YES) {
326
- DLog(@"RNFBMessaging registerForRemoteNotifications - already registered.");
327
- resolve(@([RCTConvert BOOL:@(YES)]));
328
- return;
329
- }
330
- else {
331
- [[RNFBMessagingAppDelegate sharedInstance] setPromiseResolve:resolve andPromiseReject:reject];
332
- }
333
-
334
- // Apple docs recommend that registerForRemoteNotifications is always called on app start
335
- // regardless of current status
336
- dispatch_async(dispatch_get_main_queue(), ^{
337
- // Sometimes the registration never completes, which deserves separate attention in other
338
- // areas. This area should protect itself against hanging forever regardless. Just in case,
339
- // check in after a delay and cleanup if required
340
- dispatch_after(
341
- dispatch_time(DISPATCH_TIME_NOW, 10.0 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
342
- if ([RNFBMessagingAppDelegate sharedInstance].registerPromiseResolver != nil) {
343
- // if we got here and resolve/reject are still set, unset, log failure, reject
344
- DLog(@"RNFBMessaging dispatch_after block: we appear to have timed out. Rejecting");
345
- [[RNFBMessagingAppDelegate sharedInstance] setPromiseResolve:nil andPromiseReject:nil];
346
-
347
- [RNFBSharedUtils
348
- rejectPromiseWithUserInfo:reject
349
- userInfo:[@{
350
- @"code" : @"unknown-error",
351
- @"message" :
352
- @"registerDeviceForRemoteMessages requested but "
353
- @"system did not respond. Possibly missing permission."
354
- } mutableCopy]];
355
- return;
356
- } else {
357
- DLog(@"RNFBMessaging dispatch_after: registerDeviceForRemoteMessages handled.");
358
- return;
359
- }
360
- });
361
-
362
- [[UIApplication sharedApplication] registerForRemoteNotifications];
363
- });
364
- }
365
-
366
- RCT_EXPORT_METHOD(unregisterForRemoteNotifications
367
- : (RCTPromiseResolveBlock)resolve
368
- : (RCTPromiseRejectBlock)reject) {
369
- [[UIApplication sharedApplication] unregisterForRemoteNotifications];
370
- resolve(nil);
371
- }
372
-
373
- RCT_EXPORT_METHOD(hasPermission : (RCTPromiseResolveBlock)resolve : (RCTPromiseRejectBlock)reject) {
374
- [[UNUserNotificationCenter currentNotificationCenter]
375
- getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings *_Nonnull settings) {
376
- NSNumber *authorizedStatus = @-1;
377
- if (settings.authorizationStatus == UNAuthorizationStatusNotDetermined) {
378
- authorizedStatus = @-1;
379
- } else if (settings.authorizationStatus == UNAuthorizationStatusDenied) {
380
- authorizedStatus = @0;
381
- } else if (settings.authorizationStatus == UNAuthorizationStatusAuthorized) {
382
- authorizedStatus = @1;
383
- } else if (settings.authorizationStatus == UNAuthorizationStatusProvisional) {
384
- authorizedStatus = @2;
385
- }
386
-
387
- if (@available(iOS 14.0, macCatalyst 14.0, *)) {
388
- if (settings.authorizationStatus == UNAuthorizationStatusEphemeral) {
389
- authorizedStatus = @3;
390
- }
391
- }
392
-
393
- resolve(authorizedStatus);
394
- }];
395
- }
396
-
397
- RCT_EXPORT_METHOD(subscribeToTopic
398
- : (NSString *)topic
399
- : (RCTPromiseResolveBlock)resolve
400
- : (RCTPromiseRejectBlock)reject) {
401
- [[FIRMessaging messaging] subscribeToTopic:topic
402
- completion:^(NSError *error) {
403
- if (error) {
404
- [RNFBSharedUtils rejectPromiseWithNSError:reject error:error];
405
- } else {
406
- resolve(nil);
407
- }
408
- }];
409
- }
410
-
411
- RCT_EXPORT_METHOD(unsubscribeFromTopic
412
- : (NSString *)topic
413
- : (RCTPromiseResolveBlock)resolve
414
- : (RCTPromiseRejectBlock)reject) {
415
- [[FIRMessaging messaging] unsubscribeFromTopic:topic
416
- completion:^(NSError *error) {
417
- if (error) {
418
- [RNFBSharedUtils rejectPromiseWithNSError:reject
419
- error:error];
420
- } else {
421
- resolve(nil);
422
- }
423
- }];
424
- }
425
-
426
- RCT_EXPORT_METHOD(setDeliveryMetricsExportToBigQuery
427
- : (BOOL)enabled
428
- : (RCTPromiseResolveBlock)resolve
429
- : (RCTPromiseRejectBlock)reject) {
430
- @try {
431
- _isDeliveryMetricsExportToBigQueryEnabled = enabled;
432
- } @catch (NSException *exception) {
433
- return [RNFBSharedUtils rejectPromiseWithExceptionDict:reject exception:exception];
434
- }
435
-
436
- return resolve([NSNull null]);
437
- }
438
-
439
- @end