Статьи

Трефовый Валет

Структура карты

Что же представляет собой карта с точки зрения разработчика? Карта – это архив с расширением .pkpass. Он содержит в себе все данные, необходиимые для отображения и работы карты. Содержимое архива – в таблице ниже.

Файл Назначение
background.png Фоновая картинка для карты.
footer.png Картинка рядом со штрихкодом
icon.png Иконка для уведомлений и писем
logo.png Логотип карточки. Отображается слева сверху
manifest.json Реестр всех включанымх файлов
signature PKCS7 подпись
pass.json Внешний вид и информация на карте
strip.png Картинка, находящаяся сзади основного описания карточки
thumbnail.png Дополнительная картинка (уточнить)

Существуют следующие типы карт:

  • Посадочный билет: на самолет или поезд. Обычно купон работает на одну поездку;
  • Купон: для купонов и специальных предложений;
  • Билет на событие: может работать как для одного события, так и для целого сезона;
  • Скидочная карта: карты лояльности, скидочные или подарочные карты;
  • Карта общего вида: если ничего из вышеперечисленного не подходит под ваш случай: например, карта для поездок на метро или пропуск в спортзал.

Рассмотрим схематично внешний вид разных карт. Картинки лучше называть так, как это указано в таблице выше.

Скидочная карта

Структура pass.json

Обязательные поля. Содержат Pass Type ID, Team ID, название организации и т.п.
Ключи для связанных приложений. Нужны для отображения приложений, которые нужно «ассоциировать» с картой.
Ключи «срока годности» карточки.
Ключи актуальности. Например, координаты местности, где карта может быть использована, или начало события, для которого она предназначена.
Ключ стиля. В начале статьи были перечислены 5 видов карт для Wallet. Каждому из них соответствует свой стиль. Такой ключ должен быть строго один.
Ключи визуального оформления карты. Помимо очевидного, содержат в себе информацию о штрихкоде, отображаемом на карте.
Ключи web-сервисов. Вы можете использовать web-сервисы для взаимодействия с картой, например, автоматически ее обновлять.
NFC-ключи. Содержат дополнительную информацию для Apple Pay транзакции.

Теперь обо всем подробнее.

Баркод

Самая важная часть карты. В него зашивают идентификационный номер карты (например, номер физической карты или номер билета)

Важно чтобы сканер или любой другой инструмент умели считывать коды в нужной кодировке

Ключ в JSON Тип данных Описание
altText String Опциональный текст, отображаемый рядом с баркодом в том случае, если баркод не считывается.
format String Формат баркода. Может принимать значения: PKBarcodeFormatQR,
PKBarcodeFormatPDF417,
PKBarcodeFormatAztec,
PKBarcodeFormatCode128
message String Код или номер карты, зашифрованный в баркод.
messageEncoding String Кодировка сообщения. Обычно iso-8859-1

Валет треф

Крестовый валет традиционно трактуется как молодой человек с темными волосами. Это может быть кто-то близкий из семьи, преданный товарищ или коллега по работе. По возрасту это может быть ученик или студент.

В целом карта характеризует юношу энергичного, общительного, активного, с вероятными частыми сменами настроения, пристрастий и интересов.

Выпадающий в раскладе крестовый валет может обозначать родственника, нуждающегося в помощи.

Если речь идет о самом гадающем, то он символизирует получение помощи и поддержки в сложной ситуации. Основное толкование карты: суматоха и суета, творческий упадок, плохие новости.

Если с крестовым валетом в раскладке выпадут крестовые король или туз, то неприятности и хлопоты ожидаются серьезные. Однако если он будет первым выпавшим из всех валетов, то можно рассчитывать на осуществление задуманного в полном объеме.

Когда рядом ложится восьмерка крестей, это означает внезапную радостную весть. Если выпадет семерка червей, нужно приготовится к существенным хлопотам, которые связаны с домашними делами.

Важно не только положение в раскладе, но и сочетание с другими картами. Так, лежащий в прямом положении рядом с любыми червонными картами он будет трактоваться верным другом, поверенным в делах или тем, кто способен хранить тайны

Перевернутая

