Ответ 1
Вы не можете получить полезную нагрузку отдаленного push, запустив приложение из главного экрана.
Если push-данные важны для использования приложений, загрузите их со своего сервера после запуска приложения.
Аналогично этому вопросу: Как получить доступ к данным удаленного push-уведомления на applicationDidBecomeActive?
Но как вы можете получить доступ к данным уведомления, когда находитесь в applicationDidBecomeActive
и , если вы нажали на значок приложения вместо push-уведомления.
Поток: Если вы нажмете на push notification
, тогда будет срабатывать didReceiveRemoteNotification
, но если вы нажмете на значок оригинального приложения, будет запущен только applicationDidBecomeActive
, а didReceiveRemoteNotification
не будет вызываться.
Я ищу более поздний случай, так как я могу получить доступ к данным push-уведомлений.
(Оба варианта предполагают, что приложение находится в фоновом режиме и еще не убито.)
Вы не можете получить полезную нагрузку отдаленного push, запустив приложение из главного экрана.
Если push-данные важны для использования приложений, загрузите их со своего сервера после запуска приложения.
@fannheyward ответ абсолютно правильный. Вы не можете получить полезную нагрузку, когда приложение запущено, нажав значок приложения.
У меня есть идея, что если вы узнаете, что какое-то уведомление ожидается, когда приложение запущено, нажав значок приложения. Благодаря этим знаниям ваше приложение может извлекать полезную нагрузку с вашего сервера.
Вы можете установить "Значок" в каждом таком уведомлении, а на applicationDidBecomeActive вы можете проверить [application applicationIconBadgeNumber] > 0, чтобы знать, что какое-то уведомление активно. После получения полезной нагрузки с вашего сервера вы можете установить ее как 0 ниже
[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
Обратите внимание: это означает, что ваше приложение будет иметь значок, отображаемый над ним при получении уведомления. Я не уверен в поведении, когда значок отключен пользователем из настроек.
Если цель вашего приложения превышает iOS7, вы можете делать это только в том случае, если приложение активно в backgroud.
В настройках возможностей в 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
}