2010-02-25 4 views
69

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

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

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

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

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

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

+0

хороший вопрос я ценю это –

ответ

90

ПРИМЕЧАНИЕ: это старый ответ, что это верно только для прошивки < = 6. См user1641761's answer для текущего подхода.

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

+1

Спасибо за вопрос и ответ, это полезно знать. +1 для каждого. Имеет смысл, что телефон решит, какое приложение было нацелено с использованием сертификата сервера, в качестве аутентификации намерения разработчика. – 2010-02-26 01:12:00

+3

Привет @Mups. В открывшемся вопросе вы указываете, что: «При необходимости я использую два разных сертификата на сервере - по одному для каждого приложения». Затем в своем ответе вы говорите: «Сертификат, который вы используете для отправки уведомления, будет определять, к какому приложению он относится». Итак, почему он не работал? Я собираюсь реализовать аналогичную настройку для своего бэкэнд, и я хотел бы быть уверен. Благодарю. – tompave

+0

@wonderingtomato Я застрял в той же проблеме. Любой солн? – RickDavis

8

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

47

iOS 7 обрабатывать это по-разному. Сейчас УНИКАЛЬНО.

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

«До прошивкой 7, токен устройство было одинаковым для всех установок приложений на данном устройстве различные приложения на телефоне, будь Tap Tap Revenge или США Сегодня, будет использовать тот же адрес, то есть маркер устройства, для маршрутизации push-уведомления для вас. Учетные данные безопасности, которые вы связываете с сообщением, гарантировали бы, что он попал в нужное приложение. На iOS 7 Apple сделала еще один шаг вперед и убедитесь, что токены устройств теперь различны в каждой установке приложения, что помогает еще больше защитить конфиденциальность пользователей, удалив другой идентификатор на уровне телефона ».

Смотрите также ios 7 device token is different for same device

+0

Этот ответ должен быть помечен как правильный ответ. – noahandthewhale

16

Разделяя мое понимание и несколько ответов от компании Apple Developers:

  • Устройство Токен
    • маркер устройства является уникальным идентификатором устройства.
    • APNs генерирует токен устройства с использованием уникального сертификата устройства (может использоваться профили обеспечения)
    • Маркер устройства может быть изменен. Поэтому обязательно отправляйте обновленный токен устройства на свой сервер каждый раз.
    • Идентификатор устройства ТОЛЬКО для всех приложений на устройстве.
    • Это специфичный для устройства, а не специфичный для приложения.
    • Идентификатор устройства может отличаться для песочницы и продукции.
      • Основываясь на профиле подготовки (песочнице или продукции), APN могут генерировать различный токен устройства для песочницы и производства для того же устройства.
    • Затем, как push-уведомление дифференцируется на устройстве? Для чего это приложение?
      • Это делается на основе идентификатора приложения и сертификата SSL, установленного на сервере (с помощью которого уведомление отправляется на сервер APN).
  • Ссылки
+1

Неправильный или устаревший ответ. Ваш ответ больше не действует в соответствии с документацией Apple. Пожалуйста, обратитесь к документу здесь https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/HandlingRemoteNotifications.html –

0

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

1

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

Согласно яблоку,

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

  • Разрешить удаленные уведомления.

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

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

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

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

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

Вы можете обратиться яблочный документ здесь Local and Remote Notification Programming Guide