参考文章

https://blog.csdn.net/sz_vcp2007/article/details/60762349

https://blog.csdn.net/eqera/article/details/8136880

阅读上诉两篇文章后基本可以做出来了

在下再稍稍整理完善出来(以下内容多出自摘取):

1、什么是PKPass文件?

PKPass 是Apple定义的一套针对商家消费券、优惠券、火车机票等票据格式类文件。包含:图标icon、缩略图thumbnail和logo外最重要的就是pass.json、manifest.json和signature等文件的一个压缩包

2、如何制作PKPass文件?

1)、服务器端制作是比较通用的做法 
这里有一个Java写的开源库: 
Java版本制作PKPass的web service 
2)、本地制作,按照下面的步骤:

1、证书申请,去苹果开发者网站 
申请Pass Type id,并且生成对应的证书(申请之前需要到钥匙串:从证书颁发机构请求证书,老一套操作,先创建ID再编辑ID中选择新建证书,后下载安装证书以备用)

2、资源文件准备

准备icon、logo(钱包里面的左上角logo)和strip(钱包里面的卡券缩略图)三类图片 ,可以再增加background(背景图)h.lproj/pass.strings(本地化文本)等(所有使用到的文件必须在manifest.json上写上)

3、制作pass.json 
 配置pass.json,这里还是强调一下passTypeIdentifier和teamIdentifier,前者就是上面在开发者中心创建的Pass Type ID(”pass.com.appname.walletname“),后者是对应的团队标识,申请苹果开发者账号时会分配一个唯一的团队标识(可以在苹果开发者中心–查看账户信息中查看”Team ID“)。其他信息根据实际情况配置。

{
"formatVersion": ,
"passTypeIdentifier": "你的passTypeId",
"serialNumber": "应该是一串唯一标识字符串如54afe978584e3",
"teamIdentifier": "开发者标识",
"authenticationToken": "可以识别是授权标识暂不清楚如bc83dde3304d766d5b1aea631827f84c",
"barcode": {
"message": "这里是二维码的信息内容",
"altText": "这是二维码下面的标注",
"format": "PKBarcodeFormatQR",
"messageEncoding": "iso-8859-1"
},
"locations": [
{
"longitude": -122.3748889,
"latitude": 37.6189722
},
{
"longitude": -122.03118,
"latitude": 37.33182
}
],
"organizationName": "组织名称也就是卡券颁发者",
"logoText": "显示在logo旁边的文本",
"description": "",
"foregroundColor": "rgb(2,2,4)",
"backgroundColor": "rgb(244,244,254)",
"storeCard": {
"headerFields": [
{
"key": "date",
"label": "余额",
"value": "¥888.66"
}
],
"secondaryFields": [
{
"key": "more",
"label": "换成自己其它希望显示的字段",
"value": "换成自己其它希望显示的字段值"
}
],
"backFields": [
{
"key": "records",
"label": "点击更多信息显示背面时显示的文本说明字段",
"value": " 改字段下面的描述文本内容"
},
{
"key": "phone",
"label": "这些key,label,value的具体值都是自定义的",
"value": "另一个字段下面的描述文本内容"
},
{
"key": "terms",
"label": "会员规则",
"value": "你想说明的规则,当然可以是其它字段\n标识换行"
},
{
"key": "support",
"label": "技术支持",
"value": "写不写都可以毕竟内容完全自定义"
}
]
},
"labelColor": "rgb(87,88,93)"
}

4、创建manifest.json文件,可以通过”openssl sha1 [文件路径]“分别计算出所有文件的哈希值:(一个文本说明所有文件的哈希值,所有用到的资源文件都要有,pass.json必须在)

{

"background.png" :"844a6063e4192f4f4f34b2cf36996b6b06a6f355",

"background@2x.png" :"56c66001a5edb87c2b58180daa3e443dcac887e4",

"pass.json" :"a4f8506e362888755ddf744365cc3cf615e4e6b1",

"es.lproj/pass.strings" :"b698506e362888755ddf744365cc3cf615e4e6b1",

"icon.png" :"105d0f906f633c378d738477fef0d51e0ccec2d2",

"icon@2x.png" :"f5c3db953176da14d6d1c3c27de12e14119173da",

"logo.png" :"78a778accde869cea3364bb828074d7a8f0067ce",

"logo@2x.png" :"af77501cac762637bdb4545b3b758ae4b4632422",

"zh.lproj/pass.strings" :"a4f8506e362888755ddf744365cc3cf615e4e6b1",

"zh.lproj/background.png" :"2888755ddfa4f8506e36744365cc3cf615e4e6b1",

"zh.lproj/background.png@2x": "f8506e362a4888755ddf744365cc3cf615e4e6b1"

}

