Токен устройства APNS не был установлен до получения токена FCM для идентификатора отправителя - React Native Firebase - PullRequest
1 голос
/ 05 октября 2019

Я следовал этому руководству по настройке уведомлений Remote Push в моем приложении-реактиве с использованиемact-native-firebase версии 5.2.0. После того как я все настроил и запустил приложение, я получаю сообщение об ошибке:

Не установлен токен устройства APNS перед извлечением токена FCM для идентификатора отправителя ''. Уведомления на этот токен FCM не будут передаваться через APNS. Обязательно восстановите токен FCM после того, как токен APNS установлен.

Попытка выяснить, как решить эту проблему, но не вполне удалась. Работает на реактивном: 0.61.2, реактивном: firebase: 5.2.0

Ниже приведены мой AppDelegate.m

#import "AppDelegate.h"

#import <React/RCTBridge.h>
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>
#import <RNCPushNotificationIOS.h>
#import <UserNotifications/UserNotifications.h>
#import <Firebase.h>

@import Firebase;
@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  [FIRApp configure];
  RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
  RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
                                                   moduleName:@"helloworld"
                                            initialProperties:nil];

  rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];

  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
  UIViewController *rootViewController = [UIViewController new];
  rootViewController.view = rootView;
  self.window.rootViewController = rootViewController;
  [self.window makeKeyAndVisible];

  // define UNUserNotificationCenter
  UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
  center.delegate = self;

  return YES;
}

- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
  return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#else
  return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif
}

// Required to register for notifications
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
  [RNCPushNotificationIOS didRegisterUserNotificationSettings:notificationSettings];
}
// Required for the register event.
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
  [RNCPushNotificationIOS didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
// Required for the notification event. You must call the completion handler after handling the remote notification.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
  [RNCPushNotificationIOS didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
}
// Required for the registrationError event.
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
  [RNCPushNotificationIOS didFailToRegisterForRemoteNotificationsWithError:error];
}
// Required for the localNotification event.
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
  [RNCPushNotificationIOS didReceiveLocalNotification:notification];
}

//Called when a notification is delivered to a foreground app.
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler
{
  NSLog(@"User Info : %@",notification.request.content.userInfo);
  completionHandler(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge);
}


@end

и поиск токенов в моем App.js:

const messaging = firebase.messaging();

messaging.hasPermission()
  .then((enabled) => {
    if (enabled) {
      messaging.getToken()
        .then(token => { console.log("+++++ TOKEN ++++++" + token) })
        .catch(error => { console.log(" +++++ ERROR GT +++++ " + error) })
    } else {
      messaging.requestPermission()
        .then(() => { console.log("+++ PERMISSION REQUESTED +++++") })
        .catch(error => { console.log(" +++++ ERROR RP ++++ " + error) })
    }

  })
  .catch(error => { console.log(" +++++ ERROR +++++ " + error) });

Любая помощь будет высоко ценится! Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Короткий ответ , перезагрузил компьютер, и он снова заработал.

У меня была такая же ошибка при обновлении реактивной версии 0.59.9 до 0.61.2.

Я создал новый проект с нуля, используя react-native init, а затем изменил его, добавив в него свой собственный конфиг. Наконец, я скопировал файлы в каталог, где находился исходный проект, и обработал необходимые изменения и конфликты.

Push-уведомления просто перестали работать на iOS, хотя я мог видеть, что не было никаких изменений вродной код iOS, который может вызвать это.

Я удалил node_modules, ios/build и ios/Pods, перезагрузил компьютер, а затем переустановил все зависимости и уведомления снова заработали.

I 'Я не уверен, почему, но все же делюсь, если кто-то еще сталкивается с той же ошибкой.

0 голосов
/ 05 октября 2019

Мне удалось решить проблему: честно говоря, все было довольно просто. У моего iPhone была проблема с подключением к Интернету, и я исправил это, и эта проблема была исправлена ​​тоже! :)

...