0

Я реализую push-уведомления в iOS 10. Все работает хорошо.Невозможно прослушать уведомление от NSNotificationCenter, когда приложение получило push-уведомление из фона или завершено в iOS

Но мне нужно ударить API, когда APP получил push-уведомление (не только в активном состоянии, но и в фоновом режиме/завершено).

Для этого я использую NSNotificationCenter для прослушивания уведомлений при App получил толчок уведомление, как это:

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

    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); 
    } 

    [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadTheTable" object:nil]; 

} 

И я слушаю это уведомление в ViewController.m как этот

- (void)viewDidLoad { 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadTable:) name:@"reloadTheTable" object:nil]; 
} 

- (void)reloadTable:(NSNotification *)notification 
{ 
// Calling API here 
} 

это работает отлично, когда приложение работает на переднем плане. Но не в фоновом режиме и состоянии завершения.

Есть ли какая-либо ошибка от меня или чего-то еще, что я должен реализовать?

+0

Я обновил мой ответ, пожалуйста, проверьте его сейчас – user3182143

ответ

2

С прошивкой 10, мы должны добавить рамки UserNotifications и делегировать

Итак, сначала нам нужно сделать ниже вещи в appDelegate.h

#import <UserNotifications/UserNotifications.h> 
@interface AppDelegate : UIResponder <UIApplicationDelegate,UNUserNotificationCenterDelegate> 

Для государства на первом плане

- (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); 
} 

Это для состояния ПРЕДПОСЫЛКИ.

Так вот вам нужно добавить на уведомление

- (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); 

    //Adding notification here 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadTheTable" object:nil]; 
} 

didReciveRemoteNotificationNotCalled in iOS 10

+0

Это нормально для меня, но не в состоянии вызвать другой метод, когда приложение находится в фоновом режиме – Himanth

+0

Теперь проверьте это. Когда это работает, дайте мне знать. – user3182143

+0

Работает она или нет? – user3182143