В перевернутом положении валет треф, ложащийся рядом с любыми червонными картами, трактуется как предстоящий любовный или дружеский обман молодого человека, который отождествляется с этой картой.

Прямая

В плане отношений описываемая карта говорит о том, что кому-то из родственников или друзей необходима помощь. При этом может иметься в виду как дальняя семейная связь, так и любовные отношения, близкая дружба. В случаях, когда речь идет о помощи тому, на кого делается расклад, то валет треф указывает на обязательную поддержку, причем в полном объеме.

Если речь идет о предстоящих или желаемых отношениях, то эта карта демонстрирует прекрасные перспективы, так как компаньон отличается умением делать выводы и уклоняться от ошибок. Кроме того, партнер будет интересным, а находиться с ним рядом будет комфортно.

Когда рядом ложится червонная десятка, это означает приятную неожиданность от возлюбленного или возлюбленной. Если рядом ложится бубновый туз, то следует ждать письма или сообщения от любимого человека.

Если валет ложится рядом с крестовой дамой, это трактуется, как желание обозначенного юноши вступить в брак или серьезные отношения, кроме того, он готов предъявить серьезные доказательства своих намерений. В случае, когда карта оказывается рядом с бубновой дамой, молодому человеку грозят неприятности от коварной женщины, находящейся рядом с ним.

Взаимоотношения с другими людьми

Валет Пик в нынешнем своем воплощении должны отработать довольно непростую любовную карму. В их жизни существуют некоторые неизбежные взаимоотношения, предназначение которых состоит в том, чтобы показать им ценность правдивости и ответственности и настоящий смысл их здоровых сексуальных влечений. Пиковые Валеты — чрезвычайно творческие, романтические и независимые личности, и сочетание всех этих качеств может вовлечь их в беду, если они не будут руководствоваться мудростью и честностью.

Более всех остальных карт Пиковые Валеты мечтают об идеальном любовнике или партнере, и эта мечта не дает им покоя всю жизнь. Она заставляет их часто менять возлюбленных в поисках более совершенного кандидата на роль идеала. Не исключено, что ни один партнер так и не сможет соответствовать высоким идеалам любви Пикового Валета. Но успех в любви всегда находится в его собственных руках, поэтому ему некого винить, кроме самого себя, если он не найдет удовлетворения в области любовных отношений.

Получение информации о добавленных картах

Чтобы получить информацию о картах, имеющихся в Wallet и относящихся к вашему приложению, необходимо обратиться к объекту PKPassLibrary.

Таким образом, можно понять, добавлена карта или нет, а также обновить интерфейс. Кроме того, через PKPassLibrary карты можно обновлять и удалять. Обновлять карты можно и через веб-сервисы, но в этой статье мы не будем рассматривать такой вариант.

Проверка на уникальность

Поскольку в вашем сервисе, как правило карта привязана к аккаунту, в приложении скорее всего придется как-то определять принадлежность карты к текущему пользователю. Предлагаю делать это через . Например, задавать в качестве id пользователя или номер карты.

Тестирование

Apple предоставляет примеры pkpass для разных типов, можно ориентироваться на них.Apple Wallet samples
Чтобы увидеть то, как выглядит карта, можно, добавить pkpass в проект (см. «Добавление карты»). Процесс добавления/удаления уже рассмотрен выше, осталось только напомнить, что приложение не будет видеть уже добавленные карты, если карта для Wallet создавалась на одном аккаунте разработчика, а сама разработка велась с другого аккаунта (актуально для аутсорс-компаний). При этом добавлять карты можно без проблем.
Проверить, корректно ли закодирована информация в штрихкоде, можно с помощью любого сканера QR-кодов. И точно необходимо проверить корректность работы с настоящим сканером.

Заключение

В статье был рассмотрен процесс создания и дизайна карты, а также процесс интеграции c приложением и проблем, которые могут возникнуть. Я намерено не касался вопросов интеграции с веб-сервисами и обновления карт, и надеюсь сделать это в следующей статье.

Используемые материалы:

https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/PassKit_PG/Creating.htmlhttps://itechroof.wordpress.com/2015/11/30/apple-wallet-part-13/https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/PassKit_PG/Updating.html

