Push-уведомление не получено, когда приложение находится в фоновом режиме в iOS 10

Я использую FCM (Firebase Cloud Messaging) для отправки push-уведомлений в iOS.

Я могу получать уведомление, когда приложение находится в состоянии переднего плана. Но когда приложение находится в фоновом режиме, уведомление не приходит. Когда приложение перейдет в состояние переднего плана, только тогда будет получено уведомление.

Мой код:

- (void)userNotificationCenter:(UNUserNotificationCenter *)center
   willPresentNotification:(UNNotification *)notification
     withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
// Print message ID.
NSDictionary *userInfo = notification.request.content.userInfo;
NSLog(@"Message ID: %@", userInfo[@"gcm.message_id"]);

// Pring full message.
NSLog(@"%@", userInfo);

if( [UIApplication sharedApplication].applicationState == UIApplicationStateInactive )
{
    NSLog( @"INACTIVE" );
    completionHandler(UNNotificationPresentationOptionAlert);
}
else if( [UIApplication sharedApplication].applicationState == UIApplicationStateBackground )
{
    NSLog( @"BACKGROUND" );
    completionHandler( UNNotificationPresentationOptionAlert );
}
else
{
    NSLog( @"FOREGROUND" );
    completionHandler( UNNotificationPresentationOptionAlert );
}}



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


}

Когда приложение находится в фоновом режиме:

- (void)userNotificationCenter:(UNUserNotificationCenter *)center
   willPresentNotification:(UNNotification *)notification
     withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler

- вообще не называется.

Я включил push-уведомления, а также удаленные уведомления в фоновых режимах в возможностях приложения. Но приложение по-прежнему не получает уведомление.

Я ответил на несколько вопросов по StackOverflow, но не смог решить проблему. Есть ли что-нибудь, что нужно добавить в iOS версии 10 или какая-то ошибка в моем коде?


person Himanth    schedule 20.09.2016    source источник
comment
Вы не получаете это только для iOS 10 или для всех других версий в фоновом режиме?   -  person AL.    schedule 21.09.2016
comment
@AL. только не получаю для iOS 10   -  person Himanth    schedule 21.09.2016
comment
Отправьте мне код, я решу проблему.   -  person user3182143    schedule 22.09.2016
comment
@ user3182143 В ios 10 нам нужно добавить новых делегатов для обработки push-уведомлений. Мой вопрос в том, что произойдет, если у меня уже есть приложение в магазине приложений. push-уведомления не работают?   -  person Ganesh Kumar    schedule 25.10.2016
comment
Да, для iOS 10 это не работает. Если у них iOS 10 на iPhone, это не сработает. Вам также необходимо написать push-кодирование в соответствии с iOS 10.   -  person user3182143    schedule 25.10.2016
comment
@ user3182143 Итак, мы должны повторно отправить мое приложение с новыми изменениями.   -  person Ganesh Kumar    schedule 25.10.2016
comment
да, брат, нам нужно сделать   -  person user3182143    schedule 25.10.2016
comment
@ user3182143 спасибо за ответ братан   -  person Ganesh Kumar    schedule 25.10.2016


Ответы (2)


Для iOS 10 нам нужно вызвать 2 метода ниже.

Для ЗАРУБЕЖНОГО состояния

- (void)userNotificationCenter:(UNUserNotificationCenter *)center  willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler  
{  
    NSLog( @"Handle push from foreground" );  
    // custom code to handle push while app is in the foreground  
    NSLog(@"%@", notification.request.content.userInfo);
    completionHandler(UNNotificationPresentationOptionAlert);
} 

Для ФОНОВОГО состояния

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler  
{  
    NSLog( @"Handle push from background or closed" );  
    // if you set a member variable in didReceiveRemoteNotification, you  will know if this is from closed or background  
    NSLog(@"%@", response.notification.request.content.userInfo);
    completionHandler();
}  

Перед этим мы должны добавить UserNotifications фреймворк и импортировать в AppDelegate.h файл

#import <UserNotifications/UserNotifications.h>  
@interface AppDelegate : UIResponder <UIApplicationDelegate,UNUserNotificationCenterDelegate>  
person user3182143    schedule 22.09.2016
comment
У меня такая же проблема. Я выполнил ваши шаги, указанные выше, но, к сожалению, он все еще не работает. Можете ли вы помочь мне? - person Darshan Karekar; 10.05.2017
comment
stackoverflow.com/questions/43694163/ - person user3182143; 10.05.2017
comment
разве вам не нужно вызывать обработчик завершения? - person Cameron E; 13.05.2017
comment
В какой ситуации он должен звонить? Я имею в виду на переднем плане или в фоновом режиме приложения? - person user3182143; 29.03.2018

Мы провели множество тестов с нашими клиентами и провели множество исследований по этой теме. iOS 10.x, особенно 10.3.x, имеет проблемы с обработкой и отображением нажатий. Единственный способ обойти проблемы - перейти на более новую версию iOS.

person Marc Gerstmair    schedule 08.01.2019