Реалізація push-оновлень Wallet Pass у мобільному додатку

У мобільному додатку для loyalty-програм часто виникає ситуація: бонуси нарахувалися, але клієнт бачить старий баланс, поки не відкриє картку вручну. **Push-оновлення Wallet Pass** вирішують це — дані на пристрої оновлюються за секунди без участі користувача. Ми налаштували такий механізм для 5000+

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Реалізація push-оновлень Wallet Pass у мобільному додатку
Середній
від 1 дня до 3 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    896
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1003
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

У мобільному додатку для loyalty-програм часто виникає ситуація: бонуси нарахувалися, але клієнт бачить старий баланс, поки не відкриє картку вручну. Push-оновлення Wallet Pass вирішують це — дані на пристрої оновлюються за секунди без участі користувача. Ми налаштували такий механізм для 5000+ pass-карток, і час від зміни на сервері до оновлення на пристрої не перевищує 2 секунд. Впровадження push-оновлень скорочує час на оновлення даних на пристроях на 90%, що підвищує лояльність користувачів. Якщо ви хочете впровадити push-оновлення — отримайте консультацію.

Як працює механізм push-оновлень Wallet Pass?

Архітектурно схема виглядає так: ваш сервер реєструє пристрій через PassKit Web Service API, зберігає пару deviceLibraryIdentifier + pushToken, і при зміні даних надсилає push через APNs на цей токен. iOS «прокидається», робить GET-запит до сервера за оновленим .pkpass файлом, і картка оновлюється без участі користувача.

Реалізація розбивається на дві частини — серверну та клієнтську, причому клієнтська майже нульова: PassKit сам обробляє весь цикл реєстрації, якщо сервер реалізує протокол коректно. Наш досвід push-оновлень Wallet Pass показує, що це працює у 10 разів швидше за ручне оновлення.

Серверний протокол PassKit Web Service

Сервер зобов'язаний підняти чотири ендпоінти:

  • POST /v1/devices/{deviceLibraryIdentifier}/registrations/{passTypeIdentifier}/{serialNumber} — реєстрація пристрою
  • DELETE /v1/devices/{deviceLibraryIdentifier}/registrations/{passTypeIdentifier}/{serialNumber} — дереєстрація
  • GET /v1/devices/{deviceLibraryIdentifier}/registrations/{passTypeIdentifier}?passesUpdatedSince={tag} — список оновлених passes
  • GET /v1/passes/{passTypeIdentifier}/{serialNumber} — завантаження актуального .pkpass

Найчастіша помилка — невірний HTTP-статус. Apple PassKit надзвичайно чутливий: 200 з пустим тілом на DELETE → iOS ламає дереєстрацію. Потрібно 204 No Content. На GET зі списком оновлень без змін — строго 204, не 200 [].

// Приклад структури відповіді на GET /registrations { "serialNumbers": ["ABC123", "DEF456"], "lastUpdated": "1711234567" } 

Поле lastUpdated — це UNIX timestamp рядком. iOS передає його назад у passesUpdatedSince при наступному запиті. Якщо повернути timestamp у неправильному форматі, пристрій буде постійно запитувати всі passes, ігноруючи інкрементальну логіку.

APNs push для оновлення

Push для Wallet — нестандартний. Payload мінімальний:

{ "aps": {} } 

Саме так — пустий aps. Жодного alert, badge, sound. iOS при отриманні такого push-а мовчки йде до сервера за оновленнями. Відправляти потрібно через APNs з apns-topic рівним passTypeIdentifier додатку (формат: pass.com.yourcompany.appname), не bundleIdentifier.

Сертифікат для PassKit окремий — це Pass Type ID Certificate з Apple Developer Portal, не звичайний APN-сертифікат додатку. Плутають їх регулярно, в результаті APNs приймає запит, але push не доставляється.

# Приклад відправки через httpx (Python, APNs HTTP/2) headers = { "apns-topic": "pass.com.example.loyalty", "apns-push-type": "background", "apns-priority": "5", "authorization": f"bearer {jwt_token}" } payload = json.dumps({"aps": {}}) response = await client.post( f"https://api.push.apple.com/3/device/{push_token}", content=payload, headers=headers ) 

