Получение .pkpass Passbook с URL-адреса без веб-просмотра

Привет, во-первых, я должен признаться, что действительно не понимаю, как на самом деле работает вся тема Passbook. Итак, вот моя ситуация: у меня есть серверная система, которая создает файлы .pkpass, сохраняет их и создает URL-адрес. Когда я открываю этот URL-адрес в своем браузере, он сразу начинает загружать файл прохода. Как я могу получить или открыть этот файл с помощью моего приложения ios?

Заранее спасибо.


person d3p0nit    schedule 29.05.2013    source источник


Ответы (3)


Вы можете использовать веб-сервисы для получения данных прохода. Веб-службы могут отправлять данные вашего прохода в формате base64 (NSString), и вы декодируете их, чтобы получить NSData.

Используйте данные, чтобы инициировать PKPass Object.

PKPass *pass = [[PKPass alloc] initWithData:passData error:&err];

Как только вы получите PKPass, вы можете использовать PKAddPassesViewController, чтобы показать его в приложении. Подробное объяснение можно найти здесь.

Примечание: вы можете напрямую загрузить данные Pass из URL-адреса, используя NSUrlConnection, и использовать загруженные данные для создания PKPass.

person Vignesh    schedule 29.05.2013
comment
поэтому я не могу поймать его как файл pkpass, мне нужно получить строку, а затем перейти к методу initWithData? - person d3p0nit; 31.05.2013
comment
Каждый файл является двоичным, будь то .pkpass или .png. Вы должны найти способ получить данные файла. Если вы используете веб-службу, используйте строку в кодировке base64 и декодируйте ее в NSData. если вы транслируете напрямую, вы можете получить NSData. Как только вы получите NSData, скажите iOS, что это действительно PkPass, инициировав объект. - person Vignesh; 31.05.2013
comment
могу ли я использовать NSData *data = [NSData dataFromBase64String:originalString]; декодировать строку base64? - person d3p0nit; 31.05.2013

другой способ... проще и может использоваться в мобильных веб-приложениях. напишите простую веб-службу, чтобы вернуть этот URL-адрес загрузки пропуска, затем проанализируйте json/xml (зависит от типа ответа) в своем приложении (веб-сайт или собственный ios), а затем вызовите URL-адрес в сафари.

из собственного вызова приложения [[UIApplication sharedApplication] openURL:passdownloadURL];

Я использовал его в своем проекте, и он работает потрясающе!

person vikas    schedule 14.06.2013
comment
Да, я сделал это так же, просто у меня были некоторые проблемы с тем, как мне нужно было отправить данные пропуска, чтобы открыть его правильно .... теперь это работает, но спасибо за ответ - person d3p0nit; 14.06.2013

Если вы размещаете ссылку на элемент PKPass на веб-сайте, вы можете убедиться, что содержимое страницы действительно является элементом PKPass, просмотрев свойство mimeType в HTTPURLResponse, которое должно быть «application/vnd.apple.pkpass». Как только вы подтвердите это, загрузите данные .pkpass с помощью URLRequest и передайте данные инициализатору PKPass следующим образом:

var error:NSError?
let passBookData = PKPass( data: data, error: &error )

if error != nil
{
    print( "Error opening pkpass file" )
    return
}
let pkPassVC = PKAddPassesViewController( pass: passBookData )
currentVC.present( pkPassVC, animated: true, completion: completion )
person spfursich    schedule 06.07.2017