@react-native-firebase/messaging 19.2.1 → 19.3.0

Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,17 @@
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
+ ## [19.3.0](https://github.com/invertase/react-native-firebase/compare/v19.2.2...v19.3.0) (2024-05-20)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **messaging, ios:** register for notifications on permission grant ([ccd78b9](https://github.com/invertase/react-native-firebase/commit/ccd78b9cf5d6961f5252e582ede785932599d25d)), closes [#7272](https://github.com/invertase/react-native-firebase/issues/7272)
11
+ - **messaging, ios:** reject notification registration after 10 seconds ([1f86483](https://github.com/invertase/react-native-firebase/commit/1f8648329ce812644f4bbd0f0caadcfe6a0bbddf)), closes [#7272](https://github.com/invertase/react-native-firebase/issues/7272)
12
+
13
+ ## [19.2.2](https://github.com/invertase/react-native-firebase/compare/v19.2.1...v19.2.2) (2024-04-13)
14
+
15
+ **Note:** Version bump only for package @react-native-firebase/messaging
16
+
6
17
  ## [19.2.1](https://github.com/invertase/react-native-firebase/compare/v19.2.0...v19.2.1) (2024-04-12)
7
18
 
8
19
  **Note:** Version bump only for package @react-native-firebase/messaging
@@ -284,6 +284,15 @@ RCT_EXPORT_METHOD(requestPermission
284
284
  if (error) {
285
285
  [RNFBSharedUtils rejectPromiseWithNSError:reject error:error];
286
286
  } else {
287
+ // if we do not attempt to register immediately, registration fails
288
+ // later unknown reason why, but this was the only difference between
289
+ // using a react-native-permissions vs built-in permissions request in
290
+ // a sequence of "request permissions" --> "register for messages" you
291
+ // only want to request permission if you want to register for
292
+ // messages, so we register directly now - see #7272
293
+ dispatch_async(dispatch_get_main_queue(), ^{
294
+ [[UIApplication sharedApplication] registerForRemoteNotifications];
295
+ });
287
296
  [self hasPermission:resolve:reject];
288
297
  }
289
298
  }];
@@ -303,8 +312,7 @@ RCT_EXPORT_METHOD(registerForRemoteNotifications
303
312
  : (RCTPromiseRejectBlock)reject) {
304
313
  #if TARGET_IPHONE_SIMULATOR
305
314
  #if !TARGET_CPU_ARM64
306
- // Do the registration on this unsupported simulator, but don't set up to wait for a token that
307
- // won't arrive
315
+ // Register on this unsupported simulator, but no waiting for a token that won't arrive
308
316
  [[UIApplication sharedApplication] registerForRemoteNotifications];
309
317
  resolve(@([RCTConvert BOOL:@(YES)]));
310
318
  return;
@@ -317,6 +325,7 @@ RCT_EXPORT_METHOD(registerForRemoteNotifications
317
325
  if (@available(iOS 10.0, *)) {
318
326
  #pragma pop
319
327
  if ([UIApplication sharedApplication].isRegisteredForRemoteNotifications == YES) {
328
+ DLog(@"RNFBMessaging registerForRemoteNotifications - already registered.");
320
329
  resolve(@([RCTConvert BOOL:@(YES)]));
321
330
  return;
322
331
  } else {
@@ -326,6 +335,32 @@ RCT_EXPORT_METHOD(registerForRemoteNotifications
326
335
  // Apple docs recommend that registerForRemoteNotifications is always called on app start
327
336
  // regardless of current status
328
337
  dispatch_async(dispatch_get_main_queue(), ^{
338
+ // Sometimes the registration never completes, which deserves separate attention in other
339
+ // areas. This area should protect itself against hanging forever regardless. Just in case,
340
+ // check in after a delay and cleanup if required
341
+ dispatch_after(
342
+ dispatch_time(DISPATCH_TIME_NOW, 10.0 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
343
+ if ([RNFBMessagingAppDelegate sharedInstance].registerPromiseResolver != nil) {
344
+ // if we got here and resolve/reject are still set, unset, log failure, reject
345
+ DLog(@"RNFBMessaging dispatch_after block: we appear to have timed out. Rejecting");
346
+ [[RNFBMessagingAppDelegate sharedInstance] setPromiseResolve:nil
347
+ andPromiseReject:nil];
348
+
349
+ [RNFBSharedUtils
350
+ rejectPromiseWithUserInfo:reject
351
+ userInfo:[@{
352
+ @"code" : @"unknown-error",
353
+ @"message" :
354
+ @"registerDeviceForRemoteMessages requested but "
355
+ @"system did not respond. Possibly missing permission."
356
+ } mutableCopy]];
357
+ return;
358
+ } else {
359
+ DLog(@"RNFBMessaging dispatch_after: registerDeviceForRemoteMessages handled.");
360
+ return;
361
+ }
362
+ });
363
+
329
364
  [[UIApplication sharedApplication] registerForRemoteNotifications];
330
365
  });
331
366
  }
package/lib/version.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // Generated by genversion.
2
- module.exports = '19.2.1';
2
+ module.exports = '19.3.0';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-native-firebase/messaging",
3
- "version": "19.2.1",
3
+ "version": "19.3.0",
4
4
  "author": "Invertase <oss@invertase.io> (http://invertase.io)",
5
5
  "description": "React Native Firebase - React Native Firebase provides native integration of Firebase Cloud Messaging (FCM) for both Android & iOS. FCM is a cost free service, allowing for server-device and device-device communication. The React Native Firebase Messaging module provides a simple JavaScript API to interact with FCM.",
6
6
  "main": "lib/index.js",
@@ -24,11 +24,11 @@
24
24
  "messaging"
25
25
  ],
26
26
  "peerDependencies": {
27
- "@react-native-firebase/app": "19.2.1",
27
+ "@react-native-firebase/app": "19.3.0",
28
28
  "expo": ">=47.0.0"
29
29
  },
30
30
  "devDependencies": {
31
- "expo": "^49.0.21"
31
+ "expo": "^50.0.15"
32
32
  },
33
33
  "peerDependenciesMeta": {
34
34
  "expo": {
@@ -38,5 +38,5 @@
38
38
  "publishConfig": {
39
39
  "access": "public"
40
40
  },
41
- "gitHead": "f36a26abe71d9c3222a32683739117a977fb7896"
41
+ "gitHead": "edac62269c1b3088cadf74586d48f68214d6e8e4"
42
42
  }