Чи змінюється маркер пристрою APNS, колись створений?


99

Як тільки створений маркер пристрою сповіщення про натискання колись змінюється?

Приклад, коли додаток оновлюється? або в будь-якому іншому випадку це може змінитися ??


Переконайтеся, що ви бачите цю відповідь, оскільки вона містить документацію на 4 місця, де змінюється маркер пристрою
Honey

Відповіді:


71

З [Документація Apple, ApplePushService] 2

Форма цієї фази довіри токенів гарантує, що тільки APN генерує маркер, який згодом він буде вшановувати, і він може впевнитись, що маркер, переданий йому пристроєм, є тим же маркером, який він раніше передбачив для цього конкретного пристрою - і тільки для цього пристрою.

Якщо користувач відновить дані резервного копіювання на новому пристрої або перевстановить операційну систему, маркер пристрою змінюється.


Поточні документи викинули останнє речення. Виявляється (з іншого SO питання, stackoverflow.com/questions/2751481 / ... ) , що відновлення даних буде зберігати маркери APN , але який встановлює ОС і «витирає» скине його (якщо вони не дотримуються шляхом відновлення даних на знову встановленої операційної система).
Роберт Альтман

1
@RobertAltman - Я не думаю, що це вся історія. Я бачив низку реєстрацій у нашій базі даних з абсолютно різних пристроїв з точно таким же маркером APNS. Я бачу переді мною зараз iPad 2 та iPhone 3GS, які надіслали нам такий же маркер. Чи може хтось ще підтвердити цю поведінку?
DougW

@DougW, це дивно. Ви все ще маєте подібне питання? Відредагував посилання та опублікував з останніх документів.
iosCurator

139

З цього приводу офіційна документація Apple незрозуміла. Я помітив це: маркер інваріантний для певного пристрою, програми та домену (виробництво порівняно з пісочницею). Я вважаю, що це повинно залишатися правдою, щоб система надійно працювала. Розглянемо ситуацію, коли оновлення програми запускає новий маркер APN; якби я використовував найкращу нову програму, схожу на Twitter, із увімкненими сповіщеннями, що буде, коли я оновлюю свій додаток з iTunes? Чи повинен я сподіватися, що він продовжуватиме надсилати сповіщення, навіть якщо я не запускав програми, оскільки "синхронізував" оновлення на своєму пристрої? Акт зміни програми не може вплинути на систему APN, оскільки ОС може отримувати сповіщення від вашого імені, навіть якщо ви не запустили оновлений додаток.

Щоб було зрозуміло, Apple заявляє, що "Додаток повинен реєструватись [на серверах APN] кожного разу, коли він запускається, і надавати своєму постачальнику поточний маркер". Я від усієї думки згоден; це захистить вашу програму від поганих припущень або незвичних ситуацій.

Один із відповідей: Чи унікальні маркери сповіщень у всіх додатках для одного пристрою? вказує на те, що маркери пристроїв є унікальними за "встановлення операційної системи"; і, якщо відновлення з резервної копії на пристрій підтримує маркер, але протирання пристрою призведе до отримання нового маркера. Це цілком відповідало б намірам Apple щодо безперебійної роботи та конфіденційності: витирання пристрою досить серйозне, що, можливо, є гарантією нової асоціації, але користувач, що відновлює зображення після оновлення ОС, хотів би зберегти існуючі сповіщення. Якщо я пригадую нещодавнє оновлення iOS5 на своєму iPad, я відновив останню резервну копію після оновлення, тому це зберегло б послідовність мого маркера сповіщень. [Редагувати: відновлення резервної копії для іншого пристрій НЕ дублює маркер.]

застереження: Я не маю остаточних знань з цього питання, просто певний розумний досвід роботи з APN (як стороннього розробника). Як завжди, найкраще перевірити свої припущення.


Оновлення (червень 2012 р.):

Нещодавно у мене був шанс поговорити з інженерами Apple і b> провести кілька реальних тестів, і я хотів представити результати:

Для завершення, коли я говорю про повернення маркера APN, я припускаю контекст одного ідентифікатора / програми пакету.

По-перше, інженери Apple сказали, що два пристрої не можуть повертати один і той же APN. Незважаючи на коментарі, наведені нижче, я не зміг визначити обставини, де це не вдається.

