Нет запуска APNS, если запущен позже? - PullRequest
3 голосов
/ 06 января 2010

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

Я получаю полезную нагрузку уведомления во время "didFinishLaunchingWithOptions" или "didReceiveRemoteNotification". В "didFinishLaunchingWithOptions" я проверяю

NSDictionary* userInfo = [launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];
NSDictionary *apsInfo = [userInfo objectForKey:@"aps"];

для получения параметров. В "didReceiveRemoteNotification" apsInfo является производным от NSDictionary * apsInfo = [userInfo objectForKey: @ "aps"];

Это работает нормально, за одним исключением: если я игнорирую всплывающее окно с уведомлением и нажимаю «Закрыть» вместо «Просмотр» и, наконец, позже запускаю свое приложение из панели запуска, apsInfo больше не существует. Это "по замыслу"? Доступна ли информация об уведомлении, только если нажать «Просмотр» или запустить приложение из диалогового окна с информацией об уведомлении?

Привет

Ответы [ 3 ]

0 голосов
/ 19 января 2010

Кажется, так оно и есть. Я предполагаю, что мы все должны связаться с нашими серверами, чтобы получить полезную нагрузку уведомления (снова). Это довольно нелепо, поскольку полезная нагрузка уведомления не превышает 256 байт, поэтому Apple могла бы предоставить средство для сохранения полезной нагрузки уведомления для последующего использования. По крайней мере, вы можете получить информацию, отправленную вам в элементе «badge». Это сохранено. Остальное, к сожалению, потеряно ...

0 голосов
/ 04 мая 2011

У меня есть идея, хотя у меня нет времени на ее реализацию.

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

  2. В следующий раз, когда какой-либо пользователь откроет приложение (может быть непосредственно из Push-уведомления или позже, нажав значок приложения), вы пингуете сервер, чтобы узнать, открывал ли этот пользователь приложение с момента Push-уведомления послал.

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

Просто идея на данный момент, но я думаю, что это сработает. Просто зависит, стоит ли тратить на это время.

0 голосов
/ 18 января 2010

Та же проблема. На телефон поступило уведомление, и пользователь нажал «Закрыть» вместо «Просмотр в окне сообщения». Значок появляется на значке приложения. Отлично сработано. Теперь откройте приложение и, как говорится в документации Apple: «используйте didFinishLaunchingWithOptions , когда вы хотите launchOptions , заполненную уведомлением, и бла, бла ...»

Проблема в том, что при запуске didFinishLaunchingWithOptions launchOptions по-прежнему пуст.

Перепробовал множество комбинаций решения: безрезультатно. Ошибка SDK?

ОБНОВЛЕНИЕ ========================================== В документации Apple в didFinishLaunchingWithOptions написано: «Словарь равен нулю, если пользователь запустил приложение, нажав на значок приложения». *

Итак, я понятия не имею, возможно ли вообще получить тело уведомления, когда приложение запускается после того, как пользователь закрыл окно с уведомлением (и на значке приложения есть значок). Тело уведомления теряется в пространстве, когда пользователь закрывает окно уведомлений? UPDATE ======================================= После дальнейшего расследования я нашел ответ. Да, недоставленные данные будут потеряны. Не нужно ждать, пока пользователь будет в сети, нет хранилища, нет информации о доставке уведомлений. APNS в неоплачиваемой службе, и Apple не несет ответственности за 100% доставку данных.

...