文章目录

  • 简介
  • 一、分类
  • 二、创建凭证
    • 1. Creating and Populating the Pass Package(创建一个包含Pass所有信息和资源文件的文件夹)
    • 2.Setting the Pass Type Identifier and Team ID(设置PassTypeId和Team ID)
    • 3. Signing and Compressing the Pass(签名并压缩 `pass` )
    • 4. 查看 `pass`
    • 5. 修改信息,并重新生成 `pass`
    • 6. `pass.json` 设计说明
  • 三、在APP中提供Wallet凭证支持(添加凭证到Wallet)
  • 四、更新凭证
    • 1. 更新流程简介
    • 2. `web server` 注意事项
  • 五、Demo
  • 六、参考

简介

Wallet 的前身叫 Passbook,对用户来说,,它是一个票据凭证的综合管理中心,你可以把你的登机牌、电影票、优惠券等所有凭证添加到 Wallet,在里面可以查看凭证的余额、使用期限、使用地点等信息,使用时直接通过 Wallet 就能看到你所有的票据和凭证。

对于开发者而言,支持 Wallet ,可以给用户提供更统一便利的管理凭证的方式,便于用户使用。

Wallet 可以通过 “Passes” 来进行添加,苹果的 Passes 可以包含图片(logo、thumbnail)、条码、二维码、文字、日期等,可以通过 APNs 推送更新信息。

pass 库包含用户的 passes 信息, 用户可以通过 Wallet 查看和管理 passes

一、分类

可以被添加到Wallet的票据凭证共分为以下5类。

  • Boarding pass
    登机牌,如飞机票、火车票

  • Coupon
    优惠券,如打折券、减免券。一般为一次性使用的券。

  • Event ticket
    票,如电影票、演出票

  • Generic
    通用类型。

  • Store card
    购物卡。可以显示余额等信息。

你可以根据你的App需要支持的类型来选择票据凭证的类型。

二、创建凭证

在这里创建一个电影票 pass 来举例。

1. Creating and Populating the Pass Package(创建一个包含Pass所有信息和资源文件的文件夹)

Passes 的创建需要一个 pass.json 文件,这个 pass.json 文件包含 pass 的所有信息,如票据类型,logo、icon资源图片,过期时间、票据描述等信息。将 pass.json 和需要的图片资源文件一起放入一个文件夹,然后从这个文件夹生成 Pass。

创建步骤:

  1. 创建一个 filmTicket.pass 文件夹,使用 .pass 作为文件夹的后缀名,放在 Documents 目录下。
  2. 这里下载示例文件。
  3. 解压缩,将 Event.pass 文件夹中的所有内容拷贝到 filmTicket.pass 文件夹中。

2.Setting the Pass Type Identifier and Team ID(设置PassTypeId和Team ID)

每一个 pass 都需要通过一个 PassTypeID 关联到一个开发者账号下。所有的 PassTypeID 都通过开发者账号中心管理。想要创建 pass ,必须到开发者账号下配置你的 PassTypeID

**创建 PassTypeID **

  1. 到你的开发者账号中心,找到Certificates, Identifiers & Profiles,选择 Identifiers
  2. Identifiers 下, 选择 Pass Type IDs
  3. 点击右上角 + 按钮。
  4. 填写描述和 Pass Type ID 并提交。

查看 Team ID:

到开发者账号下,选择 MemberShip

**添加 PassTypeIDTeam IDpass.json **

打开 filmTicket.pass 文件夹下的 pass.json , 将 PassTypeIDTeam ID 替换为自己开发者账号下的。

{
...
"passTypeIdentifier" : "your pass type identifier",
"teamIdentifier" : "your Team ID",
...
}

