4

Когда iOS8.2-приложение работает в фоновом режиме, он не получает никакого уведомления толчка,CloudKit Push Notification, приложение работает на фоне

в то время как, если он работает на переднем плане, он получает уведомление толчка мелкого ,

Любая идея, что происходит?

Запуск в режиме CloudKit Development, подписка для добавления, редактирования, и удаления, а также с использованием следующих didReceiveRemoteNotification:

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 
{ 
    NSLog(@"Push received."); 

    NSDictionary * apsDict = [userInfo objectForKey:@"aps"]; 

    NSString * alertText = [apsDict objectForKey:@"alert"]; 

    //TODO: get the record information from the notification and create the appropriate message string. 

    if(application.applicationState == UIApplicationStateActive) { 
     UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Notification" message:alertText delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil]; 
     [alert show]; 
    } else { 

     if([application currentUserNotificationSettings].types & UIUserNotificationTypeAlert) { 
      UILocalNotification * localNotification = [[UILocalNotification alloc] init]; 
      localNotification.alertBody = NSLocalizedString(@"alert body", nil);; 
      localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:2]; 
      [application presentLocalNotificationNow:localNotification]; 
     } 
    } 

    completionHandler(UIBackgroundFetchResultNoData); 
} 

ответ

4

Когда вы идете к вашим возможностям настройки приложения, у вас есть удаленные уведомления включен для фона режимы?

Смотрите этот скриншот: enter image description here

Кроме того, вы зарегистрировали для всех типов уведомлений, как это:

application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: .Alert | .Badge | .Sound, categories: nil)) 
    application.registerForRemoteNotifications() 

И в вашей подписки, вы отправить alertBody или alertLocalizationKey для CKNotificationInfo? Если вы это сделаете, вы уже получите уведомление от ОС, и вам не нужно настраивать локальное уведомление.

Обновление: Как упоминалось ниже в Портоне, эта проблема была решена путем заполнения alertBody.

+0

Hi @Edwin yes Фоновая выборка и удаленные уведомления включены. Что-нибудь еще очевидное, что может быть пропущено? – Porton

+0

В вашей подписке вы отправляете alertBody или alertLocalizationKey для CKNotificationInfo? Затем вы уже получите уведомление от ОС, и вам не нужно настраивать локальное уведомление. Но тогда все же должны были появиться уведомления. Особенно, когда вы говорите, что они приходят, когда приложение активно. –

+0

Вы зарегистрированы для всех типов? см. дополнительный комментарий в awnser –

4

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

Первоначально я не установил alertBody, так как я не хотел, чтобы пользователь видел сообщение, когда данные CloudKit изменились.

Однако, как указано выше, без alertBody, метод didReceiveRemoteNotification не вызывается, когда приложение не находится на переднем плане.

Я, наконец, попытался установить alertBody быть пустой строкой:

CKNotificationInfo *notificationInfo = [CKNotificationInfo new]; 
notificationInfo.alertBody = @""; 

Сейчас он работает: didReceiveRemoteNotification называется, даже если приложение не активно и не предупредительное сообщение не будет показано пользователю.