Интеграция Apple Wallet для ключей от автомобиля/гостиницы в мобильном приложении
Apple Wallet в режиме цифровых ключей — не просто красивая карточка. Это связка NFC Secure Element с Car Connectivity Consortium (CCC) Digital Key стандартом для автомобилей, или ASSA ABLOY/HID протоколом для гостиничных замков. И вся эта связка требует специального Apple MFi-соглашения, которое нельзя получить в одиночку — нужен партнёр со стороны производителя замка или автомобиля.
Архитектура: PassKit vs Wallet Keys
Критично разделять два разных сценария, которые часто путают.
PassKit-проходки (PKPass) — обычные карточки в Wallet: посадочные талоны, купоны, карты лояльности. Их может добавлять любой разработчик с сертификатом Apple. Никакого NFC-доступа к Secure Element нет.
Apple Wallet Keys — цифровые ключи для авто и отелей. Используют NFC через Secure Element, Express Mode (работает без разблокировки телефона, даже при разряженном iPhone). Требуют специального entitlement com.apple.developer.passkit.pass-type.digital-key, который Apple выдаёт только через партнёрскую программу с производителем оборудования.
Если заказчик хочет «цифровой ключ как в Apple Wallet» — первый вопрос: есть ли у них соглашение с Apple и партнёром по оборудованию?
Реализация для отельного сценария
Для Hotel Key Apple использует стандарт, совместимый с ASSA ABLOY Mobile Access и HID Mobile Access. Мобильное приложение добавляет ключ через PKAddPassesViewController:
import PassKit
func addHotelKey(passData: Data) {
guard let pass = try? PKPass(data: passData) else { return }
if PKAddPassesViewController.canAddPasses() {
let vc = PKAddPassesViewController(pass: pass)
vc.delegate = self
present(vc, animated: true)
}
}
// Серверная сторона генерирует .pkpass bundle:
// manifest.json + signature + pass.json + фоновое изображение
// Подписывается сертификатом Pass Type Certificate
pass.json для Hotel Key содержит специальные поля, определяемые партнёром HID/ASSA ABLOY:
{
"passTypeIdentifier": "pass.com.hotel.room-key",
"serialNumber": "booking-12345-room-401",
"teamIdentifier": "XXXXXXXXXX",
"nfc": [
{
"message": "ENCRYPTED_ROOM_TOKEN",
"encryptionScheme": "EAP"
}
]
}
nfc.message шифруется ключами, предоставленными партнёром замковой системы. Мобильное приложение не расшифровывает — это делает Secure Element при контакте с NFC-ридером замка.
Express Mode
Самое важное для гостиничного сценария: пользователь не должен доставать телефон из кармана. PKPassLibrary.isContactlessPaymentSupported() — проверка поддержки Express Mode. Для работы без разблокировки ключ должен быть добавлен через правильный Pass Type с соответствующим entitlement.
На iPhone с разряженной батареей (Power Reserve mode) Apple Pay и Express Travel Cards работают ~5 часов. Hotel Keys — аналогично, если производитель замка поддерживает этот режим.
Car Key: CCC Digital Key
Для автомобильных ключей — CCC (Car Connectivity Consortium) Digital Key Release 3.0. Поддерживается BMW, Hyundai, Genesis, KIA, Mini. Протокол использует UWB для точного позиционирования (Hands-Free unlock при приближении) и NFC как fallback.
Мобильное приложение автопроизводителя добавляет Car Key через приглашение от транспортного средства (Vehicle Invitation):
// CarPlay + PassKit интеграция
func handleVehicleInvitation(_ invitationToken: String) {
PKVehicleConnectionSession.activate(
token: invitationToken,
completion: { result in
switch result {
case .success(let pass):
// Ключ добавлен в Wallet
break
case .failure(let error):
// PKError.vehicleConnectionNotSupported — авто не поддерживает
break
}
}
)
}
Sharing ключей — передача через iMessage с ограниченными правами (только открытие без управления). Через PKShareablePassMetadata.
Серверная инфраструктура
Для Hotel Key — сервер должен:
- Получать данные бронирования
- Запрашивать токен у партнёра (HID Origo API или ASSA ABLOY Mobile Access)
- Генерировать
.pkpassbundle с зашифрованным NFC-полем - Подписывать сертификатом Pass Type
- Доставлять ссылку пользователю через push или email
Срок действия ключа кодируется в relevantDate и expirationDate в pass.json. При чекауте — сервер помечает pass как invalidated через Pass Update URL, и ключ удаляется с устройства.
Сроки
Базовая интеграция PKPass с Hotel Key (при наличии соглашений с Apple и партнёром): 3–5 дней разработки мобильной части + 1–2 недели серверной интеграции с HID/ASSA ABLOY API. Car Key интеграция с UWB: отдельное соглашение с CCC, сроки от 2 месяцев. Стоимость рассчитывается индивидуально.







