2013-05-29 3 views
4

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

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

ответ

2

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

Использование данных для инициирования PKPass Объект.

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

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

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

+0

так что я могу т поймать его как файл pkpass, мне нужно, чтобы получить строку, а затем пойти с методом initWithData? – d3p0nit

+0

Каждый файл является двоичным, будь то .pkpass или .png. Вы должны найти способ получить данные файла. Если вы используете webservice, используйте кодировку base64 и декодируйте ее в NSData. если вы напрямую потоки, вы можете получить NSData. Как только вы получите NSData, скажите iOS, что это действительно PkPass, инициировав Object. – Vignesh

+0

Могу ли я использовать NSData * data = [NSData dataFromBase64String: originalString]; декодировать строку base64? – d3p0nit

1

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

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

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

+0

Да, я сделал это точно так же, просто были некоторые проблемы, как я должен был отправить данные прохода, чтобы открыть его надлежащим образом ... он работает сейчас, но спасибо за ответ – d3p0nit

0

Если вы размещаете ссылку на элемент 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) 
Смежные вопросы