Apple Wallet
Apple Wallet — встроенное приложение iPhone для хранения карт, билетов, купонов и пропусков в формате .pkpass. Пропуск показывает QR- или штрих-код на экране и может обновляться удалённо по push-уведомлению.
Что хранит Apple Wallet
Apple Wallet — системное приложение iPhone и Apple Watch, в котором лежат не документы в привычном смысле, а пропуска (passes): карты лояльности, купоны, посадочные талоны, билеты на события, студенческие и клубные карты, ключи от номеров и автомобилей. Каждый пропуск это файл формата .pkpass, подписанный выпустившей его организацией.
Спецификация делит пропуска на пять стилей, и от стиля зависит вид карточки на экране:
| Стиль | Назначение | Характерная деталь |
|---|---|---|
| boardingPass | Посадочный талон | Поле вида транспорта, вырез по краю карточки |
| eventTicket | Билет на мероприятие | Крупное фоновое изображение, дата и место |
| storeCard | Карта лояльности | Поле баланса или уровня программы |
| coupon | Купон, промо | Полоса-изображение и срок действия |
| generic | Пропуск, абонемент | Свободный набор полей |
Отдельно от пропусков в Wallet живут платёжные карты. В России карты российских банков в Apple Pay не подключаются, и оплата телефоном на iPhone штатными средствами недоступна — этот сценарий закрывают платёжный стикер и оплата по QR через СБП. При этом сами пропуска работают в полном объёме: билет, купон и карта лояльности с кодом на экране от платёжной функции не зависят.
Как устроен файл .pkpass
Формат .pkpass — обычный ZIP-архив с фиксированным набором файлов внутри:
- pass.json — описание пропуска: идентификаторы passTypeIdentifier и teamIdentifier, серийный номер, цвета, поля header, primary, secondary, auxiliary и back, а также блок barcodes;
- изображения — icon.png, logo.png и в зависимости от стиля strip, thumbnail или background, в нескольких масштабах для разной плотности экрана;
- manifest.json — список файлов с их SHA-1-хэшами;
- signature — подпись манифеста в формате PKCS#7 сертификатом Pass Type ID, выпущенным в аккаунте разработчика Apple.
Подпись и делает пропуск пропуском: изменить содержимое файла в обход выпускающей стороны нельзя — iPhone проверит хэши и отвергнет архив. Блок barcodes задаёт, какой код нарисовать на карточке: PKBarcodeFormatQR, PKBarcodeFormatPDF417, PKBarcodeFormatAztec или PKBarcodeFormatCode128. Кодировку сообщения обычно указывают как iso-8859-1 — это требование совместимости считывателей, и с ним связана львиная доля проблем при попытке зашить в код кириллицу.
Два поля отвечают за то, чтобы карточка появлялась на экране блокировки в нужный момент: relevantDate с датой и временем события и locations с координатами точек. Обновление содержимого идёт через webServiceURL и authenticationToken: сервер отправляет тихое push-уведомление, устройство приходит за новой версией пропуска и перерисовывает баланс, место в самолёте или новый код.
Как выдать карту или билет клиенту
Путей два. Первый — собрать пропуск самостоятельно: получить сертификат Pass Type ID в аккаунте разработчика Apple, сформировать pass.json, посчитать хэши, подписать манифест и отдать файл по ссылке с MIME-типом application/vnd.apple.pkpass. Второй — воспользоваться готовым конструктором карт лояльности, который берёт подпись и рассылку обновлений на себя.
Типичная схема выдачи: клиент сканирует код на кассе или в чеке, попадает на страницу с формой, получает свой .pkpass и добавляет его в Wallet одним нажатием. Для Android нужна параллельная версия того же пропуска в Google Wallet — форматы у платформ разные, единого файла не существует. Оба сценария сравниваются в материале про QR-код в Apple Wallet и Google Wallet, а перенос физических карт магазинов в телефон подробно описан в статье про виртуальную карту лояльности.
Если выпускать подписанные пропуска пока рано, работает промежуточное решение: код с номером участника программы, распечатанный на пластике или показанный со страницы. Линейный штрих-код для кассового сканера собирается в генераторе штрих-кодов и читается тем же оборудованием, что и коды на упаковке.
Что ломается на практике
Проблемы с пропусками повторяются от проекта к проекту, и почти все они лечатся до релиза.
- Сканер не читает код с экрана. Лазерные считыватели в принципе не видят изображение на дисплее — нужен имидж-сканер. Помогают также максимальная яркость, отключённый автоповорот и снятая матовая плёнка.
- Код с кириллицей не проходит. При iso-8859-1 в поле messageEncoding русские символы теряются; в содержимое кода кладут латиницу и цифры, а человекочитаемый текст выносят в поля пропуска.
- Обновления не приходят. Причина обычно в веб-сервисе: неверный authenticationToken, недоступный webServiceURL или отсутствие регистрации устройства.
- Карточка не всплывает на экране блокировки. Не заданы relevantDate или locations, либо событие уже прошло.
- Пропуск не добавляется. Битая подпись, просроченный сертификат или отдача файла с неправильным MIME-типом — браузер тогда предлагает скачать архив вместо открытия в Wallet.
Отдельно про офлайн: показать добавленный пропуск можно без интернета, содержимое хранится на устройстве. Связь нужна только для получения обновлений и для первичного добавления. Это делает Wallet удобным для посадочных талонов и билетов в местах, где сеть перегружена — на стадионе или в зоне выхода на посадку.
Частые вопросы
Работает ли Apple Pay в России?
Карты российских банков в Apple Pay не подключаются, поэтому оплатить покупку прикладыванием iPhone к терминалу штатными средствами не получится. Остальные функции Wallet не затронуты: карты лояльности, купоны, билеты и посадочные талоны в формате .pkpass добавляются и показываются как обычно. Для оплаты телефоном используют стикер или QR-код по СБП.
Как добавить в Wallet свою карту лояльности?
Магазин должен выпустить её как подписанный пропуск .pkpass — тогда добавление происходит по ссылке или по коду на чеке. Произвольную картинку со штрих-кодом Wallet не принимает: без подписи это не пропуск. Если у сети нет такой карты, номер участника обычно хранят в заметках или в стороннем приложении для карт.
Почему кассовый сканер не читает код с экрана iPhone?
Старые лазерные сканеры считывают отражённый луч и с экраном не работают в принципе — нужен имидж-сканер с камерой. Если оборудование подходящее, мешают низкая яркость, блики, матовая защитная плёнка и наклон телефона. Поднимите яркость вручную и держите экран перпендикулярно окну считывателя.
Нужен ли интернет, чтобы показать билет?
Нет. Добавленный пропуск хранится на устройстве и открывается офлайн, поэтому билет покажется даже в самолётном режиме. Связь требуется в двух случаях: при первом добавлении файла и при обновлении содержимого — например, когда авиакомпания меняет выход на посадку или магазин пересчитывает баланс бонусов.
Чем .pkpass отличается от картинки с кодом в галерее?
Пропуск подписан выпустившей организацией, содержит структурированные поля, срок действия и умеет обновляться удалённо. Он всплывает на экране блокировки в нужное время или в нужном месте и не теряется среди фотографий. Скриншот кода работает только как разовое изображение: изменить его данные без пересъёмки нельзя.
Синхронизируются ли пропуска между iPhone и Apple Watch?
Да, пропуска переносятся на связанные часы, и код показывается прямо на их экране — удобно, когда телефон в кармане. Часть карточек можно скрыть в настройках, чтобы не засорять список. Резервная копия пропусков попадает в iCloud, поэтому при переносе на новый iPhone карты и билеты обычно восстанавливаются вместе с системой.