4、生成signature文件:

a.通过前面导入的Pass Type证书(Pass Type ID:你的PTID)导出个人信息交换(.p12)文件并指定密码(假设密码为123123),保存成”mywallet.p12“(注意是导出证书而不是导出证书下的专用秘钥)。  
b.在钥匙串中找到”Apple Worldwide Developer Relations Certification Authority“证书导出增强保密邮件(.pem),保存成”AWDRCA.pem“。 
c.将.p12证书转化为.pem证书mywallet.pem(需要输入导出时设置的密码123123),输入如下命令: 
openssl pkcs12 -in mywallet.p12 -clcerts -nokeys -out mywallet.pem -passin pass:123123

d.从.p12导出秘钥文件mywalletkey.pem(这里设置密码为123456) 
openssl pkcs12 -in mywallet.p12 -nocerts -out mywalletkey.pem -passin pass:123123 -passout pass:123456

e.根据AWDRCA.pem、mywallet.pem、mywalletkey.pem、manifest.json生成signature文件(按照提示输入mywalletkey.pem导出时设置的密码123456): 
openssl smime -binary -sign -certfile AWDRCA.pem -signer mywallet.pem -inkey mywalletkey.pem -in manifest.json -out signature -outform DER

5.将icon.png、icon@2x.png、logo.png、logo@2x.png、strip.png、strip@2x.png 、pass.json、manifest.json、signature压缩成pass包(这里命名为”mywallet.pkpass“,pass.json和manifest.json以及所有用到的资源和描述文件必须都在)。 
zip -r mywallet.pkpass manifest.json pass.json signature logo.png logo@2x.png icon.png icon@2x.png strip.png strip@2x.png

iOS端如何加载PKPass文件?

1、进入Apple 开发者网站,新建一个App ID,跟第2步的App ID一致,在新建的时候说明要使用到钱包功能

2、Xcode新建一个工程,Bundle Identifier中命名一个App ID 
2、选择目标Target,点击“Capabilities”标签,打开Wallet开关。
4、进入目标Target,General标签,让Xcode自动为我们管理证书 
5、把上面制作的PKPass文件拖到项目中 
6、编码读取并显示,至于加不加入到钱包是用户决定的

#import "ViewController.h"
#import <PassKit/PassKit.h> @interface ViewController ()<PKAddPassesViewControllerDelegate> @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. PKAddPassButton *pkAddBtn = [[PKAddPassButton alloc] initWithAddPassButtonStyle:PKAddPassButtonStyleBlack];
pkAddBtn.titleLabel.font = [UIFont systemFontOfSize:];
pkAddBtn.frame = CGRectMake(, , , );
[self.view addSubview:pkAddBtn]; [pkAddBtn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside]; } - (void)btnClick:(PKAddPassButton *)button {
NSString *passPath=[[NSBundle mainBundle] pathForResource:@"mywallet" ofType:@"pkpass"];
NSData *passData = [[NSData alloc] initWithContentsOfFile:passPath];
NSError *error = nil;
PKPass *pass = [[PKPass alloc] initWithData:passData error:&error];
if (error) {
NSLog(@"创建Pass过程中发生错误,错误信息:%@",error.localizedDescription);
};
PKAddPassesViewController *vc = [[PKAddPassesViewController alloc] initWithPass:pass];
vc.delegate = self; [self presentViewController:vc animated:true completion:nil]; } -(void)addPassesViewControllerDidFinish:(PKAddPassesViewController *)controller{
NSLog(@"add pass finished.");
[self dismissViewControllerAnimated:true completion:nil];
}

