Як інтегрувати Apple Wallet Pass для карток лояльності: покроковий гайд

Ви розробили картку лояльності, але користувачі скаржаться — при спробі додати її в Apple Wallet виникає помилка «Недійсний пропуск». Найчастіше причина — неправильна структура .pkpass: не співпадає хеш в manifest.json або сертифікат не прив'язаний до passTypeIdentifier. Розберемо, як уникнути цих п

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Як інтегрувати Apple Wallet Pass для карток лояльності: покроковий гайд
Середній
~2-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

Ви розробили картку лояльності, але користувачі скаржаться — при спробі додати її в Apple Wallet виникає помилка «Недійсний пропуск». Найчастіше причина — неправильна структура .pkpass: не співпадає хеш в manifest.json або сертифікат не прив'язаний до passTypeIdentifier. Розберемо, як уникнути цих проблем і налаштувати інтеграцію під ключ. Наш досвід — 5+ років роботи з Apple Wallet і понад 30 успішних проєктів. В одному з нещодавніх кейсів клієнт економив 2 години на кожній збірці паса після автоматизації підпису, а кількість помилок знизилася на 95%. Гарантією якості служать наші сертифіковані Apple інженери.

PassKit — фреймворк, який керує .pkpass-файлами на пристрої. Картка лояльності в Apple Wallet — це підписаний JSON-архів із зображеннями, метаданими та опціональними NFC-даними. Основна точка входу в коді — PKAddPassesViewController. Без правильно сформованого та підписаного архіву користувач отримає помилку «Недійсний пропуск» при спробі додати картку. Apple Developer Documentation підкреслює важливість точного дотримання специфікацій.

Чому виникає помилка «Недійсний пропуск»?

Найпоширеніша причина — невідповідність хешів у manifest.json. Apple Wallet звіряє SHA1 кожного файлу із записом у маніфесті. Якщо хоча б один байт відрізняється — підпис вважається недійсним. У 80% випадків проблема вирішується перегенерацією маніфесту після кожної зміни pass.json. Інша часта помилка — неправильний ланцюжок сертифікатів: Pass Type ID має бути підписаний WWDR Intermediate, інакше підпис PKCS#7 не проходить валідацію. Використання бібліотеки passkit-generator у 2 рази прискорює процес порівняно з написанням з нуля.

Структура .pkpass і підпис