По-друге, ось послідовність тестування та результати оновлення:

  1. Почніть з iOS4, встановленого на iPhone4; резервного пристрою в iTunes

  2. Оновлення до iOS5
    З попереднього тесту я знаю, що маркер APN зараз відрізняється

  3. Відновлення резервної копії на пристрої
    Маркер APN тепер такий же, як на кроці 1.

  4. Скидання iOS (чистий пристрій)
    Змінюється маркер APN

  5. Створіть резервну копію іншого телефону в iTunes та відновіть його на тестовому пристрої; в основному я відновлюю "неправильну" резервну копію, ніби перемикаю телефони.
    Маркер APN знову змінюється; Далі він є виразним і не відповідає маркерів ні оригінальному, ні «клонованому» жетону.

  6. Відновіть на пристрої "правильну" резервну копію.
    Маркер APN тепер такий же, як і крок 1.

  7. Нарешті, я оновив телефон до iOS6 (beta2), відновив резервну копію та повторно перевірив. Як і очікувалося, маркер продовжував відповідати маркеру на кроці 1.

На даний момент я майже впевнений, що маркери APN не можна дублювати між різними пристроями; можливо, це сталося як помилка в більш ранніх версіях iOS, але я впевнений, що iOS5 (і, мабуть, iOS6) правильно обробляє маркери APN.


Оновлення (серпень 2012 р.)

Я просто зрозумів , що я не додав це: лексеми пристрої будуть змінюватися. Один із розробників Apple поділився зі мною, що терміни дійсно закінчуються (я думаю, через 2 роки). Для багатьох цілей це досить довго, що можна вважати інваріантним.

[Мене не турбує, якщо мені доведеться оновлювати свої тестові сценарії новими маркерами кожні два роки, тим більше, що я змінюю телефони щороку.]


так це означає, що ви можете використовувати маркер як спосіб однозначної ідентифікації користувача? (що дуже практично в додатках, де треба "голосувати"?). Я можу уявити ситуацію: користувач голосує, а додаток відповідає випадковим числом через сповіщення. Це число потрібно надіслати на сервер, щоб голосування було дійсним. Таким чином голосування неможливо легко сфальсифікувати.
Жаба

також цікаво: чи змінюється маркер при видаленні програми та повторній його установці. Або це схоже на варіант "відновлення резервної копії"
Toad

@Toad Маркер не зміниться в результаті видалення та повторної інсталяції програми.
Роберт Альтман

@Toad я б не думав, що це буде гарною формою ідентифікації користувача; оскільки маркер унікальний на кожному пристрої (як і на додаток), користувач із кількома пристроями матиме декілька жетонів.
Роберт Альтман

1
Цікаво про зв’язок між сертифікатами та маркером пристрою. якщо термін дії .p12 закінчується, потрібно змінити новий сертифікат. Я знайшов посилання "Коли потрібен новий маркер пристрою, APN генерує той, використовуючи інформацію, що міститься в сертифікаті пристрою." Так чи не можливо оновити маркер пристрою при зміні сертифікатів?
illusionJJ

50

Щойно я тестував це на змінах маркера iOS9 та APN Push, якщо я перевстановлюю додаток.


7
я можу підтвердити це
roocell

1
Я можу це також підтвердити
Мухаммед Аднан

