[iOS]PKPass文件制作及添加到Wallet
来源:互联网 发布:vrsjg用什么软件 编辑:程序博客网 时间:2024/04/30 15:57
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,并且生成对应的证书(申请之前需要到钥匙串:从证书颁发机构请求证书)
2、制作pass.json
a、准备icon、logo和strip三类图片
b、 配置pass.json,这里还是强调一下passTypeIdentifier和teamIdentifier,前者就是上面在开发者中心创建的Pass Type ID(”pass.com.taokatao.mywallet“),后者是对应的团队标识,申请苹果开发者账号时会分配一个唯一的团队标识(可以在苹果开发者中心–查看账户信息中查看”Team ID“)。,其他信息根据实际情况配置。
{ "formatVersion": 1, "passTypeIdentifier": "pass.com.taokatao.mywallet", "serialNumber": "54afe978584e3", "teamIdentifier": "MV9CCWC8NT", "authenticationToken": "bc83dde3304d766d5b1aea631827f84c", "barcode": { "message": "userName CangyuZheng", "altText": "会员详情见背面", "format": "PKBarcodeFormatQR", "messageEncoding": "iso-8859-1" }, "locations": [ { "longitude": -122.3748889, "latitude": 37.6189722 }, { "longitude": -122.03118, "latitude": 37.33182 } ], "organizationName": "CardMee", "logoText": "CardMee", "description": "", "foregroundColor": "rgb(2,2,4)", "backgroundColor": "rgb(244,244,254)", "storeCard": { "headerFields": [ { "key": "date", "label": "余额", "value": "¥888.66" } ], "secondaryFields": [ { "key": "more", "label": "VIP会员", "value": "Cangyu Zheng" } ], "backFields": [ { "key": "records", "label": "消费记录(最近10次)", "value": " 9/23 ¥107.00 无糖冰美式\n 9/21 ¥58.00 黑魔卡\n 8/25 ¥44.00 魔卡\n 8/23 ¥107.00 无糖冰美式\n 8/18 ¥107.00 无糖冰美式\n 7/29 ¥58.00 黑魔卡\n 7/26 ¥44.00 魔卡\n 7/13 ¥58.00 黑魔卡\n 7/11 ¥44.00 魔卡\n 6/20 ¥44.00 魔卡\n" }, { "key": "phone", "label": "联系方式", "value": "4008-888-88" }, { "key": "terms", "label": "会员规则", "value": "(1)本电子票涉及多个环节,均为人工操作,用户下单后,1-2个工作日内下发,电子票并不一定能立即收到,建议千品用户提前1天购买,如急需使用,请谨慎下单; \n(2)此劵为电子劵,属特殊产品,一经购买不支持退款(敬请谅解); \n(3)特别注意:下单时请将您需要接收电子票的手机号码,填入收件人信息,如号码填写错误,损失自负;购买成功后,商家于周一至周五每天中午11点和下午17点发2维码/短信到您手机(周六至周日当天晚上发1次),请用户提前购买,凭此信息前往影院前台兑换即可; \n(4)订购成功后,(您在购买下单后的当天,给您发送电子券,系统会自动识别;如果您的手机能接收二维码,那收到的就是彩信,不能接收二维码的话,系统将会自动转成短信发送给您),短信为16位数,如:1028**********; 每个手机号码只可购买6张,如需购买6张以上的请在订单附言填写不同的手机号码,并注明张数(例如团购10张,1350755****号码4张,1860755****号码6张);\n(5)电子票有效期至2016年2月30日,不与其他优惠券同时使用" }, { "key": "support", "label": "技术支持", "value": "http://s.cardmee.net/camee/" } ] }, "labelColor": "rgb(87,88,93)"}
3、创建manifest.json文件,可以通过”openssl sha1 [文件路径]“分别计算出所有文件的哈希值:
4、生成signature文件:
a.通过前面导入的Pass Type证书(Pass Type ID:pass.com.taokatao.mywallet)导出个人信息交换(.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(这里设置密码为123123)
openssl pkcs12 -in mywallet.p12 -nocerts -out mywalletkey.pem -passin pass:123123 -passout pass:123123
e.根据AWDRCA.pem、mywallet.pem、mywalletkey.pem、manifest.json生成signature文件(按照提示输入mywalletkey.pem导出时设置的密码123123):
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“)。
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、Xcode新建一个工程,Bundle Identifier中命名一个App ID
2、选择目标Target,点击“Capabilities”标签,打开Wallet开关。此时需要勾选:Allow all team pass types.但是你看到的下面:“Add the wallet feature to your App ID”前面是红色的。不要紧这是因为你还没有创建App ID,看下面
3、进入Apple 开发者网站,新建一个App ID,跟第一步的App ID一致,再来看看这个红色提示就消失了,正常的对勾形式出现
4、进入目标Target,General标签,让Xcode自动为我们管理证书
5、把上面制作的PKPass文件拖到项目中
6、编码读取并显示。so easy!
#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];}
- [iOS]PKPass文件制作及添加到Wallet
- iOS passbook中的.pkpass怎么移植到安卓
- [iOS]wallet开发demo
- iOS wallet开发
- iOS证书及描述文件制作流程
- iOS的Cocos2d-x工程载入CocoStudio制作的动画素材'xxx.csb/csd'文件,添加自定义用户头像图片到动画。
- IOS:添加.a文件到svn
- wallet
- 如何把本地 PDF 文件添加到 iOS 的 iBooks
- IOS 一次性添加所有文件到SVN 命令
- Unity编译到Xcode自动添加文件及代码修改
- 《iOS Human Interface Guidelines》——Wallet
- iOS PassKit Wallet 开发(Passbook 开发)
- ios,android提交文件及图片到 PHP服务端
- iOS 添加pch文件
- ios 添加pch文件
- iOS添加Pch文件
- iOS静态制作及注意事项
- iOS学习之WebView的使用
- MySQL数据库调优技巧
- C文件读写函数介绍
- Spark Job调优(Part 2)
- 博世传感器调试笔记(三)加速度及地磁传感器BMC156
- [iOS]PKPass文件制作及添加到Wallet
- javaMath
- Android基础学习笔记之-ListView进阶用法(item圆角效果实现)
- Leetcode Minimum Size Subarray Sum
- 新手入门百度地图开发的(0,0)坐标问题
- 一个ThreeJS的毕业设计及一点思考
- 程序员增加收入的实用之道
- 38.表单
- Eclipse连接真机--华为荣耀6