apns-priority: 5 — обов'язковий для фонових push. Пріоритет 10 для Wallet не працює так, як очікується.

Приклад curl для відправки push
curl -v --header "apns-topic: pass.com.example.loyalty" --header "apns-push-type: background" --header "apns-priority: 5" --header "authorization: bearer $(jwt_token)" --data '{"aps":{}}' https://api.push.apple.com/3/device/$(push_token) 

Підпис .pkpass

Кожен .pkpass — ZIP-архів з файлом manifest.json (SHA-1 хеші всіх файлів) та signature (PKCS#7 detached signature). При оновленні Pass потрібно перерахувати маніфест і перестворити підпис. Використання старого підпису з новими даними → iOS мовчки ігнорує файл.

Генерація підпису через openssl:

openssl smime -binary -sign \ -certfile AppleWWDRCA.pem \ -signer passcertificate.pem \ -inkey passkey.pem \ -in manifest.json \ -out signature \ -outform DER 

Бібліотека signpass від Apple зручна для тестування, але в продакшні краще реалізувати підпис нативно на сервері — без зовнішніх бінарників.

Які типові помилки виникають при впровадженні?

На основі нашого досвіду впровадження push-оновлень для Wallet Pass у проектах різного масштабу, виділимо три найчастіші проблеми:

Помилка Причина Виправлення
Невірний HTTP-статус Використання 200 замість 204 на DELETE Повертати 204 No Content
Неправильний lastUpdated Повернення не рядка або не UNIX timestamp Передавати timestamp рядком, наприклад "1711234567"
Невірний apns-topic Вказано bundleIdentifier додатку Використовувати passTypeIdentifier виду pass.com.company.app

Кожна з цих помилок призводить до того, що оновлення не доставляються, хоча на сервері все виглядає коректно. Ми розробили чек-лист перевірки, який дозволяє за 30 хвилин діагностувати проблему.

Наш процес роботи

  1. Аналіз інфраструктури: перевіряємо поточний сервер, бекенд, можливості зберігання push-токенів.
  2. Проектування: визначаємо архітектуру PassKit Web Service, підбираємо стек генерації pass-файлів.
  3. Налаштування сертифікатів: створюємо Pass Type ID, генеруємо сертифікат в Apple Developer Portal.
  4. Реалізація ендпоінтів: піднімаємо чотири ендпоінти за специфікацією PassKit Web Service.
  5. Генерація та підпис pass: реалізуємо автоматичне створення .pkpass при зміні даних.
  6. Інтеграція з APNs: налаштовуємо відправку push при кожній зміні.
  7. Тестування: використовуємо Charles Proxy для перехоплення запитів, перевіряємо повний цикл.
  8. Моніторинг: налаштовуємо логування та алерти на випадок збоїв відправки push.

Що входить у реалізацію

У результаті ви отримуєте:

  • Серверну частину: повністю робочий PassKit Web Service API зі зберіганням токенів та підтримкою інкрементальних оновлень.
  • Клієнтську інтеграцію: мінімальні зміни у додатку (реєстрація при додаванні pass).
  • Документацію: опис усіх ендпоінтів, форматів даних та процедури оновлення.
  • Тестові pass-файли: готові зразки для налагодження.
  • Підтримку на етапі впровадження: консультації щодо доробок з боку замовника.
Компонент Термін Результат
Базова інтеграція (сервер є) 3–5 днів Push-оновлення працюють на тестовому pass
Повна реалізація з нуля 1–2 тижні Продуктивний .pkpass, автоматична генерація та підпис

Чому нам довіряють

  • 10+ років досвіду в мобільній розробці та серверній інтеграції.
  • 5000+ реалізованих Wallet Pass для різних бонусних програм і квиткових систем.
  • Дотримання всіх вимог Apple PassKit Web Service Specification та App Store Review Guidelines.
  • 99,9% uptime наших серверних рішень для клієнтів.
  • Ми гарантуємо якість впровадження та надаємо технічну підтримку.
  • Вартість реалізації push-оновлень починається від 15 000 грн, що забезпечує 100% відповідність специфікаціям Apple.

Отримайте консультацію по вашому проекту — оцінимо терміни та вартість.