подписаться ToTopi c iOS реагировать на родную базу - PullRequest
0 голосов
/ 24 января 2020

Когда я пытаюсь подписаться на устройство topi c в iOS (iPhone), оно странным образом завершается неудачей ...

При отладке, когда код достигает messaging().subscribeToTopic('adminDevices');, он не включается go без каких-либо ошибок или предупреждений. Если я получу от почтальона информацию о токене firebase, то он не будет подписан на topi c, а вместо этого, если я запускаю приложение с android, устройство подпишется на topi c. У меня есть разрешение, и у меня есть токен FCM, я пытаюсь подписаться после этих операций, и когда я отправляю сообщение с токеном, он работает.

Другие функции messaging() работают правильно. Я уже пытался переместить его в приложении. js и до и после getToken() это мой appdelegate.m

#import <Firebase/Firebase.h>
#import "FirebaseMessaging.h"
#import <Firebase.h>
#import <UserNotifications/UserNotifications.h>
#import <FirebaseMessaging/FirebaseMessaging.h>
#import <React/RCTBridge.h>
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
      [FIRApp configure];
        [FIRMessaging messaging].delegate = self;
        if ([UNUserNotificationCenter class] != nil) {
          [UNUserNotificationCenter currentNotificationCenter].delegate = self;
          UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
          UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
          [[UNUserNotificationCenter currentNotificationCenter]
            requestAuthorizationWithOptions:authOptions
            completionHandler:^(BOOL granted, NSError * _Nullable error) {
            }];
        } else {
          UIUserNotificationType allNotificationTypes =
          (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
          UIUserNotificationSettings *settings =
          [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
          [application registerUserNotificationSettings:settings];
        }

       [application registerForRemoteNotifications];

       [[FIRInstanceID instanceID] instanceIDWithHandler:^(FIRInstanceIDResult * _Nullable result,
                                                           NSError * _Nullable error) {
         if (error != nil) {
           NSLog(@"Error fetching remote instance ID: %@", error);
         } else {
           NSLog(@"Remote instance ID token: %@", result.token);
           NSString* message =
           [NSString stringWithFormat:@"Remote InstanceID token: %@", result.token];
         }
       }];
  RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
  RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
                                                   moduleName:@"appName"
                                            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];
  return YES;
}

- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken {

  NSLog(@"FCM registration token: %@", fcmToken);
  NSDictionary *dataDict = [NSDictionary dictionaryWithObject:fcmToken forKey:@"token"];
  [[NSNotificationCenter defaultCenter] postNotificationName:
   @"FCMToken" object:nil userInfo:dataDict];
  // TODO: If necessary send token to application server.
  // Note: This callback is fired at each app startup and whenever a new token is generated.
}

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

@end

Вкл. Android все работает правильно.

Спасибо

...