2016-05-31 2 views
5

Я интегрирую уведомление FCM и облачные сообщения в своем приложении. Я выполнил точно такие же шаги, упомянутые в документе firebase. Даже я попытался с примером кода, данным FCM. он просто бросает некоторые предупреждения как <FIRInstanceID/WARNING> Failed to fetch APNS token Error Domain=com.firebase.iid Code=1001 "The operation couldn’t be completed. and <FIRMessaging/WARNING> FIRMessaging registration is not ready with auth credentials.Уведомление FCM не работает в ios

Может кто-нибудь помочь мне разобраться. Я занимаюсь поиском в Интернете с одной недели, но ничего полезного я не получил. Мой код написан в Appdelegate.m is

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Register for remote notifications 
    if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_7_1) { 
     // iOS 7.1 or earlier 
     UIRemoteNotificationType allNotificationTypes = 
     (UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge); 
     [application registerForRemoteNotificationTypes:allNotificationTypes]; 
    } else { 
     // iOS 8 or later 
     // [END_EXCLUDE] 
     UIUserNotificationType allNotificationTypes = 
     (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge); 
     UIUserNotificationSettings *settings = 
     [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil]; 
     [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; 
     [[UIApplication sharedApplication] registerForRemoteNotifications]; 
    } 

    // [START configure_firebase] 
    [FIRApp configure]; 
    // [END configure_firebase] 

    // Add observer for InstanceID token refresh callback. 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tokenRefreshNotification:) 
               name:kFIRInstanceIDTokenRefreshNotification object:nil]; 
    return YES; 
} 

// [START receive_message] 
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { 
    // If you are receiving a notification message while your app is in the background, 
    // this callback will not be fired till the user taps on the notification launching the application. 
    // TODO: Handle data of notification 

    // Print message ID. 
    NSLog(@"Message ID: %@", userInfo[@"gcm.message_id"]); 

    // Pring full message. 
    NSLog(@"%@", userInfo); 
} 
// [END receive_message] 

// [START refresh_token] 
- (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 appliation server. 
} 
// [END refresh_token] 

// [START connect_to_fcm] 
- (void)connectToFcm { 
    [[FIRMessaging messaging] connectWithCompletion:^(NSError * _Nullable error) { 
     if (error != nil) { 
      NSLog(@"Unable to connect to FCM. %@", error); 
     } else { 
      NSLog(@"Connected to FCM."); 
     } 
    }]; 
} 
// [END connect_to_fcm] 

- (void)applicationDidBecomeActive:(UIApplication *)application { 
    [self connectToFcm]; 
} 

// [START disconnect_from_fcm] 
- (void)applicationDidEnterBackground:(UIApplication *)application { 
    [[FIRMessaging messaging] disconnect]; 
    NSLog(@"Disconnected from FCM"); 
} 
// [END disconnect_from_fcm] 

Надежда, чтобы получить ответ в ближайшее время. Спасибо заранее!

+0

Как вы отправляете сообщения? Используете консоль firebase и настраиваете таргетинг на все устройства? Вы добавили GoogleService-Info.plist? Вы также можете попробовать выполнить приложение: didFailToRegisterForRemoteNotificationsWithError для получения дополнительной информации – Chris

+0

Я отправляю сообщения через консоль firebase (уведомление), и я добавил googleService-Info.plist. didFailtoRegister не получает вызов. я получаю токен устройства, но не уведомляю об устройстве – ios

+0

и yaa, я нацелен на одно устройство, а также помещаю маркер регистрации FCM в требуемое поле. В консоли firebase состояние сообщения завершено, но нет push-уведомления на устройстве. Я проверил с обоими состояниями, то есть с приложением в фоновом режиме и переднем плане. – ios

ответ

0

Я делал то же самое с моим приложением для iOS. FCM и GCM НЕ РАБОТАЮТ с iOS. Независимо от того, что кто-то говорит, нет никаких шансов, что он сработает. Я провожу 2 недели и всюду в сети спрашиваю и смотрю сообщение. iOS будет принимать только уведомление APNS push. Сохраните себе головную боль и начните с приложений.

