2015-04-19 2 views
4

Я применил метод UIApplicationDelegate-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler для обработки push-уведомлений, он отлично работает. В некоторых ситуациях мне нужно получить полезную нагрузку push-уведомления. Но иногда этот метод делегирования не вызывается.iOS извлекать полезную нагрузку удаленного уведомления

У меня есть вопрос о получении полезной нагрузки (userInfo) в этом сценарии:

приложение работает либо в фоновом режиме или не запущен. Приложение получило push-уведомление, отображается баннер, воспроизводится звук, отображается сообщение, значок значка приложения увеличивается, а уведомление push можно увидеть в центрах уведомлений iOS. Если пользователь удаляет уведомление, когда оно отображается или в центре уведомлений, приложение запускается, и вызывается метод didReceiveRemoteNotification:.

Однако, если пользователь просто нажмите на значок приложения и запустить приложение в нормальных отношениях, метод не вызывается, и я не могу извлечь userInfo.

От компании Apple documentation on handling push notifications:

Уведомление подается, когда приложение не работает на переднем плане. В этом случае система представляет уведомление, отображая предупреждение, значки значка, возможно, воспроизводит звук и, возможно, отображает одну или несколько кнопок действий для пользователя.

Пользователь вводит пользовательскую кнопку действия в уведомлении iOS 8. В этом случае iOS вызывает любое приложение: handleActionWithIdentifier: forRemoteNotification: completeHandler: или application: handleActionWithIdentifier: forLocalNotification: completeHandler :. В обоих методах вы получаете идентификатор действия, чтобы вы могли определить, какую кнопку пользователь прослушивал. Вы также получаете либо удаленный, либо локальный объект уведомления, чтобы вы могли получить любую информацию, необходимую для обработки действия.

Пользователь вводит кнопку по умолчанию в предупреждении или указывает (или нажимает) значок приложения. Если нажата кнопка действия по умолчанию (на устройстве под управлением iOS), система запускает приложение, и приложение вызывает приложение своего делегата: метод didFinishLaunchingWithOptions: метод, передача в полезной нагрузке уведомления (для удаленных уведомлений) или объект локального уведомления (для местные уведомления). Хотя приложение: didFinishLaunchingWithOptions: не лучшее место для обработки уведомления, получение полезной нагрузки в этот момент дает вам возможность начать процесс обновления до вызова метода обработчика.

Если уведомление является удаленным, система также вызывает приложение: didReceiveRemoteNotification: fetchCompletionHandler :.

Если значок приложения щелкнут на компьютере под управлением ОС X, приложение вызывает метод делегирования делегата: DidFinishLaunching: метод, в котором делегат может получить полезную нагрузку удаленного уведомления. Если значок приложения отображается на устройстве под управлением iOS, приложение вызывает тот же метод, но не предоставляет никакой информации об уведомлении.

Выделенная часть своего рода говорить не существует очевидный способ получить доступ к полезной информации нажимного уведомления таким образом. Так есть способ обойти эту проблему?

Спасибо!

+0

Вы можете использовать молчаливое уведомление? –

ответ

3

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

0

Вы можете использовать молчащие push-уведомления, если вы хотите отправить пользовательские данные (максимум 2048 байт) или команды в свое мобильное приложение. В push-уведомлении установлен «контент-доступный» до 1, поэтому вы получаете некоторое время для обработки данных, а также добавляете свой пользовательский контент в уведомление.

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

Вещи, которых я больше всего ненавижу, - это визуальные push-уведомления, такие как «у вас есть новое сообщение», на которые я иногда нажимаю, когда нет подключения к данным, и приложение не покажет мне сообщение ... Вы можете решить эту проблему путем отправки молчаливого push-уведомления с данными и только если данные могут быть получены с сервера или сохранены правильно, если вы можете отправить все это в уведомлении, вы устанавливаете локальное уведомление.

Выбирайте между визуальными и бесшумными уведомлениями о намерениях мудро, только мой совет.

Проверьте следующую ссылку для получения дополнительной информации официального Apple: https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CreatingtheNotificationPayload.html

Смежные вопросы