Passbook是iOS 6的新功能,只能在iPhone和iPod touch裝置中使用。它可以協助我們管理商家發放的電子會員卡、積分卡、 優惠券等。這將對未來電子商務產生深遠的影響。商家通過發放會員卡、積分卡、優惠券等,提高與消費者的互動,吸引人們更多消費。Passbook的誕生, 正是為了將所有這些“卡”和“券”電子化,存放在iPhone或iPod touch裡。
Passbook與Pass
iOS 6中的Passbook能夠協助我們集中管理電子“卡”和“券”,這些電子“卡”和“券”就是Pass,Passbook是這些Pass集合管理應用。Passbook與Pass關係,Passbook是我們的“卡包”,而Pass是裡面的“卡”和“券”。
當 我們選擇其中一個卡片後,卡片會滑出來,點擊右下角“i”按鈕會翻轉到背面。在點擊左上方的垃圾桶按鈕可以刪除,彈出一個具有金屬質感的“碎紙機”樣式的 確認框,當點擊“刪除”按鈕後,“碎紙機”會將卡片粉碎,還有動畫效果。每次用到這個功能的時候我都很驚歎,蘋果對於細節的設計無可挑剔。
Pass的5種風格
iOS 6目前提供了5種風格的Pass,它們分別是:
Boarding passes(登機證)。雖然從字面翻譯為“登機證”,但是它包括了登機證、火車票和船票等種類的票證,在Pass上面有起點和終點,時間和登機口等資訊。
Coupons(優惠券)。或者打折卡,描述商品的優惠或打折資訊的電子憑證。一般上面會有商家的logo,打折比例,使用到期日等資訊。
Store cards(購物卡)。描述了使用者在商場或俱樂部中的帳號餘額電子憑證。一般上面會有使用者層級等資訊。
Event tickets(入場券)。描述了體育比賽、演唱會、音樂會等入場券的電子憑證。一般上面會有一個大的背景圖片,這個圖片背模糊化了,還可以有清楚的縮圖。
Generic(通用卡)。如果上面的4種不能滿足,我們可以使用這一種,它可以是自訂上面的內容。一個通用卡類型的會員卡。
Pass的內部結構
每一個Pass是一個ZIP格式的壓縮檔,這檔案檔案的尾碼名是pkpass,它通過一些特殊的方式發給使用者使用,這些特殊的方式我們會在後面介紹。如果我們把pkpass檔案使用解壓縮軟體開啟,會看到如下內容:
Pass
├── icon.png
├── icon@2x.png
├── logo.png
├── logo@2x.png
├── thumbnail.png
├── thumbnail@2x.png
├── background.png
├── background@2x.png
├── strip.png
├── strip@2x.png
├── manifest.json
├── fr.lproj
│ └── pass.strings
├── de.lproj
│ └── pass.strings
├── pass.json
└── signature
pass.json 檔案是Pass的核心,它描述了這個Pass正面和背面的所有資訊。我們提供了這個Pass需要顯示的所有圖片。最後需要一個資訊清單檔 manifest.json,它包含了所有這些檔案的SHA1校正值,和一個分離的簽名檔案signature, 這樣Passbook能夠驗證這個 Pass在建立之後沒有被修改過。
Pass Kit編程:執行個體:MyPass執行個體設計與說明
下 面我們通過一個執行個體(MyPass)介紹一下Pass Kit的編程過程,MyPass執行個體設計原型草圖。MyPass啟動的時候,首頁是表視圖畫面,它 查詢本地裝置上的Passbook中特定一些Pass,然後然後顯示的表視圖畫面中。使用者點擊“+”按鈕,如果登機證Pass存在則替換,否則添加登機證 Pass到Passbook,登機證Pass是從iosbook3.com伺服器請求下載的。如果在表視圖畫面點擊其中的儲存格,則畫面跳轉到Pass的 詳細畫面,在詳細畫面中可以點擊導覽列右上方的“Remove”按鈕把當前Pass從Passbook中刪除。
開始Passbook
1、建立App ID
任 何一個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
2、配置Pass可用
預設情況下建立的應用是不可以訪問Passbook的,我們需要點擊Configure超連結進入應用配置頁面,勾選“Enable for Passes”開啟Pass可用。
配置完成點擊右下角的“Done”按鈕,儲存配置並回到App ID的列表頁面,這時候再回來看一下我們剛剛配置的應用,它的Pass狀態變為了綠色可用狀態了。
3、建立配置概要檔案
為了能夠編寫在裝置上應用,我們還需要建立配置概要檔案。建立成功之後下載配置概要檔案到本地。
4、建立Pass類型ID
建立Pass類型ID也是重要的一個環節,我們需要設定的Pass類型ID是“pass.com.51work6.boarding-pass”。
5、配置Xcode工程程式碼簽署
前面的工作完成之後,我們需要建立和配置Xcode工程,建立工程名“MyPass”應用,然後進行配置Xcode工程程式碼簽署。這個簽名需要使用第3個步驟建立配置概要檔案。
選擇TAGETS→MyPass→Code Signing Identity,在後面選擇Pass Kit Dev Profile。
設定完成之後可以開始編碼工作了。
6、配置Xcode工程配置授權資訊
配置授權資訊與iCloud應用類似,選擇TAGETS→MyPass→Summary→Entitlements,我們可以在這裡配置授權資訊。
授權資訊項目說明如下:
Entitlements :勾選Use Entitlements File,指定一個授權檔案,這個檔案沒有會在你的工程目錄中自己建立,它記錄下面的授權詳細配置資訊的;
Pass:是選擇Pass類型標識,先選擇Use selected pass type identifier,然後勾選pass.com.51work6.boarding-pass;
到此為止,編程的前期準備過程就完成了,下面我們介紹執行個體的編寫過程。
訪問Passbook
對於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對象。
下面我們看看相關的程式碼,ViewController.h代碼如下:
#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
ViewController.m相關代碼如下:
- (void)viewDidLoad{[super viewDidLoad];//判斷Passbook是否可用if (![PKPassLibrary isPassLibraryAvailable]){NSLog(@”Passbook不可用。”);} else {[[NSNotificationCenter defaultCenter] addObserver:selfselector:@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 = [NSSortDescriptorsortDescriptorWithKey:@"localizedName" ascending:YES];_passes = [[passLib passes] sortedArrayUsingDescriptors:@[byName]];[self.tableView reloadData];}- (void)didReceiveMemoryWarning{[super didReceiveMemoryWarning];[[NSNotificationCenter defaultCenter] removeAllObjects];}
發布Pass
Pass簽名和壓縮成功之後,如何把pkpass檔案發布給使用者使用呢?對於提供給普通使用者pkpass檔案,我們有3種發布方式:Email發布、Web網站發布和應用程式內發布。
Email發布
這種發布方式是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就到這裡!更多Passbook內容可以參考我的新書《iOS網路編程與雲端應用最佳實務》以及多貝免費公開課5月30日《蘋果電子商務探討-iOS6 Passbook解析與開發》