iOS PassKit Wallet 开发(Passbook 开发)_wentianen的博客-程序员宝宝_passkit

技术标签: wallet  passbook  ios  

简介

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

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

image.png

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

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

一、分类

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

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

image.png

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

image.png

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

image.png

  • Generic
    通用类型。

image.png

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

image.png

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

二、创建凭证

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

image.png

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 文件夹中。
    image.png

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 并提交。
    image.png

查看 Team ID:

开发者账号下,选择 MemberShip
image.png

**添加 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 推送证书基本一样)。
    image.png

生成 .pkpass 后缀的压缩文件

  1. 找到上面已经下载的文件包,找到 signpass 工程,使用 Xcode 打开并运行。
  2. 选中 Xcode 中 Products 文件夹下的 signpass 文件,右击鼠标,Show in Finder
    image.png
  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. 描述信息
    image.png
  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 = pass
    let addPassVc = PKAddPassesViewController(pass: pass)
    addPassVc.delegate = self
    self.present(addPassVc, animated: true) {
    }
}
  1. 用户添加、取消后的回调操作:
extension ViewController: PKAddPassesViewControllerDelegate {
    func addPassesViewControllerDidFinish(_ controller: PKAddPassesViewController) {
        controller.dismiss(animated: true) { [weak self] in
            self?.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 的最新版本到自己的设备。
    image.png

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

2. web server 注意事项

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

五、Demo

WalletDemo

六、参考

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/andanlan/article/details/78113486

智能推荐

[hadoop][redis]#70_redis环境搭建_PeppaKing的博客-程序员宝宝

首先要有gcc编译安装$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz$ tar xzf redis-5.0.5.tar.gz$ cd redis-5.0.5$ make启动$ src/redis-server$ src/redis-cli

linux系统-软件安装 yum外网源的配置方法_小哇666的博客-程序员宝宝_yum 国外源

也可以配置本地源,如读取光盘等,这里讲解外网源的配置方法网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常的不错,将yum源设置为163yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到。1、首先进入yum源的配置目录,默认会带有官方的yum源,这些地址都是国外的源,下载时候速度会慢很多cd /etc/yum.repos.d/2、先备份系...

QML入门----图形动画基础(二)_daboluo520的博客-程序员宝宝

文章目录导语一、混合效果二、颜色效果1.亮度对比度 (BrightnessContrast)2.颜色叠加3.着色4.饱和度三、渐变效果 (Gradient)四、阴影效果五、模糊效果六、动感模糊七、发光效果导语上文的动画比较简单,通过颜色,渐变,平移,旋转,缩放,过渡,翻转实现简单动画。这章学习混合,遮罩,模糊,染色等特效。使用Qt图形效果模块,需要导入一下模块import QtGraphicalEffects 1.12一、混合效果总共两张图,一张覆盖到另一张的上面,类似于混合。通过Blend类型

网站被服务器禁,又一次腾讯云服务器网站被封禁 设备存在违规信息被限制访问 - 小俊学习网..._脑袋被门夹得好痛的博客-程序员宝宝

前天收到腾讯云的短信,您的设备存在违规信息,已被限制访问,请尽快处理。好吧,记得之前又一次也是文章涉及到内容违规,是fanqiang一词。今天又是同样的原因。腾讯云后台的通知。由于接到用户举报,您名下的设备(139.199.183.162)存在违规信息,涉嫌违反相关法律法规和政策,该设备已限制访问。该设备详细信息如下:uin:910856122,appid:1252347900,地区:gz。请您尽...

Fragment实例精讲——底部导航栏的实现(1)_SoGa江的博客-程序员宝宝

本文转自:http://www.runoob.com/w3cnote/android-tutorial-fragment-demo1.html本节引言:在上一节中我们对Fragment进行了一个初步的了解,学习了概念,生命周期,Fragment管理与Fragment事务,以及动态与静态加载Fragment。从本节开始我们会讲解一些Fragment在实际开发中的一些实例!而本节给大家

ImageMagick简介、GraphicsMagick、命令行使用示例_newjueqi的博客-程序员宝宝

http://elf8848.iteye.com/blog/382528ImageMagick资料----------------------------------------------------------------------------ImageMagick官网ImageMagick Identify 命令行工具(官网)

随便推点

MFC opencv 在picture控件上动态显示图像_真男人永不秃头的博客-程序员宝宝

**写在前面:Copy了别人的文章先留在这里,找不到原文章了,先跟作者说声抱歉,后续文章更新时重新致谢。只需调用该函数ShowMatImgToWnd(CWnd pWnd, cv::Mat img)就可以将所需的图片显示在picture控件上了,其中CWnd pWnd参数中输入picture控件的句柄,可使用GetDlgItem(IDC_picture)等方法获取(IDC_picture为picture控件的ID),Mat img参数即为你要显示Mat格式的图片。// 图像显示void ShowMatI

python使用osgeo库_python3+osgeo处理高分影像初探_人工智能学术前沿的博客-程序员宝宝

之前用IDL写高分预处理的时候,就有想过可不可以用python+GDAL写,可是一直卡在了第一步的正射校正,gdal.Warp()函数始终找不到放DEM的位置,最近终于找到了。我尝试了一景1.3G的GF1/WFV,采用ENVI/IDL的脚本运行每次都需要500s以上,而python3+osgeo则稳定在惊人的15s以内!就速度而言,python3+osgeo远远快于ENVI接口。以下是今天写的简单...

喜马拉雅赴美IPO:用户规模触顶、营销费用大增、巨头扎堆入场、盈利难题待解_LeiSheCaiJing的博客-程序员宝宝

作者 | 黄老邪来源 | 镭射财经(ID:leishecaijing)5月1日,喜马拉雅向美国证券交易委员会递交IPO招股书,计划以“XIMA”为证券代码在纽交所挂牌上市,高盛、摩根士丹、美银和中金为联席承销商。喜马拉雅成立于2011年,是一家音频分享平台。招股书显示,2021年第一季度,喜马拉雅平均月活用户量为2.5亿,其中移动应用程序的月活用户量为1.04亿,剩余1.46亿用户来自于IoT及其他第三方开放平台。庞大的用户规模优势,没能掩盖喜马拉雅在C端流量见顶、营销费用高企等困境,近..

世界上最好的磁盘碎片整理工具 O&O Defrag_penlee的博客-程序员宝宝

最新版,而且带完全汉化和注册机!!用过所有现在流行的磁盘碎片整理工具…………用下来这款是最好的!而且效率很高。整理完毕以后重启电脑后程序打开或者文件打开比新装系统还要快!!!O&O Defrag 是一款专为 NT/2000/XP 开发的磁盘工具,可以选择不占用系统任何资源模式进行磁盘碎片整理。这样,玩游戏,看电影,工作时同时进行碎片整理就成为了现实拉。。可以适用于工作站、服务器和高级服务器等各种版

41.Matplotlib风格_鸿腾阳阳的博客-程序员宝宝

import matplotlib.pyplot as pltimport numpy as np%matplotlib inline#查看所有风格plt.style.available['bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 's...

遇到 java. io. IOException: Could not find resource mybatis-config. xml 可咋整?点刷新图标又莫名好使了咋回事_程序员-小李的博客-程序员宝宝

不知咋地好好地突然出来这个问题了?然后就又是检查配置环境又是百度搜解决办法,奈何都不行,一直显示上面的报错我懵了,真不会搞了。。。然后我就无意识地点了两下下面的两个图标然后再运行跑一下居然又行了。。。。啊这。。这舍原因啊??? 求大神帮解答一下疑惑...