iOS钱包卡券开发(往钱包里面加自己的卡券)的更多相关文章

  1. DAPP 开发直通车-如何基于NEL 轻钱包来开发DAPP

    之前做了 DAPP 开发直通车,通讲了一下开发一个DAPP的过程.   但是涉及多工种,多步骤.入手还是非常困难的.   经过不懈的努力,做了很多铺垫工作之后,我终于可以告诉你:   开发DAPP f ...

  2. iOS开发UI篇—懒加载

    iOS开发UI篇—懒加载 1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了, ...

  3. 理解开发HD 钱包涉及的 BIP32、BIP44、BIP39

    如果你还在被HD钱包.BIP32.BIP44.BIP39搞的一头雾水,来看看这边文章吧. 数字钱包概念 钱包用来存钱的,在区块链中,我们的数字资产都会对应到一个账户地址上, 只有拥有账户的钥匙(私钥) ...

  4. iOS原生地图开发详解

    在上一篇博客中:http://my.oschina.net/u/2340880/blog/414760.对iOS中的定位服务进行了详细的介绍与参数说明,在开发中,地位服务往往与地图框架结合使用,这篇博 ...

  5. Sagit.Framework For IOS 开发框架入门开发教程2:一行代码实现引导页

    前言: 开篇比较简单:Sagit.Framework For IOS 开发框架入门开发教程1:框架下载与环境配置 第二篇教程之前写了一半,感觉不太好写,而且内容单纯介绍API,要说的很多,又枯燥乏味. ...

  6. iOS项目——项目开发环境搭建

    在开发项目之前,我们需要做一些准备工作,了解iOS扩展--Objective-C开发编程规范是进行开发的必备基础,学习iOS学习--Xcode9上传项目到GitHub是我们进行版本控制和代码管理的选择 ...

  7. 《React Native 精解与实战》书籍连载「配置 iOS 与 Android 开发环境」

    此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...

  8. iOS WKWebview 网页开发适配指南

    iOS WKWebview 网页开发适配指南 微信iOS客户端将于2017年3月1日前逐步升级为WKWebview内核,需要网页开发者提前做好网站的兼容检查和适配.如有问题,可参考文末联系方式,向我们 ...

  9. iOS 9应用开发基础教程下册

    iOS 9应用开发基础教程下册   介绍: 本教程是国内第一本iOS 9开发应用教程.本教程基于Xcode 7.0,使用Swift 2.0语言讲解如何开发iOS 9的应用App. 学习建议:本教程针对 ...

  10. 五大主流数字币钱包:imToken数字货币钱包,Bitcoin core钱包,BTS网页版钱包,AToken轻钱包,Blockchain

    AToken数字货币钱包 超容易上手支持五大主流币种   互联网 | 编辑: 王静涛 2017-12-28 09:58:33转载     国家监管部门已叫停数字货币交易,包括火币网.比特币中国.OKC ...

随机推荐

  1. Java -- IO -- 目录

    操作文件的类 -- -- File File类的基本介绍 使用File类操作文件 范例 -- -- 列出指定目录的全部内容 RandomAccessFile类 使用RandomAccessFile类写 ...

  2. 8 -- 深入使用Spring -- 3...1 Resource实现类UrlResource

    8.3.1 Resource 实现类------UrlResource : 访问网络资源的实现类 1.访问网络资源 访问网络资源通过UrlResource 类实现,UrlResource是java.n ...

  3. MyBatis入门程序之表关联

    一.一对一查询(ResultType比较简单,只需要指向扩展的类:ResultMap逐个匹配比较麻烦,可以配置属性autoMapping="true",还可以可以实现延迟加载) 1 ...

  4. Unity Shader 设置纹理采样tex2D过滤方式

    双击红色框区域

  5. [Ubuntu] 如何设置静态 IP 和 DNS

    编辑 /etc/network/interfaces 来设置 IP 和 DNS 解析服务器: # interfaces() ) and ifdown() auto lo iface lo inet l ...

  6. The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make s

    我出现这个问题是引用资源文件问题 helper.getView(R.id.in_pic).setBackgroundResource(item.getResourceId()); //错的helper ...

  7. gearman 简介

    附件  Gearman.doc 1:介绍gearman 1.1 简介 Gearman是一个用来把工作委派给其他机器.分布式的调用更适合做某项工作的机器.并发的做某项工作在多个调用间做负载均衡.或用来在 ...

  8. Windows下mysql重设密码

    Windows下的实际操作如下 .关闭正在运行的MySQL,即关闭服务. .打开DOS窗口,转到mysql\bin目录. .输入 mysqld --skip-grant-tables 回车.如果没有出 ...

  9. print($arr,true)的参数true表示将$arr的值返会,而不是打印

    之前通过error_log()来调试php, 发现收到的json字符前边总是有一个1,一直以为是哪里直接出现了print.print_r.echo.var_dump(), 后来发现原来是某处用了形如e ...

  10. KindEditor上传图片无法使用绝对路径

    之前百度,一直查到的都是urlType使用domain,但是根本没有效果.想着去插件代码里面看,但是实在看不下去了. 最后还是百度去了.然后查到下面的一个方法.直接将其中的某部分代码注释到就好了.具体 ...