Інтеграція Apple Wallet для пропусків та бейджів в мобільних додатках
Пропуск сотрудника або учасника конференції — це архів типу generic .pkpass. Generic — найбільш гнучкий тип: немає суворих обмежень на семантику полів, структура визначається завданням. Для корпоративних бейджів часто додають фото працівника через thumbnail.png (90×90 @1x, 180×180 @2x) — відображається в верхньому правому куті карточки.
pass.json для пропуску доступу
{
"formatVersion": 1,
"passTypeIdentifier": "pass.com.yourcompany.badge",
"serialNumber": "BADGE-EMP-1042",
"teamIdentifier": "ABCDE12345",
"organizationName": "YourCompany",
"description": "Пропуск сотрудника",
"foregroundColor": "rgb(255,255,255)",
"backgroundColor": "rgb(0,80,160)",
"generic": {
"primaryFields": [
{ "key": "name", "value": "Іван Петров", "label": "Сотрудник" }
],
"secondaryFields": [
{ "key": "department", "value": "Розробка", "label": "Відділ" },
{ "key": "access", "value": "A, B, C", "label": "Зони доступу" }
],
"auxiliaryFields": [
{ "key": "role", "value": "Senior Developer", "label": "Посада" }
],
"backFields": [
{ "key": "emergency", "label": "Екстрена контакт", "value": "+7 (495) 123-45-67" },
{ "key": "valid", "label": "Дійсний до", "value": "31.12.2024" }
],
"barcode": {
"message": "BADGE-EMP-1042",
"format": "PKBarcodeFormatQR",
"messageEncoding": "iso-8859-1"
}
}
}
thumbnail.png додається як файл в архів — PassKit автоматично підхоплює його за назвою.
NFC для контролю доступу
Пасси типу Generic підтримують NFC через поле nfc у pass.json — тільки для пристроїв iOS 13+:
"nfc": {
"message": "BADGE-EMP-1042-NFC-TOKEN",
"encryptionPublicKey": "base64-encoded-ec-public-key"
}
NFC-ридер на турнікеті читає зашифровані message. Однак є обмеження: NFC у Wallet для стороннього ридера працює лише через Program Value Added Services від Apple — потребує партнерської угоди з Apple. Без програми функція NFC не активується.
Альтернатива без партнерства — QR-сканер. Працює надійно, потребує лише камери на вході.
Управління життєвим циклом пропуска
Пропуск сотрудника має чіткий цикл: видача → робота → відзив (звільнення, зміна посади). Відзив реалізується двома способами:
Через expirationDate — пас автоматично стає недійсним. Підходить для тимчасових пропусків (конференція, підрядник).
Через voided: true з push-оновленням — для негайного відзиву. Сервер отримує подію (HR-система, звільнення) → надсилає APN push → пристрій завантажує оновлений пас з voided: true → Wallet відображає пропуск як недійсний.
При завантаженні оновленого паса сервер повинен повернути HTTP 200 з новим .pkpass. Якщо повернути HTTP 304 — пристрій нічого не оновить.
Тимчасові пропуски для заходів
Бейдж учасника конференції — та сама логіка, але relevantDate встановлюється на перший день заходу, expirationDate — на останній. Можна додати розклад дня через backFields:
"backFields": [
{ "key": "schedule", "label": "Програма", "value": "09:00 Реєстрація\n10:00 Keynote\n14:00 Воркшопи" }
]
Інтеграція з HR-системою
Пропуск повинен автоматично створюватися при найму та відзиватися при звільненні. Webhook від HR-системи (1C, Bamboo HR, SAP) → сервер генерує .pkpass та надсилає його по електронній пошті.
Для інтеграції через email: посилання вида https://api.yourcompany.com/badges/{token}.pkpass — iOS відкриває через Safari та пропонує "Додати до Wallet". MIME-тип повинен бути application/vnd.apple.pkpass.
При зміні посади — не відзув паса, а його оновлення: запит PATCH на web-сервіс URL оновлює поля department та role. Wallet автоматично підтягує зміни.
Тривалість
1–3 дні: генерація пропусків з thumbnail, налаштування push-оновлень при відзиві, опціонально NFC через Value Added Services. Вартість розраховується індивідуально.