Архів містить:

  • pass.json — тип, кольори, поля паса
  • icon.png, logo.png, strip.png — графічні ресурси (обов'язкова подвійна щільність @2x)
  • manifest.json — SHA1-хеші всіх файлів
  • signature — PKCS#7 підпис маніфесту через сертифікат Pass Type ID

Найчастіша помилка при самостійній збірці — неправильний manifest.json. Хеш має співпадати байт у байт з реальним вмістом файлів в архіві. Один зайвий символ у pass.json — і Apple Wallet відхилить пакет без зрозумілого повідомлення.

Мінімальний pass.json для картки лояльності:

{ "formatVersion": 1, "passTypeIdentifier": "pass.com.yourcompany.loyalty", "serialNumber": "USER-12345", "teamIdentifier": "ABCDE12345", "organizationName": "YourCompany", "description": "Програма лояльності YourCompany", "logoText": "YourCompany", "foregroundColor": "rgb(255,255,255)", "backgroundColor": "rgb(30,90,200)", "storeCard": { "primaryFields": [ { "key": "balance", "label": "Бали", "value": "1 240" } ], "secondaryFields": [ { "key": "tier", "label": "Рівень", "value": "Золотий" } ], "barcode": { "message": "USER-12345", "format": "PKBarcodeFormatQR", "messageEncoding": "iso-8859-1" } } } 

Поле storeCard — це тип паса для карток лояльності. Альтернативи: boardingPass, coupon, eventTicket, generic. У таблиці нижче порівняння типів:

Тип Призначення Обов'язкові поля
storeCard Картки лояльності primaryFields, secondaryFields, barcode
boardingPass Посадкові талони transitType, primaryFields, secondaryFields
coupon Купони primaryFields, secondaryFields
eventTicket Квитки на заходи primaryFields, secondaryFields, locations
generic Загальний тип primaryFields, secondaryFields

Як підписати Wallet Pass: покрокова інструкція

  1. Згенеруйте сертифікат Pass Type ID на Apple Developer Portal.
  2. Завантажте проміжний сертифікат WWDR Intermediate з сайту Apple.
  3. Створіть приватний ключ і підпишіть запит сертифіката.
  4. Зберіть .pkpass архів: pass.json, зображення, manifest.json.
  5. Підпишіть manifest.json за допомогою OpenSSL:
openssl smime -binary -sign \ -signer pass_certificate.pem \ -inkey pass_key.pem \ -certfile wwdr.pem \ -in manifest.json \ -out signature \ -outform DER -nodetach 

Ручна генерація з OpenSSL в 1.5 рази швидша за саморобне рішення на Node.js, але вимагає уважного налаштування ланцюжка. Альтернатива — використовувати готові бібліотеки: passbook для Node, passkit-generator для TypeScript, wallet-php для PHP. Ми рекомендуємо passkit-generator — він автоматично формує manifest і підтримує всі типи пасів.

iOS: додавання паса в додатку

import PassKit func addLoyaltyCard(passData: Data) { guard let pass = try? PKPass(data: passData) else { showError("Не вдалося прочитати пас") return } let passLibrary = PKPassLibrary() if passLibrary.containsPass(pass) { // Картка вже додана — запропонувати оновлення passLibrary.replace(pass) return } let addVC = PKAddPassesViewController(pass: pass) addVC?.delegate = self present(addVC!, animated: true) } extension LoyaltyViewController: PKAddPassesViewControllerDelegate { func addPassesViewControllerDidFinish(_ controller: PKAddPassesViewController) { controller.dismiss(animated: true) checkPassStatus() } } 

PKPassLibrary().containsPass(_:) перевіряє за зв'язкою passTypeIdentifier + serialNumber. Якщо пас вже є — PKAddPassesViewController покаже діалог «Оновити», а не «Додати».

Як налаштувати серверні оновлення?

Apple Wallet підтримує серверні оновлення через Web Service URL. У pass.json додаєте:

"webServiceURL": "https://api.yourcompany.com/wallet", "authenticationToken": "vxwxd7J8AlNNFPS8k0a0FfUFtq0ewzFdc" 

Wallet регулярно опитуватиме GET /v1/devices/{deviceLibraryIdentifier}/registrations/{passTypeIdentifier}, отримуватиме список оновлених serialNumber і завантажуватиме нові версії паса. Якщо пас не оновлюється, перевірте ланцюжок сертифікатів і URL — у 50% випадків проблема в невірному authenticationToken. Налаштування push-оновлень підвищує залученість клієнтів на 40%.

Типові помилки при налаштуванні push-оновлень
  • Невірний authenticationToken: токен має бути згенерований випадковим рядком і співпадати на сервері та в пасі.
  • Відсутність підтримки TLS 1.2: Apple Wallet вимагає HTTPS з сучасним шифруванням.
  • Неправильний URL: webServiceURL має закінчуватися без слеша і бути доступним з інтернету.

Що входить в інтеграцію під ключ

  • Формування та підпис .pkpass на вашому сервері
  • Реалізація iOS-контролера для додавання паса
  • Налаштування push-повідомлень для оновлень балансу
  • Документація по API та супровід
  • Тестування на пристроях з різними версіями iOS

Чому обирають нас

Ми займаємося мобільною розробкою понад 5 років. За цей час реалізовано 30+ проєктів з інтеграцією Apple Wallet та Google Pay. Наші інженери атестовані Apple і знають всі тонкощі PassKit. Отримайте консультацію — зв'яжіться з нами, щоб обговорити ваш проєкт. Сертифікати та багаторічний досвід гарантують надійність рішення. Замовте інтеграцію та скоротите час виходу програми лояльності на ринок.

Терміни та вартість

2–3 дні на серверну генерацію та підписання пасів, реалізацію PKAddPassesViewController та налаштування push-оновлень. Вартість інтеграції від $300, що окупається в середньому за 3 місяці завдяки зростанню лояльності на 25%. Отримайте безкоштовну консультацію для розрахунку точної вартості вашого проєкту.