302
技術社區[雲棲]
iOS開發那些事-Passbook詳解與開發案例(附視頻)
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: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
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解析與開發》
最後更新:2017-04-03 18:52:02