Як тільки створений маркер пристрою сповіщення про натискання колись змінюється?
Приклад, коли додаток оновлюється? або в будь-якому іншому випадку це може змінитися ??
Як тільки створений маркер пристрою сповіщення про натискання колись змінюється?
Приклад, коли додаток оновлюється? або в будь-якому іншому випадку це може змінитися ??
Відповіді:
З [Документація Apple, ApplePushService] 2
Форма цієї фази довіри токенів гарантує, що тільки APN генерує маркер, який згодом він буде вшановувати, і він може впевнитись, що маркер, переданий йому пристроєм, є тим же маркером, який він раніше передбачив для цього конкретного пристрою - і тільки для цього пристрою.
Якщо користувач відновить дані резервного копіювання на новому пристрої або перевстановить операційну систему, маркер пристрою змінюється.
З цього приводу офіційна документація Apple незрозуміла. Я помітив це: маркер інваріантний для певного пристрою, програми та домену (виробництво порівняно з пісочницею). Я вважаю, що це повинно залишатися правдою, щоб система надійно працювала. Розглянемо ситуацію, коли оновлення програми запускає новий маркер APN; якби я використовував найкращу нову програму, схожу на Twitter, із увімкненими сповіщеннями, що буде, коли я оновлюю свій додаток з iTunes? Чи повинен я сподіватися, що він продовжуватиме надсилати сповіщення, навіть якщо я не запускав програми, оскільки "синхронізував" оновлення на своєму пристрої? Акт зміни програми не може вплинути на систему APN, оскільки ОС може отримувати сповіщення від вашого імені, навіть якщо ви не запустили оновлений додаток.
Щоб було зрозуміло, Apple заявляє, що "Додаток повинен реєструватись [на серверах APN] кожного разу, коли він запускається, і надавати своєму постачальнику поточний маркер". Я від усієї думки згоден; це захистить вашу програму від поганих припущень або незвичних ситуацій.
Один із відповідей: Чи унікальні маркери сповіщень у всіх додатках для одного пристрою? вказує на те, що маркери пристроїв є унікальними за "встановлення операційної системи"; і, якщо відновлення з резервної копії на пристрій підтримує маркер, але протирання пристрою призведе до отримання нового маркера. Це цілком відповідало б намірам Apple щодо безперебійної роботи та конфіденційності: витирання пристрою досить серйозне, що, можливо, є гарантією нової асоціації, але користувач, що відновлює зображення після оновлення ОС, хотів би зберегти існуючі сповіщення. Якщо я пригадую нещодавнє оновлення iOS5 на своєму iPad, я відновив останню резервну копію після оновлення, тому це зберегло б послідовність мого маркера сповіщень. [Редагувати: відновлення резервної копії для іншого пристрій НЕ дублює маркер.]
застереження: Я не маю остаточних знань з цього питання, просто певний розумний досвід роботи з APN (як стороннього розробника). Як завжди, найкраще перевірити свої припущення.
Нещодавно у мене був шанс поговорити з інженерами Apple і b> провести кілька реальних тестів, і я хотів представити результати:
Для завершення, коли я говорю про повернення маркера APN, я припускаю контекст одного ідентифікатора / програми пакету.
По-перше, інженери Apple сказали, що два пристрої не можуть повертати один і той же APN. Незважаючи на коментарі, наведені нижче, я не зміг визначити обставини, де це не вдається.
По-друге, ось послідовність тестування та результати оновлення:
Почніть з iOS4, встановленого на iPhone4; резервного пристрою в iTunes
Оновлення до iOS5
З попереднього тесту я знаю, що маркер APN зараз відрізняється
Відновлення резервної копії на пристрої
Маркер APN тепер такий же, як на кроці 1.
Скидання iOS (чистий пристрій)
Змінюється маркер APN
Створіть резервну копію іншого телефону в iTunes та відновіть його на тестовому пристрої; в основному я відновлюю "неправильну" резервну копію, ніби перемикаю телефони.
Маркер APN знову змінюється; Далі він є виразним і не відповідає маркерів ні оригінальному, ні «клонованому» жетону.
Відновіть на пристрої "правильну" резервну копію.
Маркер APN тепер такий же, як і крок 1.
Нарешті, я оновив телефон до iOS6 (beta2), відновив резервну копію та повторно перевірив. Як і очікувалося, маркер продовжував відповідати маркеру на кроці 1.
На даний момент я майже впевнений, що маркери APN не можна дублювати між різними пристроями; можливо, це сталося як помилка в більш ранніх версіях iOS, але я впевнений, що iOS5 (і, мабуть, iOS6) правильно обробляє маркери APN.
Я просто зрозумів , що я не додав це: лексеми пристрої будуть змінюватися. Один із розробників Apple поділився зі мною, що терміни дійсно закінчуються (я думаю, через 2 роки). Для багатьох цілей це досить довго, що можна вважати інваріантним.
[Мене не турбує, якщо мені доведеться оновлювати свої тестові сценарії новими маркерами кожні два роки, тим більше, що я змінюю телефони щороку.]
Щойно я тестував це на змінах маркера iOS9 та APN Push, якщо я перевстановлюю додаток.
ТАК , жетони пристрою можуть змінюватися.
Щоразу, коли ваша програма отримає маркер, вона має зберігати її. Потім щоразу, коли буде отримано новий маркер (що в кінцевому підсумку станеться), порівняйте новий маркер із збереженим жетоном і, якщо вони різні:
nil
)З практичної точки зору, останній крок, швидше за все, нетривіальний. Наприклад, якщо у вас є сервіс , який відправляє оповіщення про погоді на пристрій маркера на основі того, що поштовий індекс , що пристрій передплатників, то вам необхідно пройти old_token
і new_token
до зазначеної службі , тому він може оновити доставку.
Ерго, загалом кажучи, 100% API, що приймають "маркер пристрою", також повинні мати певні UPDATE
можливості для цього маркера. Для того, щоб НЕ створювати для цього , щоб побудувати для неправильно поставлені і не-доставлених повідомлень.
Маркер пристрою змінюється від iOS 8 та новіших версій
Перегляньте текст нижче з веб-сайту Apple. Реєстрація, планування та обробка сповіщень користувачів
Маркер пристрою - ваш ключ до надсилання push-сповіщень у ваш додаток на певний пристрій. Токени пристроїв можуть змінюватися, тому вашій програмі потрібно реєструватися кожного разу, коли вона запускається, і передавати отриманий маркер назад на ваш сервер. Якщо не вдалося оновити маркер пристрою, віддалені сповіщення можуть не пробитися до пристрою користувача. Маркери пристрою завжди змінюються, коли користувач відновлює дані резервного копіювання на новому пристрої чи комп’ютері або перевстановлює операційну систему. Під час переміщення даних на новий пристрій чи комп’ютер користувач повинен запустити ваш додаток один раз, перш ніж віддалене сповіщення може бути доставлено на цей пристрій.
Я думаю, що варто згадати, як ніхто не робив, що маркер змінюється після того, як ви дзвонили unregisterForRemoteNotifications
. Коли ви телефонуєте registerForRemoteNotifications
наступного разу, маркер буде іншим. Я не зміг знайти підтвердження цього в документах Apple, але я був свідком такої поведінки сам. Будь ласка, пам’ятайте про це
Він не повинен змінюватися, якщо ваш додаток не буде відновлено на новому пристрої (після цього не буде запропоновано знову приймати push-повідомлення, а він просто надішле вам зареєстрований дзвінок, в який момент ви повинні прийняти новий маркер).
Але Apple не гарантує, що вона ніколи не змінюється (отже, документація ніколи не згадує про це). Ви краще програмуєте на найгірші і припускайте, що це може змінитися одного дня. Крім того, регулярно надсилаючи маркер на ваш сервер, ви зможете видаляти жетони, які не реєструвались деякий час, і, ймовірно, деінсталювали ваше додаток або втратили інтерес деякий час назад (а документація визначає це як потрібну поведінку!).
Від - Документи Apple
APN можуть видавати новий маркер пристрою з різних причин:
Користувач встановлює ваш додаток на новий пристрій
Користувач відновлює пристрій із резервної копії
Користувач перевстановлює операційну систему
Інші визначені системою події
У результаті програми повинні запитувати маркер пристрою під час запуску.
Додатково:
ВАЖЛИВО
Маркери пристроїв APN мають різну довжину. Не жорстко кодуйте їх розміри.
Посилання швидко застарівають з яблуком! тож я цитую те, що зараз здається цілком зрозумілим:
Ніколи не кешуйте маркери пристроїв у вашому додатку; натомість отримайте їх із системи, коли вони вам знадобляться. APN видає новий маркер пристрою до вашого додатка, коли трапляються певні події. Маркери пристрою гарантовано відрізняються, наприклад, коли користувач відновлює пристрій із резервної копії, коли користувач встановлює ваш додаток на новий пристрій та коли користувач перевстановлює операційну систему. Отримавши маркер, а не покладаючись на кеш-пам'ять, гарантується наявність у вас поточного маркера пристрою, необхідного для провайдера для спілкування з APN. Коли ви намагаєтеся отримати маркер пристрою, але він не змінився, метод завантаження швидко повертається.
Як посилання на інформацію про push-повідомлення Apple
Маркер пристрою - ваш ключ до надсилання push-сповіщень у ваш додаток на певний пристрій. Токени пристроїв можуть змінюватися, тому вашій програмі потрібно реєструватися кожного разу, коли вона запускається, і передавати отриманий маркер назад на ваш сервер. Якщо не вдалося оновити маркер пристрою, віддалені сповіщення можуть не пробитися до пристрою користувача. Маркери пристрою завжди змінюються, коли користувач відновлює дані резервного копіювання на новому пристрої чи комп’ютері або перевстановлює операційну систему. Під час переміщення даних на новий пристрій чи комп’ютер користувач повинен запустити ваш додаток один раз, перш ніж віддалене сповіщення може бути доставлено на цей пристрій.
Ніколи не кешуйте маркер пристрою; завжди отримуйте маркер із системи, коли вам це потрібно. Якщо ваш додаток раніше зареєстровано для віддалених сповіщень, виклик методу registerForRemoteNotifications знову не спричиняє додаткових накладних витрат, і iOS негайно повертає наявний маркер пристрою до делегата додатка. Окрім того, iOS викликає ваш метод делегування кожного разу, коли маркер пристрою змінюється, а не лише у відповідь на реєстрацію вашої програми чи перереєстрацію.
За цим посиланням маркер пристрою
Маркер пристрою, включений у кожен запит, представляє особу пристрою, який отримує повідомлення. APN використовує маркери пристроїв, щоб ідентифікувати кожну унікальну комбінацію додатків та пристроїв. Він також використовує їх для автентифікації маршрутизації віддалених повідомлень, що надсилаються на пристрій. Кожен раз, коли ваша програма запускається на пристрої, вона отримує цей маркер із APN та передає його вашому провайдеру. Ваш постачальник зберігає маркер і використовує його під час надсилання сповіщень на певний додаток та пристрій. Сам же маркер непрозорий і стійкий, змінюється лише при стиранні даних та налаштувань пристрою. Лише APN можуть декодувати та читати маркер пристрою.
Так, це може змінитися. В ідеалі коли-небудь ми отримуємо маркер через метод зворотного виклику
- (недійсна) програма: (UIApplication *) додаток didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken
Додаток має зареєструвати / оновити маркер на віддаленому сервері. Це забезпечить синхронізацію маркера на APNS та вашому сервері.
Відповідно до документації Apple ,
Отримання та обробка маркера для певного додатка працює так:
Ваш додаток реєструється з APN для віддалених сповіщень Коли потрібен новий маркер пристрою, APN генерує той, використовуючи інформацію, що міститься в сертифікаті пристрою. Він зашифровує маркер за допомогою клавіші токена і повертає його на пристрій, як показано в середині праворуч вказівною стрілкою. Система повертає маркер пристрою до вашого додатка, викликаючи вашу програму: didRegisterForRemoteNotificationsWithDeviceToken: метод delegate. Отримавши маркер, ваш додаток (у рамках методу делегування) повинен переслати його своєму постачальнику у двійковому чи шістнадцятковому форматі. Ваш постачальник не може надсилати сповіщення на пристрій без цього маркера. Докладніше див. Реєстрація для отримання віддалених повідомлень у налаштуваннях підтримки віддаленого повідомлення.
Маркер пристрою ретранслюється під час встановлення програми.
Це означає, що якщо ви перевстановите програму, вона зміниться ; він не відповідає, якщо ви робите це з резервної копії, оновлення до iOS.
Правильний спосіб його використання, щоб уникнути будь-яких проблем, полягає в тому, щоб отримати NSPAppDelegate
метод, вказаний при кожному запуску програми, у методіdidRegisterForRemoteNotificationsWithDeviceToken