Отдельное спасибо mehdzor за аккаунт разработчика для тестов.

Взаимоотношения с другими людьми

Такой строго интеллектуальный и негибкий подход к жизни может создавать для Трефового Валета острые ситуации в любовных отношениях. В царстве любви не все подчиняется разуму. Но, тем не менее, любовная карма у Валета Треф не так уж плоха. Люди с этой Картой Рождения нуждаются в партнере, который в первую очередь будет для них другом и предоставит им некоторую свободу, позволив оставаться самими собой. Если у Трефового Валета есть именно такой партнер, то он будет предан и верен ему. Трефовые Валеты-мужчины — великолепные любовники, а женщины — отличные друзья. Им часто приходится решать проблемы со слабым здоровьем своих возлюбленных, супругов или членов семьи. В других случаях Трефовых Валетов преследуют проблемы с собственным здоровьем, мешающие нормальным взаимоотношениям с близкими людьми. В большинстве случаев неполадки со здоровьем вызываются у них какими-либо эмоциональными причинами или же обусловлены обстоятельствами семейной или любовной жизни.

Оборотная сторона

На оборотной информационной части можно разместить дополнительную информацию: условия использования, политику автообновления, контактные данные и ссылку на приложение, к которому относится карта. На рисунке представлено соответствие полей в pass.json и внешнего вида обратной стороны карты. Если в value-поле есть ссылки, номера телефона и т.п., они подсветятся автоматически.

Создание карты. Часть 2

Итак, картинки готовы, pass.json сформирован, осталось собрать все это вместе. Для этого заполним manifest.json (см. таблицу 1), куда необходимо включить все картинки и pass.json. Получается примерно так:

С этого момента менять ничего не нужно, поскольку SHA будет некорректным, в случае изменений необходимо сгенерировать SHA заново.

Далее нужно создать Pass Type ID в кабинете разработчика и сделать для него сертификат. Процедура должна быть более-менее знакомая, если ранее вы создавали, например, Provisioning профили.

Далее заходим в ключницу (Keychain) и экспортируем оттуда Apple Worldwide Developer Relation Certificate (WWDR) как .pem.

Оттуда же экспортируем созданный Pass Type ID как .p12. На этом этапе ключница попросит вас ввести пароль для сертификата

При этом пароль вводить необязательно.
Обратите внимание, что все дальнейшие действия надо производить в одной папке, где уже должны лежать manifest.json, pass.json и картинки

Теперь необходимо сгенерировать подпись, которой будем подписывать архив. Для начала экспортируем Pass Type ID и ключ к нему как .pem.

и

Теперь мы готовы к генерации подписи. Сделаем это командой:

Итак, у нас все готово, осталось только собрать архив, делаем это командой:

Обращаю внимание, что тут должны быть перечислены все файлы, в которые вы хотите включить архив данных для карты(.pkpass).
В итоге мы получим .pkpass файл, который можно открывать на компьютере. Мы увидим превью карты, внешний вид которой может отличаться от вида на телефоне.
Все это можно сделать чуть проще

Apple предоставляет утилиту (Apple Wallet sample meterials), которая берет на себя все подсчеты SHA (файл можно не делать самостоятельно) и работу по созданию подписей. Чтобы ей воспользоваться, нужно собрать проект и поместить файл в папку со всеми необходимыми ресурсами.

В целом структура должна выглядеть примерно так:

Далее выполняем команду:

Wallet — это название папки, в которой лежат все ресурсы. На выходе получаем файл wallet.pkpass. Его содержимое можно посмотреть, разархивировав wallet.pkpass.

Не исключено, что создание pkpass будет вынесено на бэкенд, в таком случае надо будет передать разработчикам WWDR, сертификат для Pass Type ID в виде .p12 и пароль от него.

Интеграция с приложением

Для того чтобы приложение имело возможность добавлять карты в Wallet, необходимо включить эту возможность в App ID и также включить эту возможность в Capabilities в проекте.

Это необходимо для полноценной корректной работы с Wallet. В противном случае не получится считывать карты с Wallet и, например, не будет возможности понять, добавлена наша карта или нет

