之所以想了解这个技术是因为今天看了场电影,用微票儿购买的《荒野猎人》的电影票,只为欣赏小李子能赢得奥斯卡的演技。可是“把玩”微票儿的时候,发现购买的电影票据右下角有一个iPhone里面的wallet标志按钮,原谅土包子的我之前并没有见过这个,也没注意过。但是今天恰巧看到了觉得甚是神奇,使用过Apple Pay,但没用过“凭证”,
今日一看,甚是炫酷,不愧是装逼圣器,于是萌生了了解这个技术并写到我的博客里的想法···
如果说Wallet在之前不是很火的话,那我想说它马上要火,因为Apple Pay的火热很可能会为“凭证”造势,使用量会增高,不管其他用户怎么想,我觉得很好,我觉得可用。就像一个钱包里面放上会员卡、优惠券一样,真正使iPhone物尽其用。
不管用户量的多少,作为一名iOS开发人员,没有理由不学习这个技术,毕竟这是我们丰富自我的食粮。不吃饱饭怎么上班啊?所以赶紧学习吧!
这里附上苹果官网上的文章《使用Passbook》给需要的人参考。
这又是一篇比较老的博客了,因为Passbook是iOS6出现的时候出现的,所以时间有那么一丢丢长,资料有那么一丢丢的老,但是技术的核心不变,我也不废话,附上原文地址,希望能给需要帮助的同行一丢丢帮助。
今天只做摘抄,摘抄代码部分资料,需要详细博客的朋友劳驾转到原文地址仔细阅读。
下面我们通过一个实例(MyPass)介绍一下Pass Kit的编程过程,MyPass实例设计原型草图。MyPass启动的时候,首页是表视图画面,它查询本地设备上的Passbook中特定一些Pass,然后然后显示的表视图画面中。用户点击“+”按钮,如果登机牌Pass存在则替换,否则添加登机牌Pass到Passbook,登机牌Pass是从iosbook3.com服务器请求下载的。如果在表视图画面点击其中的单元格,则画面跳转到Pass的详细画面,在详细画面中可以点击导航栏右上角的“Remove”按钮把当前Pass从Passbook中删除。
任何一个iOS应用都需要创建App ID的,在Description项目中输入“Pass Kit Dev”,Bundle Seed ID (App ID Prefix)项目中选择“Use Team ID”。 Bundle Identifier (App ID Suffix)项目中输入“com.51work6.MyPass”。
创建成功获得App ID页面,在App ID列表中会发现我们刚刚创建的Pass Kit Dev
默认情况下创建的应用是不可以访问Passbook的,我们需要点击Configure超链接进入应用配置页面,勾选“Enable for Passes”开启Pass可用。
配置完成点击右下角的“Done”按钮,保存配置并回到App ID的列表页面,这时候再回来看一下我们刚刚配置的应用,它的Pass状态变为了绿色可用状态了。
为了能够编写在设备上应用,我们还需要创建配置概要文件。创建成功之后下载配置概要文件到本地。
创建Pass类型ID也是重要的一个环节,我们需要设置的Pass类型ID是“pass.com.51work6.boarding-pass”。
前面的工作完成之后,我们需要创建和配置Xcode工程,创建工程名“MyPass”应用,然后进行配置Xcode工程代码签名。这个签名需要使用第3个步骤创建配置概要文件。
选择TAGETS→MyPass→Code Signing Identity,在后面选择Pass Kit Dev Profile。
设置完成之后可以开始编码工作了。
配置授权信息与iCloud应用类似,选择TAGETS→MyPass→Summary→Entitlements,我们可以在这里配置授权信息。
Entitlements :勾选Use Entitlements File,指定一个授权文件,这个文件没有会在你的工程目录中自己创建,它记录下面的授权详细配置信息的;
Pass:是选择Pass类型标识,先选择Use selected pass type identifier,然后勾选pass.com.51work6.boarding-pass;
到此为止,编程的前期准备过程就完成了,下面我们介绍实例的编写过程。
对于Pass的操作是通过PKPassLibrary类完成的,PKPassLibrary类不是单例设计的,获得实例对象时候使用下面代码:
PKPassLibrary* passLib = [[PKPassLibrary alloc] init];
在PKPassLibrary类中与访问Passbook相关的方法有:
passes 获得Passbook中全部授权文件指定的Pass,我们在授权文件中指定的Pass类型ID是pass.com.51work6.boarding-pass,因此该方法取得的是Pass类型ID为pass.com.51work6.boarding-pass的所有Pass。
passWithPassTypeIdentifier:serialNumber: 通过指定的Pass类型ID和序列号获得Pass对象。
下面我们看看相关的程序代码,
#import <UIKit/UIKit.h>
#import ”ASIHTTPRequest.h”
#import ”PassKit/PassKit.h”
#import ”DetailViewController.h”
#define SerialNumber @”gT6zrHkaW”
@interface ViewController :
UITableViewController <PKAddPassesViewControllerDelegate>
@property (strong, nonatomic) NSArray* passes;
- (IBAction)add:(id)sender;
@end
- (void)viewDidLoad
{
[super viewDidLoad];
//判断Passbook是否可用
if (![PKPassLibrary isPassLibraryAvailable])
{
NSLog(@”Passbook不可用。”);
} else {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleLibraryChange:)
name:PKPassLibraryDidChangeNotification object:nil];
}
}
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:YES];
//刷新画面
[self handleLibraryChange:nil];
}
#pragma mark - 处理Passbook变化通知
-(void)handleLibraryChange:(NSNotification*) not ④
{
PKPassLibrary* passLib = [[PKPassLibrary alloc] init];
//排序
NSSortDescriptor *byName = [NSSortDescriptor
sortDescriptorWithKey:@"localizedName" ascending:YES];
_passes = [[passLib passes] sortedArrayUsingDescriptors:@[byName]];
[self.tableView reloadData];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
[[NSNotificationCenter defaultCenter] removeAllObjects];
}
Pass签名和压缩成功之后,如何把pkpass文件发布给用户使用呢?对于提供给普通用户pkpass文件,我们有3种发布方式:Email发布、Web网站发布和应用程序内发布。
这种发布方式是pkpass文件作为Email附件发送给用户,用户最好在他的iPhone或iPod touch设备上打开邮箱读取Email。Email附件中的Pass,附件中的图标是在Pass中的logo.png文件。
当点击这个附件“Store Card”后页面会跳转,点击导航栏右边的“Add”按钮,会将这个Pass添加到Passbook中。
如果用户没有在它的iPhone或iPod touch中接收Email,可以在Mac OS X 10.8.2以上系统中,使用邮件应用程序接收这个邮件。
点击邮件中的“查看凭证…”按钮,会弹出添加Pass的对话框。
如果这个Pass没有添加到Passbook,右下角的按钮为“添加到Passbook”,如果已经添加到Passbook则这个按钮是“完成”或“更新”。
Passbook就到这里了。