2016-05-18 2 views
1

Я хотел бы получить дату получения удаленного уведомления на устройстве iOS.Получить дату получения удаленного уведомления

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

ответ

0

Создайте и инициализируйте объект NSDate в файле doReceiveRemoteNotification. NSDate * notificationDate = [NSDate date] должен работать.

+1

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

1

В application:didReceiveRemoteNotification:fetchCompletionHandler: вашего делегата приложения, создайте NSDate с текущей датой, затем сохраните его внутри массива в NSUserSettings или непосредственно внутри.

С этим вы даже имеете историю полученных уведомлений и можете обрабатывать их позже.

application:didReceiveRemoteNotification:fetchCompletionHandler: будет звонить в фоновом режиме только тогда, когда вы добавили ключ content-available со значением 1 в полезную нагрузку уведомления.

яблочная документации:

Для нажимной уведомления, чтобы вызвать операцию загрузки, полезная нагрузка в уведомлении должна включать в себя ключ контента, доступный с его значением, установленным в 1. Когда этот ключ присутствует, система пробуждается приложение в фоновом режиме (или запускает его в фоновом режиме) и вызывает приложение делегата приложения: didReceiveRemoteNotification: fetchCompletionHandler: метод. Ваша реализация этого метода должна загружать соответствующий контент и интегрировать его в ваше приложение. https://developer.apple.com/library/prerelease/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

+0

Указывает дату, когда приложение было открыто через уведомление, а не когда уведомление было фактически получено на устройстве. –

+0

@ thefredelement Обновлен мой ответ; D –

+0

Выглядит многообещающе, я обновляю полезную нагрузку и проверю ее и соглашусь, если она работает, спасибо! –

1

Вы можете добавить настраиваемое поле даты послал-к полезной нагрузке уведомления, если вы контролируете бэк-конец, соединенный с APNS, и разобрать его в didReceiveRemoteNotification. Очевидно, это позволит вам получить дату, когда удаленное уведомление было отправлено, а не получено, но в целом разница небольшая.

Решение, предлагающее использовать ключ, доступный для контента, может быть не таким, каким вы хотите, поскольку оно запускает приложение в фоновом режиме при таких уведомлениях и может привести к тому, что ваше приложение станет верхним нарушителем батареи в Settings.app> Аккумулятор> Аккумулятор. Он также перестанет работать в режиме с низким энергопотреблением или если пользователь отключит обновление фонового приложения.

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

+0

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

+0

Если вопрос только для тестирования, притворитесь, что ваше приложение использует VoIP, пользуется сертификатом VoIP и регистрируется в PushKit. Все уведомления запустит ваше приложение в фоновом режиме, а эквивалент PushKit метода делегирования didReceiveNotification будет вызываться немедленно, всегда, без участия пользователя. –

0

Вы можете увидеть, когда получено уведомление Push, просмотрев консоль системы (а не приложение). Похоже, новые IOS версии фильтрации журнала, но если вы убиваете приложение заранее, вы увидите что-то вроде этого

Jun 1 17:55:38 Aarons-iPhone-6-Plus SpringBoard[657] <Warning>: High Priority Push: net.test.test - App killed – 
Смежные вопросы