Аналогично этому вопросу: https://stackoverflow.com/questions/6732427/how-do-i-access-remote-push-notification-data-on-applicationdidbecomeactive
Но разница в том, как получить доступ к данным уведомления, когда вы находитесь в applicationDidBecomeActive
и если вы нажали на значок приложения, а не на push-уведомление..
Поток таков: Если нажать на push-уведомление
, то сработает didReceiveRemoteNotification
, но если нажать на оригинальную иконку приложения, то сработает только applicationDidBecomeActive
и didReceiveRemoteNotification
не будет вызвано.
Я ищу последний случай, поэтому как я могу получить доступ к данным push-уведомления.
(В обоих случаях предполагается, что приложение находится в фоновом режиме и еще не убито).
Вы не можете получить удаленный push-платеж, запустив приложение с домашнего экрана.
Если данные push важны для использования приложения, загрузите их с вашего сервера после запуска приложения.
Ответ @fannheyward абсолютно правильный. Вы не можете получить полезную нагрузку, когда приложение запускается нажатием на значок приложения.
У меня есть идея, что если вы узнаете, что какое-то уведомление находится в ожидании, когда приложение запускается при нажатии на значок приложения. Зная это, ваше приложение может получить полезную нагрузку с вашего сервера.
Вы можете установить "Значок" в каждом таком уведомлении и в applicationDidBecomeActive вы можете проверить [application applicationIconBadgeNumber] > 0, чтобы знать, что какое-то уведомление активно. После получения полезной нагрузки с вашего сервера вы можете установить ее в 0, как показано ниже
[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
Обратите внимание: это означает, что при получении уведомления в вашем приложении будет отображаться значок. Я не уверен в поведении, когда значок отключен пользователем в настройках.
Если ваша цель приложение на iOS7, вы можете сделать только если приложение живет в справочный.
В настройках возможности в Xcode, вам нужно включить фоновый режимы>удаленные уведомления, и напишите ниже код.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
// save userInfo in NSUserDefaults
completionHandler( UIBackgroundFetchResultNoData );
}
Если вы хотите, чтобы проверить его, это будет полезно использовать https://github.com/acoomans/SimulatorRemoteNotifications
Для этой работы мне пришлось проверить на фоне окна выборки.
Вы должны получить уведомление в методе launchWithOptions в вашем appDelegate примерно так:
NSDictionary *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
if(remoteNotif != nil){
//Handle your notification
}