EDIT: Здесь находится новейший репозиторий для FCM. Дайте этому выстрел и посмотрите, что из этого выйдет. https://github.com/firebase/quickstart-ios Кажется немного отличающимся от того, который я пробовал, когда работал над версией iOS. @Chris, это ветка кода, которую вы использовали для реализации вашей версии?

+0

FCM делегирует APNS, если приложение неактивно. Я успешно отправил push-уведомление с консоли firebase на мой iphone (симулятор не поддерживает push-уведомления) – Chris

+0

Вы используете номер APNS или ваш токен устройства GCM/FCM. – MNM

+0

Потому что, если вы просто используете GCM, пожалуйста, сделайте полный учебник с пошаговым процессом, чтобы выполнить это, потому что я хотел бы знать, как это сделать. – MNM

0

У меня также такой же выпуск. Я получаю сообщение «Подключено к FCM» и токен, и кажется, что все прекрасно интегрировано, но не может получать уведомления.

Тем не менее, я получил уведомление сразу, но после этого без изменения кода и изменений или удаления сертификата я не могу получить никаких дальнейших уведомлений.

Проверьте мой код здесь, это приложение cocos2d.

func didLoadFromCCB() 
    { 
    ... 
    setupPushNotification() 
} 

func setupPushNotification() { 
     let application = UIApplication.sharedApplication() 

     // Register for remote notifications 
     if #available(iOS 8.0, *) { 
      let settings: UIUserNotificationSettings = 
      UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil) 
      application.registerUserNotificationSettings(settings) 
      application.registerForRemoteNotifications() 
     } else { 
      // Fallback 
      let types: UIRemoteNotificationType = [.Alert, .Badge, .Sound] 
      application.registerForRemoteNotificationTypes(types) 
     } 

     FIRApp.configure() 

     // Add observer for InstanceID token refresh callback. 
     NSNotificationCenter.defaultCenter().addObserver(self, selector: "tokenRefreshNotification:", 
      name: kFIRInstanceIDTokenRefreshNotification, object: nil) 

     NSNotificationCenter.defaultCenter().addObserver(self, selector: "didBecomeActive:", name: UIApplicationDidBecomeActiveNotification, object: nil) 
     NSNotificationCenter.defaultCenter().addObserver(self, selector: "didEnterBackground:", name: UIApplicationDidEnterBackgroundNotification, object: nil) 
    } 


// [START refresh_token] 
    func tokenRefreshNotification(notification: NSNotification) { 
     let refreshedToken = FIRInstanceID.instanceID().token()! 
     print("InstanceID token: \(refreshedToken)") 

     // Connect to FCM since connection may have failed when attempted before having a token. 
     connectToFcm() 
    } 
    // [END refresh_token] 

    // [START connect_to_fcm] 
    func connectToFcm() { 
     FIRMessaging.messaging().connectWithCompletion { (error) in 
      if (error != nil) { 
       print("Unable to connect with FCM. \(error)") 
      } else { 
       print("Connected to FCM.") 
      } 
     } 
    } 
    // [END connect_to_fcm] 

func didBecomeActive(application:UIApplication) { 
     NSLog("Did Become Active") 
     connectToFcm() 
    } 

    func didEnterBackground(application: UIApplication) { 
     NSLog("Did enter background") 
     FIRMessaging.messaging().disconnect() 
     NSLog("Disconnected from FCM.") 
    } 
} 

Я не знаю, как я получил это только одно правильное уведомление, после чего оно превратилось в таблицы. :(

Позвольте мне знать, как решить эту проблему.,

+0

Положите это на другой вопрос не здесь – MNM

0

попробуйте отправить

curl --header "Authorization: key={YOUR_API_KEY}" --header Content-Type:"application/json" https://fcm.googleapis.com/fcm/send -d "{\"to\":\"{YOUR_DEVICE_TOKEN}\",\"content_available\":true,\"priority\":\"high\",\"notification\":{\"title\":\"TEST\",\"sound\":\"default\",\"body\":\"IT WORKS!\",\"badge\":1}}" 

Это работает для меня (Очевидно, что зарегистрироваться для получения уведомлений кнопочных сначала. n распечатать маркер устройства)

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