1
Так, це змінюється :(
Азік Абдулла

хтось може сказати, чому це відбувається?
Sushobhit

Так, це зміниться
Вед Рауніяр

22

ТАК , жетони пристрою можуть змінюватися.

Щоразу, коли ваша програма отримає маркер, вона має зберігати її. Потім щоразу, коли буде отримано новий маркер (що в кінцевому підсумку станеться), порівняйте новий маркер із збереженим жетоном і, якщо вони різні:

  1. Оновіть локальну пам’ять пристрою (включаючи, можливо, nil)
  2. Оновіть що-небудь на пристрої, який використовує маркер, щоб знати про новий маркер
  3. Оновіть будь-які API, які знають цей маркер, до нового маркера.

З практичної точки зору, останній крок, швидше за все, нетривіальний. Наприклад, якщо у вас є сервіс , який відправляє оповіщення про погоді на пристрій маркера на основі того, що поштовий індекс , що пристрій передплатників, то вам необхідно пройти old_tokenі new_tokenдо зазначеної службі , тому він може оновити доставку.

Ерго, загалом кажучи, 100% API, що приймають "маркер пристрою", також повинні мати певні UPDATEможливості для цього маркера. Для того, щоб НЕ створювати для цього , щоб побудувати для неправильно поставлені і не-доставлених повідомлень.


звучить добре, але що я видалив і перевстановив додаток? у такому сценарії маркер пристрою, який я зберег під місцевим сховищем, буде видалено
Kuf

@Kuf, ти отримав відповідь на це запитання? У мене те саме - навіть якщо додаток видалено / перевстановлено, як би ми порівняли системний маркер?
nkirkes

@nkirkes див. це питання для більш детальної інформації
Kuf

Три точки "Оновлення", про які ви говорили, чи є вони обов'язками iOS, SDK чи ми самі?
прізвище

7

Маркер пристрою змінюється від iOS 8 та новіших версій

Перегляньте текст нижче з веб-сайту Apple. Реєстрація, планування та обробка сповіщень користувачів

Маркер пристрою - ваш ключ до надсилання push-сповіщень у ваш додаток на певний пристрій. Токени пристроїв можуть змінюватися, тому вашій програмі потрібно реєструватися кожного разу, коли вона запускається, і передавати отриманий маркер назад на ваш сервер. Якщо не вдалося оновити маркер пристрою, віддалені сповіщення можуть не пробитися до пристрою користувача. Маркери пристрою завжди змінюються, коли користувач відновлює дані резервного копіювання на новому пристрої чи комп’ютері або перевстановлює операційну систему. Під час переміщення даних на новий пристрій чи комп’ютер користувач повинен запустити ваш додаток один раз, перш ніж віддалене сповіщення може бути доставлено на цей пристрій.


2
URL-адреса мертва! Виправте це.
Раміс


4

Я думаю, що варто згадати, як ніхто не робив, що маркер змінюється після того, як ви дзвонили unregisterForRemoteNotifications. Коли ви телефонуєте registerForRemoteNotificationsнаступного разу, маркер буде іншим. Я не зміг знайти підтвердження цього в документах Apple, але я був свідком такої поведінки сам. Будь ласка, пам’ятайте про це


3

Він не повинен змінюватися, якщо ваш додаток не буде відновлено на новому пристрої (після цього не буде запропоновано знову приймати push-повідомлення, а він просто надішле вам зареєстрований дзвінок, в який момент ви повинні прийняти новий маркер).

Але Apple не гарантує, що вона ніколи не змінюється (отже, документація ніколи не згадує про це). Ви краще програмуєте на найгірші і припускайте, що це може змінитися одного дня. Крім того, регулярно надсилаючи маркер на ваш сервер, ви зможете видаляти жетони, які не реєструвались деякий час, і, ймовірно, деінсталювали ваше додаток або втратили інтерес деякий час назад (а документація визначає це як потрібну поведінку!).


Ви праві: ви не можете вважати маркер постійним; дотримуйтесь правил взаємодії, визначених у документах APN. Насправді Apple Apple розробив мені, що маркер зміниться з часом (приблизно через 2 роки).
Роберт Альтман

1
Відроджуючи стару дискусію, але хтось може вважати її корисною: на цьому тижні я провів деякий час, працюючи на власному сервері Parse і маючи проблеми з тестуванням - виявляється, щоразу, коли я оновлював додаток для розробників (коли я робив кількість UX змін, а також), маркер ідентифікатор змінювався з кожною установкою програмного забезпечення ... так це не дуже забавно? (зітхає)
ChrisH

3

Від - Документи Apple

APN можуть видавати новий маркер пристрою з різних причин:

  • Користувач встановлює ваш додаток на новий пристрій

  • Користувач відновлює пристрій із резервної копії

  • Користувач перевстановлює операційну систему

  • Інші визначені системою події

У результаті програми повинні запитувати маркер пристрою під час запуску.

Додатково:

ВАЖЛИВО

Маркери пристроїв APN мають різну довжину. Не жорстко кодуйте їх розміри.


2

Посилання швидко застарівають з яблуком! тож я цитую те, що зараз здається цілком зрозумілим:

Ніколи не кешуйте маркери пристроїв у вашому додатку; натомість отримайте їх із системи, коли вони вам знадобляться. APN видає новий маркер пристрою до вашого додатка, коли трапляються певні події. Маркери пристрою гарантовано відрізняються, наприклад, коли користувач відновлює пристрій із резервної копії, коли користувач встановлює ваш додаток на новий пристрій та коли користувач перевстановлює операційну систему. Отримавши маркер, а не покладаючись на кеш-пам'ять, гарантується наявність у вас поточного маркера пристрою, необхідного для провайдера для спілкування з APN. Коли ви намагаєтеся отримати маркер пристрою, але він не змінився, метод завантаження швидко повертається.

З цього посібника


0

Як посилання на інформацію про push-повідомлення Apple

Маркер пристрою - ваш ключ до надсилання push-сповіщень у ваш додаток на певний пристрій. Токени пристроїв можуть змінюватися, тому вашій програмі потрібно реєструватися кожного разу, коли вона запускається, і передавати отриманий маркер назад на ваш сервер. Якщо не вдалося оновити маркер пристрою, віддалені сповіщення можуть не пробитися до пристрою користувача. Маркери пристрою завжди змінюються, коли користувач відновлює дані резервного копіювання на новому пристрої чи комп’ютері або перевстановлює операційну систему. Під час переміщення даних на новий пристрій чи комп’ютер користувач повинен запустити ваш додаток один раз, перш ніж віддалене сповіщення може бути доставлено на цей пристрій.

Ніколи не кешуйте маркер пристрою; завжди отримуйте маркер із системи, коли вам це потрібно. Якщо ваш додаток раніше зареєстровано для віддалених сповіщень, виклик методу registerForRemoteNotifications знову не спричиняє додаткових накладних витрат, і iOS негайно повертає наявний маркер пристрою до делегата додатка. Окрім того, iOS викликає ваш метод делегування кожного разу, коли маркер пристрою змінюється, а не лише у відповідь на реєстрацію вашої програми чи перереєстрацію.


0

За цим посиланням маркер пристрою

Маркер пристрою, включений у кожен запит, представляє особу пристрою, який отримує повідомлення. APN використовує маркери пристроїв, щоб ідентифікувати кожну унікальну комбінацію додатків та пристроїв. Він також використовує їх для автентифікації маршрутизації віддалених повідомлень, що надсилаються на пристрій. Кожен раз, коли ваша програма запускається на пристрої, вона отримує цей маркер із APN та передає його вашому провайдеру. Ваш постачальник зберігає маркер і використовує його під час надсилання сповіщень на певний додаток та пристрій. Сам же маркер непрозорий і стійкий, змінюється лише при стиранні даних та налаштувань пристрою. Лише APN можуть декодувати та читати маркер пристрою.


0

Так, це може змінитися. В ідеалі коли-небудь ми отримуємо маркер через метод зворотного виклику

  • (недійсна) програма: (UIApplication *) додаток didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken

Додаток має зареєструвати / оновити маркер на віддаленому сервері. Це забезпечить синхронізацію маркера на APNS та вашому сервері.

Відповідно до документації Apple ,

Отримання та обробка маркера для певного додатка працює так:

Ваш додаток реєструється з APN для віддалених сповіщень Коли потрібен новий маркер пристрою, APN генерує той, використовуючи інформацію, що міститься в сертифікаті пристрою. Він зашифровує маркер за допомогою клавіші токена і повертає його на пристрій, як показано в середині праворуч вказівною стрілкою. Система повертає маркер пристрою до вашого додатка, викликаючи вашу програму: didRegisterForRemoteNotificationsWithDeviceToken: метод delegate. Отримавши маркер, ваш додаток (у рамках методу делегування) повинен переслати його своєму постачальнику у двійковому чи шістнадцятковому форматі. Ваш постачальник не може надсилати сповіщення на пристрій без цього маркера. Докладніше див. Реєстрація для отримання віддалених повідомлень у налаштуваннях підтримки віддаленого повідомлення.


0

Маркер пристрою ретранслюється під час встановлення програми.

Це означає, що якщо ви перевстановите програму, вона зміниться ; він не відповідає, якщо ви робите це з резервної копії, оновлення до iOS.

Правильний спосіб його використання, щоб уникнути будь-яких проблем, полягає в тому, щоб отримати NSPAppDelegateметод, вказаний при кожному запуску програми, у методіdidRegisterForRemoteNotificationsWithDeviceToken

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.