3. Signing and Compressing the Pass(签名并压缩 pass

As part of building your production environment, you will need to set up a system for automatically signing and compressing passes as described in Passes Are Cryptographically Signed and Compressed. For this tutorial, a very simple tool for signing passes is included.

下载签名证书

  1. 在 Certificates, Identifiers & Profiles, 选择 Identifiers
  2. 在 Identifiers 下,选择 Pass Type IDs.
  3. 选择你已经创建好的 pass type identifier, 点击编辑。
  4. 如果已经存在证书文件,直接点击下载即可。如果没有,点击创建,按照提示创建一个(与创建 APNs 推送证书基本一样)。

生成 .pkpass 后缀的压缩文件

  1. 找到上面已经下载的文件包,找到 signpass 工程,使用 Xcode 打开并运行。
  2. 选中 Xcode 中 Products 文件夹下的 signpass 文件,右击鼠标,Show in Finder
  3. 拷贝 signpass 文件到 filmTicket.pass 文件夹的同级目录(Documents)下。
  4. 执行以下语句:
cd ~/Documents
./signpass -p filmTicket.pass

上面语句会生成 filmTicket.pkpass 文件,也就是我们需要的压缩后的 pass

4. 查看 pass

在 Mac 中直接双击就能打开查看。或者打开你的模拟器,将 filmTicket.pkpass文件拖拽到你的模拟器,就能添加这个 pass 到你模拟器的 Wallet 应用。

5. 修改信息,并重新生成 pass

原有 pass.json 文件内容

{"formatVersion" : 1,"passTypeIdentifier" : "pass.com.apple.devpubs.example","serialNumber" : "nmyuxofgna","teamIdentifier" : "A93A5CM278","webServiceURL" : "https://example.com/passes/","authenticationToken" : "vxwxd7J8AlNNFPS8k0a0FfUFtq0ewzFdc","relevantDate" : "2011-12-08T13:00-08:00","locations" : [{"longitude" : -122.3748889,"latitude" : 37.6189722},{"longitude" : -122.03118,"latitude" : 37.33182}],"barcode" : {"message" : "123456789","format" : "PKBarcodeFormatPDF417","messageEncoding" : "iso-8859-1"},"organizationName" : "Apple Inc.","description" : "Apple Event Ticket","foregroundColor" : "rgb(255, 255, 255)","backgroundColor" : "rgb(60, 65, 76)","eventTicket" : {"primaryFields" : [{"key" : "event","label" : "EVENT","value" : "The Beat Goes On"}],"secondaryFields" : [{"key" : "loc","label" : "LOCATION","value" : "Moscone West"}]}
}

需要修改 eventTicket 的子级内容

  1. 描述信息
  2. 条形码改为二维码,添加描述
// 修改前
"barcode" : {"message" : "123456789","format" : "PKBarcodeFormatPDF417","messageEncoding" : "iso-8859-1"
}
// 修改后
"barcode" : {"altText" : "订单号:123456","message" : "123456789","format" : "PKBarcodeFormatQR","messageEncoding" : "iso-8859-1"
}
  1. 删除原来生成的 filmTicket.pkpass 文件,重复上面的生成步骤。

6. pass.json 设计说明

  1. 样式和内容规范
  2. 相关 key-value 说明

三、在APP中提供Wallet凭证支持(添加凭证到Wallet)

直接上代码:记得 import PassKit

  1. 将上个步骤生成的 .pkpass 文件拖拽到工程,然后加载本地凭证数据。
@IBAction func showWalletPass(_ sender: Any) {guard PKPassLibrary.isPassLibraryAvailable() else {showAlert(message: "您的设备不支持Wallet")return}guard let fileUrl = Bundle.main.url(forResource: "Lollipop", withExtension: "pkpass") else {showAlert(message: "未找到票据凭证")return}guard let passData = try? Data.init(contentsOf: fileUrl) else {showAlert(message: "未找到票据凭证")return}var error: NSError?let pass = PKPass(data: passData, error: &error)if error != nil {showAlert(message: "\(String(describing: error?.localizedDescription))")return}if PKAddPassesViewController.canAddPasses() {showPass(pass: pass)} else {showAlert(message: "您的设备不支持Wallet")}
}
  1. 显示凭证信息:
func showPass(pass: PKPass) {passToAdd = passlet addPassVc = PKAddPassesViewController(pass: pass)addPassVc.delegate = selfself.present(addPassVc, animated: true) {}
}
  1. 用户添加、取消后的回调操作:
extension ViewController: PKAddPassesViewControllerDelegate {func addPassesViewControllerDidFinish(_ controller: PKAddPassesViewController) {controller.dismiss(animated: true) { [weak self] inself?.showLookAlert(message: "添加完成")}}
}
  1. 查看 Wallet 中已添加的凭证:
guard let passURL = self?.passToAdd?.passURL else {return
}
if UIApplication.shared.canOpenURL(passURL) {UIApplication.shared.open(passURL, options: [:], completionHandler: { _ in})
}

四、更新凭证

当你购买了电影票,需要在指定的时间前去观看,超过了这个时间就过期了,那就需要更新凭证。
任何一个凭证凭证都可以通过它的 authentication tokenserial number 更新。

1. 更新流程简介

Updating a pass is a cooperative effort between the user’s device, Apple’s servers, and your servers. At a high level, it consists of the following steps, shown in Figure 6-1:

  1. pass 被设置为支持更新和安装,并且用户设备注册到你的服务器获取更新。
  2. 如果有变更,则触发更新,你的服务器发送推送通知。
  3. 用户收到推送后,从你的服务器查询更新的列表。
  4. 用户从你的服务器获取每个 pass 的最新版本到自己的设备。

更新过程中需要使用的信息:

2. web server 注意事项

  1. 备份私钥和证书,并将其保存在安全的位置。
  2. 避免将私钥存储在Web服务器上,因为Web服务器通常具有较大的攻击面。一个更安全的方法是具有不同的服务器句柄创建和签名传递,并将完成的传递推送到您的Web服务器。
  3. 当与您的Web服务通话时,序列号,传递类型标识符和last-update标签全部包含在URL中。使其过长可能会对对URL长度造成限制的系统造成问题。
  4. 不要更改更新中的身份验证令牌。因为 passes 不能保证被更新,所以仍然可能有具有旧通行证和旧认证令牌的设备。您的服务器必须根据已经有效的每个令牌的列表来检查身份验证令牌。

五、Demo

WalletDemo

六、参考

Pass.json官方说明
Pass创建步骤官方文档

iOS PassKit Wallet 开发(Passbook 开发)相关推荐

  1. iOS 7 iPhone iPad应用开发技术详解

    2019独角兽企业重金招聘Python工程师标准>>> iOS 7 iPhone iPad应用开发技术详解 本书内容全面,从 Objective-C语法知识.iOS功能特 性,到高级 ...

  2. iOS应用内付费(IAP)开发步骤列表

    iOS应用内付费(IAP)开发步骤列表 前两天和服务端同事一起,完成了应用内付费(以下简称IAP, In app purchase)的开发工作.步骤繁多,在此把开发步骤列表整理如下.因为只是步骤列表, ...

  3. iOS 移动端生成工具开发

    代码地址如下: http://www.demodashi.com/demo/11284.html 一.准备工作 编译环境 xcode 用于生成冗余架构代码, 实现生成零耦合架构 二.程序实现 上个月的 ...

  4. 《iOS开发完全上手——使用iOS 7和Xcode 5开发移动与平板应用》之Objective-C新手训练营

    编写Hello World应用程序通常被认为,是学习任何编程语言的第一步.在这一章,你将创建iOS版的Hello World应用程序作为起步,快速了解Xcode这个开发iOS应用程序的主要工具.   ...

  5. 《iOS开发全然上手——使用iOS 7和Xcode 5开发移动与平板应用》之Objective-C新手训练营...

         编写Hello World应用程序通常被觉得,是学习不论什么编程语言的第一步.在这一章,你将创建iOS版的Hello World应用程序作为起步,高速了解Xcode这个开发iOS应用程序的主 ...

  6. 《iOS开发完全上手——使用iOS 7和Xcode 5开发移动与平板应用》之Objective-C

    2019独角兽企业重金招聘Python工程师标准>>> 编写Hello World应用程序通常被认为,是学习任何编程语言的第一步.在这一章,你将创建iOS版的Hello World应 ...

  7. ios 界面开发_iOS开发新手指南:界面-第一部分

    多年来,Apple凭借其iPhone和iPad系列一直是移动世界的领先行业. 尽管它可能在每次正式发布时都会大肆宣传,但它在移动平台中也占有很大的市场份额,这可能是大多数客户希望他们的应用程序存在于A ...

  8. iOS 7: iPhone/iPad应用开发技术详解

    iOS 7: iPhone/iPad应用开发技术详解 作者:刘一道 出版社:机械工业出版社 出版年:2013-11 页数:507 定价:79.00元 ISBN:9787111440512 样章下载:h ...

  9. unity5.X简易的3d跑酷游戏源码。支持安卓+IOS双端 C#语言开发。

    unity5.X简易的3d跑酷游戏源码.支持安卓+IOS双端 C#语言开发.拿来学习研究和二次开发都很不错. 完整源码下载 unity5.X简易的3d跑酷游戏源码.支持安卓+IOS双端C#语言开发-U ...

最新文章

  1. 深度学习概述:从感知机到深度网络(找到一篇大牛的文章快围观)
  2. 逆天的IE7中,诡异的横向滚动条
  3. c# 无损高质量压缩图片代码
  4. python 生成字符串_Python字符串生成器,按照特定的顺序
  5. PAT 1086 Tree Traversals Again
  6. 7zip压缩zip格式时文件名支持中文的设置
  7. linux vi 排序命令,10 个你必须掌握的超酷 VI 命令技巧
  8. CheckboxPreference 改造
  9. pdf格式的PPT如何保留动画效果?
  10. MYS-6ULX-IOT 开发板测评——使用MfgTool更新系统
  11. floor关键字用法:
  12. Kotlin版注解处理器Annotation Processor
  13. 数学建模之线性回归的标准型以及例题
  14. acwing 2058. 笨拙的手指
  15. 我的桌面布局(网络安全软件推荐)
  16. vue面试题(自用)
  17. android 订餐系统,一种基于Android平台手机订餐系统的实现方法
  18. JS实现轮播图特效(带二级导航)
  19. Dubboamp;hsfamp;Spring-cloud的区别
  20. 简单密码/华为机试(C/C++)

热门文章

  1. Matlab 仿真——单自由度倒立摆(1)系统建模
  2. 雪花算法生成id重复问题
  3. QPushButton实现图片在上文本在下
  4. 回流焊机T962维修
  5. Linux之旅 9:正则表达式与文件格式化
  6. html水平镜像和垂直镜像,css实现镜像翻转的方法有哪些
  7. 计算机组成原理 — 服务器 — DELL 服务器使用 iDRAC 进行 Firmware 和 BIOS 版本升级
  8. zoj 1683 Fishnet
  9. Linux之history命令显示时间和IP
  10. 打开网站显示您与此网站建立的连接不安全怎么办?