Токен устройства APN уникален для каждого отдельного приложения? - PullRequest
76 голосов
/ 26 февраля 2010

У меня есть два приложения в магазине iTunes - в обоих реализованы push-уведомления. Когда я тестировал отправку уведомлений этим рабочим приложениям, я заметил, что push-файл, предназначенный для приложения A, был назван, и открыл приложение B.

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

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

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

Должен ли маркер устройства быть уникальным для каждого приложения? Если да, то можете представить, как мой тестовый телефон отправлял на мой сервер один и тот же токен устройства для обоих приложений. Имейте в виду, что это из двух приложений, которые в настоящее время находятся в магазине приложений.

Спасибо за любую помощь!

Ответы [ 6 ]

90 голосов
/ 26 февраля 2010

ПРИМЕЧАНИЕ : это старый ответ, который верен только для iOS <= 6. См. <a href="https://stackoverflow.com/a/20111644/289319"> ответ user1641761 для текущего подхода.

Разобрался. Маркеры устройств НЕ являются уникальными для сопряжения телефона с приложением. Они уникальны только для телефона. Если у вас есть несколько приложений с push на одном телефоне, они все будут использовать один и тот же токен устройства. Сертификат, который вы используете для отправки уведомления, будет определять, к какому приложению оно отправляется.

51 голосов
/ 21 ноября 2013

iOS 7 справляется с этим по-другому. Сейчас УНИКАЛЬНО.

Пожалуйста, смотрите пункт 1 в этой статье: http://urbanairship.com/blog/2013/10/03/how-ios-7-handles-push-differently

"До iOS 7 токен устройства был одинаковым во всех установках приложений на данном устройстве. Различные приложения на вашем телефоне, будь то Tap Tap Revenge или USA Today, будут использовать один и тот же адрес, то есть токен устройства, для перенаправьте push-уведомление к вам. Учетные данные безопасности, которые вы связываете с сообщением, гарантируют, что оно попадет в нужное приложение. В iOS 7 Apple сделала еще один шаг и убедилась, что токены устройств теперь отличаются в каждой установке приложения Это помогает в дальнейшем защитить конфиденциальность пользователей, удалив другой идентификатор уровня телефона. "

Смотрите также токен устройства ios 7 отличается для одного устройства

15 голосов
/ 11 декабря 2013

Я делюсь своим пониманием и несколькими ответами от разработчиков Apple:

  • Токен устройства
    • Маркер устройства - это уникальный идентификатор устройства.
    • APN генерирует маркер устройства с использованием уникального сертификата устройства (возможно, с использованием профиля обеспечения)
    • Маркер устройства может быть изменен. Поэтому обязательно отправляйте обновленный токен устройства на сервер каждый раз.
    • Маркер устройства одинаков для всех приложений на устройстве.
    • Это зависит от устройства, а не от приложения.
    • Токен устройства может отличаться для песочницы и производства.
      • На основе профиля обеспечения (песочница или производство) APN могут генерировать разные токены устройства для песочницы и производства для одного и того же устройства.
    • Тогда, как push-уведомление дифференцируется на устройстве? Для какого приложения это?
      • Это делается на основе идентификатора приложения и SSL-сертификата, установленного на сервере (с помощью которого уведомление отправляется на сервер APNs).
  • Ссылки
8 голосов
/ 02 ноября 2011

При этом помните, что Apple оставляет за собой право менять устройства APNToken по своему усмотрению, поэтому не используйте их для однозначной идентификации устройства / пользователя.

1 голос
/ 27 июля 2017

Маркер устройства для push-уведомлений зависит от приложения. Не зависит от устройства. т.е. токен устройства будет отличаться и уникален для нескольких приложений на одном устройстве.

По словам яблока,

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

  • Включить удаленные уведомления.

  • Зарегистрируйтесь в службе push-уведомлений Apple (APN) и получите токен устройства для конкретного приложения.

  • Отправьте токен устройства на сервер поставщика уведомлений.

  • Реализация поддержки для обработки входящих удаленных уведомлений.

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

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

Вы можете ссылаться на яблочный документ здесь Руководство по программированию локальных и удаленных уведомлений

0 голосов
/ 24 декабря 2015

Вы не можете использовать токен в качестве уникального идентификатора, но можете удалить старый токен с помощью команды сохранения в keygen (справка из itunes), удалить старый токен и добавить новый в свою базу данных.

...