2013-02-13 7 views
19

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

  • пользователь устанавливает приложение из AppStore
  • пользователь регистрируется на нашем приложении, и мы их зарегистрировать для уведомлений
  • пользователь удаляет приложение из своего устройства
  • пользователь переустановит приложение из AppStore
  • пользователь получает уведомление, даже если они не начали приложение вверх еще, вошли в систему, и т.д.

Мое понимание архитектуры APN заключалось в том, что как только ваше приложение будет удалено с вашего устройства, оно будет отменено с APN самой ОС. Повторная установка приложения не приведет к повторному включению уведомлений, пока вы не назовете «registerForRemoteNotificationTypes», поэтому, если записка была отправлена ​​на устройство с использованием старого токена, APN не отправили бы его, поскольку указанный выше метод не был вызван.

Это неточно?

+1

По моему опыту, токен может оставаться неизменным после переустановки. – Eduardo

ответ

20

Токен остается неизменным. Это одинаково для всех приложений на устройстве. Он изменяется только при изменении версии ОС. Однако это все еще не объясняет странное поведение, с которым вы столкнулись.

Я считаю, что только после того, как Apple определит, что приложение было удалено с устройства (что обычно происходит при отправке уведомления о приложении на конкретное устройство после его удаления), он отменяет регистрацию приложения. Если приложению на устройстве не было отправлено никаких уведомлений, которые удалили приложение между временем удаления и временем новой установки, Apple не знает, что устройство удалило приложение, и поэтому оно все еще зарегистрировано для APNS.

Поведение службы обратной связи поддерживает мою теорию - если вы удалите приложение и вызовите службу обратной связи, вы не получите токен устройства, удалив приложение. Только после того, как вы попытаетесь отправить уведомление на это устройство, Apple обнаружит удаление и вернет этот токен устройства в службу обратной связи.

Последнее, что я должен добавить: если удаленное приложение является последним на устройстве, зарегистрированном для push-уведомлений, служба APN никогда не узнает, что приложение было удалено, и поэтому оно все равно будет зарегистрировано для APN после переустановки.

+0

Да, после некоторых испытаний я подозреваю, что это так. Я предполагаю, что это говорит о том, что вы проверяете службу обратной связи несколько раз в день, чтобы удалить токены устройства. Не уверен, что я следую тому, что вы имеете в виду в последнем абзаце. – Vickram

+0

@Vjayus Прежде всего, проверка службы обратной связи не решит вашу проблему. Если вы не отправляете уведомление на устройство во время удаления приложения, служба APN не будет знать, что она удалена, а вызов службы обратной связи не изменит ее. Вам не нужно вызывать службу обратной связи несколько раз в день, если вы не отправляете каждый день несколько сообщений на одни и те же устройства. – Eran

+0

@ Vjayus В моем последнем абзаце говорится о состоянии Apple в документации APN.Если после удаления приложения на вашем устройстве нет установленных приложений, зарегистрированных в Push Notifications, служба APN никогда не обнаружит, что ваше приложение было удалено с устройства. Это вряд ли произойдет, так как многие популярные приложения регистрируются для отправки уведомлений. – Eran

9

При удалении приложения ОС не «отменяет» его из APNS. Вы должны отправить уведомление на устройство, которое удалило приложение, чтобы «удалить его». Это может занять несколько попыток от APNS, пока не выяснит, что приложение было удалено.