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

Служба уведомления Apple Push - для одного и того же устройства действуют несколько токенов устройства

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

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

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

Каждый раз, когда процесс повторяется, мы получаем новый, отличный регистрационный токен. Это все хорошо и хорошо, однако мы заметили, что только недавно, когда наше приложение удалено, токен устройства остается в силе после его переустановки и создается новый токен. Мы понимаем, что для устройства может существовать единственный уникальный токен.

Документация Apple также предлагает это (https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html#//apple_ref/doc/uid/TP40008194-CH100-SW12)

Форма этой фазы доверительного отношения к токенам гарантирует, что только APN генерирует токен, который он будет позже чтить, и он может убедиться, что токен, переданный ему устройством, является тем же самым токеном, который он предварительно предоставил для этого конкретного устройства И только для этого устройства.

Когда новый токен создается после переустановки и отправки на наш сервер, у нас есть два токена устройства, которые указывают на одно и то же устройство, и в результате мы отправляем несколько уведомлений на это устройство. Не понимаем ли мы документацию? Если да, то какой типичный способ справиться с переустановкой сценария?

Спасибо!

4b9b3361

Ответ 1

Мы только что провели тест. На нашем тестовом устройстве iOS 8.4.1 после переустановки нашего приложения мы получили тот же токен, тогда как на iOS 9.1 мы всегда получаем новый токен после повторной установки. Это не будет проблемой, если APNS аннулирует старые токены устройства, но, насколько я могу судить, это не так. В результате мы отправляем дубликаты уведомлений нашим пользователям на одно и то же устройство. Может потребоваться некоторое время, чтобы аннулировать старый токен?

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

Ответ 2

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

Простое исправление будет состоять только в том, чтобы наша серверная служба APNS отправляла сообщение только для того, чтобы получить последний токен APNS. Это выполнимо, если предположить, что есть еще один первичный ключ, который уникален для каждого устройства iOS. Ну, поскольку UUID больше не доступен, мы должны полагаться на идентификатор Apple Vendor ID. Эта проблема с идентификатором Apple Vendor ID - это значение, которое также может меняться со временем, поэтому обязательно учтите это.

В настоящее время мы отправляем push-уведомления только на устройства с уникальным идентификатором пользователя/пользователя. Это известно нашему приложению, как только пользователь подписал наше приложение. Таким образом, мы могли бы использовать наш идентификатор участника/пользователя, но если член/пользователь имеет несколько устройств, это означает, что если мы используем последнее значение токена APNS в качестве выигрыша, то тот же член не может иметь несколько устройств iOS, получающих push-уведомления (думаю, iPad и iPhone, довольно часто в эти дни).

Итак, при этом, когда высшее руководство хочет отправить push-уведомления на устройства, в которых не был подписан уникальный пользователь/пользователь, существует риск пересечения потоков.

Ответ 3

У нас та же проблема, что мы нашли 2 допустимых токена устройства для 1 устройства. Однако, когда мы пытались проверить, что "удаление и переустановка будет генерировать новый токен устройства, а прежний токен устройства все еще действителен", мы получили противоположный результат. А именно, новый токен устройства был сгенерирован, но прежнее устройство toke стало недействительным. Я проверил это 3/9/2016 и 3/10/2016.

Не уверен, что Apple частично устранила эту ошибку:

a) когда приложение будет удалено и переустановлено с этого момента, старое устройствоToken станет недействительным. (никаких новых проблем)

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

Похоже, нам нужно будет использовать "identifierForVendor", чтобы отличить уникальное устройство: очистка нашей регистрационной таблицы (и сохранение только самого последнего устройства), если мы видим, что 2 устройстваTokens имеют один и тот же идентификаторForVendor.

Ответ 4

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

Вы уверены в этом? 100% уверены?

По моему опыту, если вы удалите приложение, переустановите его на 99,99% времени, когда вы получите тот же токен устройства. Если вы получаете новый уникальный токен устройства каждый раз, когда вы удаляете и затем переустанавливаете приложение, это то, чего я никогда не видел за несколько лет и несколько приложений. Следовательно, возможно, что-то странное происходит.

Есть случаи, когда новый токен устройства будет генерироваться, но они редки, уверены ли вы, что вы не делаете что-то еще между деинсталляцией/переустановкой?

P.S. есть другой токен устройства для создания и сборки сборки, устраните этот фактор из ваших наблюдений - убедитесь, что вы не делаете что-то вроде установки сборки prod, а затем удаляете ее и повторно устанавливаете сборку dev или наоборот. Даже если вы делаете это, общее количество уникальных токенов dev все равно будет всего два (хотя только один из них действителен для каждой среды).