参考文章

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": 1,"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:12];pkAddBtn.frame = CGRectMake(100, 100, 220, 40);[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];
}

转载于:https://www.cnblogs.com/yuxiaoyiyou/p/9287137.html

iOS钱包卡券开发(往钱包里面加自己的卡券)相关推荐

  1. iOS开发UI篇—懒加载

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

  2. 钱包系统推荐维金_USDT钱包APP开发系统

    USDT点对点支付系统开发,USDT钱包承兑商支付系统开发找[刘先生]USDT承兑商支付接单系统开发,USDT支付开发API接口系统全行业对接,USDT跨境支付交易系统开发,USDT跨境支付系统,US ...

  3. Web3.0入口-MPC钱包和智能合约钱包

    目前数字钱包存在的三个问题 Web3.0大规模普及,需要解决一些关键问题,包括钱包私钥带来的一个用户体验问题与两个安全问题. 1.一个用户体验问题: 助记词与私钥难记.难保存,导致用户使用门槛过高 2 ...

  4. 分层确定性钱包-以太坊创建钱包

    基本概念 所有问题大体可以分为三类:区块链基本概念,钱包安全知识以及钱包转账交易 区块链的基本特性 去中心化 因为整个网络没有中心统治者.系统依靠的是网络上多个参与者的公平约束,所以任意每几个节点的权 ...

  5. iOS 10应用开发基础教程

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

  6. iOS网络编程开发—HTTP协议

    iOS网络编程开发-HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...

  7. 比特币钱包(3) BIP32 HD钱包之密钥树

    1. 密钥树可以多层迭代 由于密钥派生关系是可以多层迭代的,因此可以使用一个密钥多层级派生,构建出树形密钥层级结构.如果是普通密钥派生关系,公钥派生子公钥的特性也可以逐层传递. 密钥衍生函数CKD 详 ...

  8. 什么是区块链钱包?区块链钱包如何运作?

    什么是区块链钱包?区块链钱包如何运作? 加密货币曾以其暴涨的价值引起轰动.因为加密货币的价值暴涨,区块链钱包开发的需求也在增加.截至2018年底,据报道有超过3000万用户使用钱包进行数字货币交易(据 ...

  9. iOS网络编程开发-数据加密

    iOS网络编程开发-数据加密 一.简单说明 1.说明 在开发应用的时候,数据的安全性至关重要,而仅仅用POST请求提交用户的隐私数据,还是不能完全解决安全问题. 如:可以利用软件(比如Charles) ...

  10. [air for ios] 三小时开发一个iOS飞行射击游戏

    [air for ios] 三小时开发一个iOS飞行射击游戏 http://www.badyoo.com/index.php/2012/07/04/158/index.html 2012-07-04 ...

最新文章

  1. 和12岁小同志搞创客开发:设计一款亮度可调节灯
  2. ubuntu 命令收集
  3. android开发 获取父控件的高宽
  4. for(;;)是什么,for(;;)的作用
  5. PHP__call __callStatic
  6. mysql的explain中type取值与SQL性能优化的关系
  7. 手游频繁崩溃”闪退”? 从程序上找原因
  8. SAP License:销售流程
  9. 第五章节 类的继承(继承的概述)
  10. callback的实现
  11. select完成单线程,多用户
  12. 【总结】操作系统原理
  13. android vulkan 游戏,王者荣耀Vulkan版
  14. 飞桨paddlepaddle论文复现——BigGAN论文翻译解读
  15. 昂达平板装linux系统下载,U盘启动:昂达平板用上了Ubuntu Uudgie 16.10 Linux操作系统...
  16. STM32F407移植FreeModbus中遇到接收最后一个字节是0xff或0xfe的解决方法
  17. python_10_绘制图表
  18. 基于JAVA的葫芦娃救爷爷游戏
  19. 迅速处理多个ts转mp4格式 - 无需安装
  20. 顺序表倒置java_数据结构-顺序表 java实现-Go语言中文社区

热门文章

  1. zabbix3.0邮件报警
  2. [小说连载]张小庆,在路上(8)- 再见,余鹏!
  3. 将MATLAB的figure窗体嵌入到C#窗体应用的(panel)中
  4. 小朱的Java学习之旅--出发
  5. 一文惊醒梦中人:Python是打开数据科学大门的钥匙 - 思路、心态【附库、练习资源链接】
  6. PHP开发环境与工具笔记,thinkphp开发工具有哪些(常用工具详解)
  7. 前端架构-分层而治,铁打的MV流水的C
  8. 毕设日记(基于微博的大学生情感分析系统)——楔子
  9. 汉诺塔演示程序QBasic版,开博第一帖
  10. 怎么给win7电脑桌面文件夹加密-兄弟连IT教育