Также важно отметить, что team id в pass.json должен совпадать c team id, либо придется добавлять их вручную в entitlements и это может исправить ситуацию, но это я не проверял

В Валет треф крести ТВОРЧЕСКИЙ УМ

Творческая личность, нечестный человек… или то и другое вместе? Вполне возможно, что самый талантливый из Трефовых Валетов одновременно окажется и лучшим мошенником. Валет Треф — это карта незаурядного ума и финансовой одаренности. Люди с этой Картой Рождения энергичны и продуктивны. По своим блестящим умственным способностям они намного опережают обычных людей. Это люди эры Водолея, сочетающие в себе черты обоих полов. Они прогрессивны и олицетворяют собой вершину эволюции нашего общества и цивилизации.Валеты Треф обладают чрезвычайно утонченным умом и всегда могут с его помощью хорошо зарабатывать на жизнь. Нередко они становятся антрепренерами (чаше мужчины, чем женщины). Если работа позволяет им проявить творческие способности, они могут найти собственную «нишу» и получать настоящее удовольствие, одновременно с этим зарабатывая большие деньги. При всем своем блестящем уме Валеты Треф часто бывают неуступчивыми и любят спорить (что символизирует Двойка Треф в качестве Карты Марса). Обычно они не понимают, что часто не ладят с окружающими именно по причине собственной склонности к дебатам. Трефовые Валеты готовы спорить при любом удобном случае, и они всегда получают удовольствие от возможности проявить свою изобретательность. Упрямство иногда мешает Трефовым Валетам увидеть истинное положение вещей, но зато оно дает им возможность доводить до конца начатые дела и отстаивать то, во что они верят.

Краткое описание значения карты:

  • творческие способности
  • мысли о будущем
  • общительность
  • актерские способности
  • способности к сновидениям
  • перекладывание ответственности за реализацию своих идей на других
  • незрелость в понимании проблем
  • пустая болтовня
  • отсутствие реализма

Будучи членом «королевской семьи», Трефовый Валет питает отвращение ко всему низменному, и недостатки окружающих его несколько раздражают. Ему требуется уважение и такое положение, при котором он со своими блестящими умственными способностями сможет беспрепятственно царить в мире творчества и знаний. Валет Треф никогда не испытывает недостатка в идеях, которые порой приносят ему огромные финансовые прибыли. Но, проявляясь с негативной стороны, он может быть безответственным, а иногда и нечестным. Валет Треф способен смотреть на вещи с таких различных сторон, что просто не может дать им однозначную положительную или отрицательную оценку.

Кроме того, он в состоянии очень быстро и правдоподобно убедить вас в том, что он способен объяснить практически все, что угодно. Впрочем, он не так уж много выигрывает от этого. Влияние Сатурна всегда напоминает Трефовому Валету о границах, которые удерживают его в рамках равновесия и честности. Серьезные неприятности начинаются лишь тогда, когда Валет Треф сам начинает верить в собственные выдумки, слишком далеко уходя от реальности.

В сущности Трефовые Валеты — добрые и бескорыстные люди. И несмотря на свою любовь к спорам, ко всем окружающим они относятся дружелюбно.

Ключи стиля

Ключ в JSON Тип данных Описание
primaryFields Основная информация о карте.
secondaryFields Второстепенная информация.
auxiliaryFields Поля для дополнительной информации. Опциональное
headerFields Заголовок карты. Отображается даже в том случае, когда карты видны списком.
auxiliaryFields Основная информация о карте.
transitType String Тип транспорта для карт-билетов. Может принимать следующие значения:
PKTransitTypeAir,
PKTransitTypeBoat,
PKTransitTypeBu`,
PKTransitTypeGeneric,
`PKTransitTypeTrain`.
backFields Массив полей, отвечающий за обратную сторону карты

JSON в данном случае имеет следующий вид:

Значение по ключу value может быть как числовым, так и строковым. Однако currencyCode вместе со строковым значением использовать не получится. Что касается auxiliaryFields и secondaryFields, их может быть несколько, и стоит следить за длиной строк, которые в них используются.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *