получать push-уведомления, пока приложение не работает на iPhone - PullRequest
2 голосов
/ 08 февраля 2012

Я работаю над одним приложением для iPhone, которое включает push-уведомление. Как я видел во многих документах и ​​руководствах, в

предлагается зарегистрироваться для push-уведомлений.
application:(UIApplication *)application 
  didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

вроде следующего:

- (BOOL)application:(UIApplication *)application 
  didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{   
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert| UIRemoteNotificationTypeBadge|  UIRemoteNotificationTypeSound]; 

    ...
} 

теперь вопрос в том, что если приложение не было запущено (даже в фоновом режиме), когда пришло push-сообщение, оно не может обработать push-сообщение, но если я снова использую push-сообщение из области уведомлений и снова запускаю приложение, Я могу получить мое сообщение.

что мне нужно сделать, чтобы мое приложение получало push-сообщение, даже когда оно впервые обедает?

1 Ответ

7 голосов
/ 08 февраля 2012

Возможно, вы путаете понятие регистрации и получения уведомлений.Приложение не может получить push-уведомление до первого вызова метода registerForRemoteNotificationTypes:, поскольку этот метод предоставляет push-токен, который используется для отправки push-уведомлений.

Итак,Вы должны говорить о получении уведомлений в двух отдельных ситуациях, в которых они могут быть доставлены: при первом запуске приложения и во время выполнения программы.

Для обработки уведомлений первого типа необходимопроверить словарь options, отправленный на application:didFinishLaunchingWithOptions:.В следующем коде показано, как перенаправить уведомление, полученное при запуске, на метод делегата, который вызывается при получении push-уведомления, когда приложение уже запущено.

Поместите это в переопределение application:didFinishLaunchingWithOptions::

NSDictionary *pushNotificationPayload = [launchOptions valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if(pushNotificationPayload) {
    [self application:application didReceiveRemoteNotification:pushNotificationPayload];
}
...