Подтвердить что ты не робот

IOS Push Notification - Как получить данные уведомления при нажатии на значок приложения вместо уведомления

Аналогично этому вопросу: Как получить доступ к данным удаленного push-уведомления на applicationDidBecomeActive?

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

Поток: Если вы нажмете на push notification, тогда будет срабатывать didReceiveRemoteNotification, но если вы нажмете на значок оригинального приложения, будет запущен только applicationDidBecomeActive, а didReceiveRemoteNotification не будет вызываться.

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

(Оба варианта предполагают, что приложение находится в фоновом режиме и еще не убито.)

4b9b3361

Ответ 1

Вы не можете получить полезную нагрузку отдаленного push, запустив приложение из главного экрана.

Если push-данные важны для использования приложений, загрузите их со своего сервера после запуска приложения.

Ответ 2

@fannheyward ответ абсолютно правильный. Вы не можете получить полезную нагрузку, когда приложение запущено, нажав значок приложения.

У меня есть идея, что если вы узнаете, что какое-то уведомление ожидается, когда приложение запущено, нажав значок приложения. Благодаря этим знаниям ваше приложение может извлекать полезную нагрузку с вашего сервера.

Вы можете установить "Значок" в каждом таком уведомлении, а на applicationDidBecomeActive вы можете проверить [application applicationIconBadgeNumber] > 0, чтобы знать, что какое-то уведомление активно. После получения полезной нагрузки с вашего сервера вы можете установить ее как 0 ниже

[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

Обратите внимание: это означает, что ваше приложение будет иметь значок, отображаемый над ним при получении уведомления. Я не уверен в поведении, когда значок отключен пользователем из настроек.

Ответ 3

Если цель вашего приложения превышает 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

  • На стороне сервера убедитесь, что установлено свойство content-available со значением 1

Для этого я также должен был проверить поле фоновой выборки.

Ответ 4

Вы должны получить уведомление в методе launchWithOptions в appDelegate примерно так:

NSDictionary *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];   

    if(remoteNotif != nil){  
        //Handle your notification   
    }