2017-01-21 5 views
2

Я включил облачную службу Firebase в моем приложении iOS без контейнеров для какао. Аналитика Firebase работает нормально. Но токен FCM получен на симуляторе, но не на реальном устройстве. На реальном устройстве я получаю ошибкуНевозможно получить токен FCM на реальном устройстве, но на тренажере

Не удалось получить по умолчанию маркер Error Domain = com.firebase.iid Code = 501 "(нуль)"

  1. Я загрузил .p12 сертификаты для разработки и prod на Firebase
  2. Я проверил идентификатор пакета для своего приложения, и что на консоли Firebase
  3. У меня есть разрешение на уведомление о подключении на моем идентификаторе приложения.

Вот мой код

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [FIRApp configure]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tokenRefreshNotification:) name:kFIRInstanceIDTokenRefreshNotification object:nil]; 
} 


- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { 

    // For iOS 10 display notification (sent via APNS) 
    [UNUserNotificationCenter currentNotificationCenter].delegate = self; 
    // For iOS 10 data message (sent via FCM) 
    [FIRMessaging messaging].remoteMessageDelegate = self; 

    [application registerForRemoteNotifications]; 

} 

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 

    [[FIRInstanceID instanceID] setAPNSToken:deviceToken type:FIRInstanceIDAPNSTokenTypeSandbox]; 

} 

- (void)tokenRefreshNotification:(NSNotification *)notification { 
    // Note that this callback will be fired everytime a new token is generated, including the first 
    // time. So if you need to retrieve the token as soon as it is available this is where that 
    // should be done. 
    NSString *refreshedToken = [[FIRInstanceID instanceID] token]; 
    NSLog(@"InstanceID token: %@", refreshedToken); 

    // Connect to FCM since connection may have failed when attempted before having a token. 
    [self connectToFcm]; 

    // TODO: If necessary send token to application server. 
} 

- (void)connectToFcm { 
    // Won't connect since there is no token 
    if (![[FIRInstanceID instanceID] token]) { 
     return; 
    } 

    // Disconnect previous FCM connection if it exists. 
    [[FIRMessaging messaging] disconnect]; 

    [[FIRMessaging messaging] connectWithCompletion:^(NSError * _Nullable error) { 
     if (error != nil) { 
      NSLog(@"Unable to connect to FCM. %@", error); 
     } else { 
      NSLog(@"Connected to FCM. FCM token - %@", [[FIRInstanceID instanceID] token]); 
     } 
    }]; 
} 


- (void)applicationDidBecomeActive:(UIApplication *)application { 
    [FBSDKAppEvents activateApp]; 

    [self connectToFcm]; 

} 

- (void)applicationDidEnterBackground:(UIApplication *)application { 

    [[FIRMessaging messaging] disconnect]; 
    NSLog(@"Disconnected from FCM"); 

} 

Пожалуйста, помогите.

+0

Отформатируйте свой код правильно, шансы получить ответ увеличиваются. – Rajat

+0

спасибо Раджат Можете ли вы мне помочь? – Swati

+0

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

ответ

1

Я получил решение своей проблемы. Дата и время устройства были неверными. Второй я изменил его на текущую дату & раз, Firebase начала давать мне токен FCM и правильно подключилась. Я также проверил push-уведомление из Firebase Notification Console. Он работает лучше, чем я себе представлял.

Смежные вопросы