【发布时间】:2013-05-29 14:59:37
【问题描述】:
嗨,首先我必须承认我真的不明白整个 Passbook 主题是如何运作的。 所以这是我的情况: 我有一个创建 .pkpass 文件的后端系统来存储它们并创建一个 URL。 当我在浏览器中打开此 URL 时,它会直接开始下载 pass 文件。 如何使用我的 ios 应用程序接收或打开此文件?
提前致谢。
【问题讨论】:
标签: iphone ios backend passbook
嗨,首先我必须承认我真的不明白整个 Passbook 主题是如何运作的。 所以这是我的情况: 我有一个创建 .pkpass 文件的后端系统来存储它们并创建一个 URL。 当我在浏览器中打开此 URL 时,它会直接开始下载 pass 文件。 如何使用我的 ios 应用程序接收或打开此文件?
提前致谢。
【问题讨论】:
标签: iphone ios backend passbook
您可以使用网络服务来获取通行证数据。 Webservices 可以以 base64(NSString) 格式发送您的 pass 数据,然后您将其解码以获取 NSData。
使用数据发起PKPass对象。
PKPass *pass = [[PKPass alloc] initWithData:passData error:&err];
获得 PKPass 后,您可以使用 PKAddPassesViewController 在应用内显示它。你可以找到详细解释here。
注意:您可以使用NSUrlConnection直接从URL下载Pass数据,并使用下载的数据创建PKPass。
【讨论】:
另一种方式..更简单,也可以在移动网络应用程序中使用。编写一个简单的 Web 服务来返回此 pass 下载 URL,然后在您的应用程序(Web 或本机 ios)中解析 json/xml(取决于响应类型),然后在 safari 中调用该 URL。
从原生应用调用 [[UIApplication sharedApplication] openURL:passdownloadURL];
我在我的项目中使用过它,效果很好!!
【讨论】:
如果您在网站上托管指向 PKPass 项的链接,您可以通过查看 HTTPURLResponse 上的 mimeType 属性来检查页面内容是否真的是 PKPass 项,该属性应为“application/vnd.apple.pkpass”。 确认后,使用 URLRequest 下载 .pkpass 数据并将数据传递给 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 )
【讨论】: