閱讀302 返回首頁    go 技術社區[雲棲]


iOS開發那些事-Passbook詳解與開發案例(附視頻)

Passbook是iOS 6的新功能,隻能在iPhone和iPod touch設備中使用。它可以幫助我們管理商家發放的電子會員卡、積分卡、優惠券等。這將對未來電子商務產生深遠的影響。商家通過發放會員卡、積分卡、優惠券等,提高與消費者的互動,吸引人們更多消費。Passbook的誕生,正是為了將所有這些“卡”和“券”電子化,存放在iPhone或iPod touch裏。

Passbook與Pass

iOS 6中的Passbook能夠幫助我們集中管理電子“卡”和“券”,這些電子“卡”和“券”就是Pass,Passbook是這些Pass集合管理應用。Passbook與Pass關係,Passbook是我們的“卡包”,而Pass是裏麵的“卡”和“券”。

1

當我們選擇其中一個卡片後,卡片會滑出來,點擊右下角“i”按鈕會翻轉到背麵。在點擊左上角的垃圾桶按鈕可以刪除,彈出一個具有金屬質感的“碎紙機”樣式的確認框,當點擊“刪除”按鈕後,“碎紙機”會將卡片粉碎,還有動畫效果。每次用到這個功能的時候我都很驚歎,蘋果對於細節的設計無可挑剔。

2

Pass的5種風格

iOS 6目前提供了5種風格的Pass,它們分別是:

Boarding passes(登機牌)。雖然從字麵翻譯為“登機牌”,但是它包括了登機牌、火車票和船票等種類的票證,在Pass上麵有起點和終點,時間和登機口等信息。

Coupons(優惠券)。或者打折卡,描述商品的優惠或打折信息的電子憑證。一般上麵會有商家的logo,打折比例,使用期限等信息。

Store cards(購物卡)。描述了用戶在商場或俱樂部中的賬號餘額電子憑證。一般上麵會有用戶級別等信息。

Event tickets(入場券)。描述了體育比賽、演唱會、音樂會等入場券的電子憑證。一般上麵會有一個大的背景圖片,這個圖片背模煳化了,還可以有清楚的縮圖。

Generic(通用卡)。如果上麵的4種不能滿足,我們可以使用這一種,它可以是自定義上麵的內容。一個通用卡類型的會員卡。

3

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中刪除。

4

開始Passbook

5

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

6

2、配置Pass可用

默認情況下創建的應用是不可以訪問Passbook的,我們需要點擊Configure超鏈接進入應用配置頁麵,勾選“Enable for Passes”開啟Pass可用。

7

配置完成點擊右下角的“Done”按鈕,保存配置並回到App ID的列表頁麵,這時候再回來看一下我們剛剛配置的應用,它的Pass狀態變為了綠色可用狀態了。

3、創建配置概要文件

為了能夠編寫在設備上應用,我們還需要創建配置概要文件。創建成功之後下載配置概要文件到本地。

8

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。

9

設置完成之後可以開始編碼工作了。

6、配置Xcode工程配置授權信息

配置授權信息與iCloud應用類似,選擇TAGETS→MyPass→Summary→Entitlements,我們可以在這裏配置授權信息。

10

授權信息項目說明如下:

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文件。

11

當點擊這個附件“Store Card”後頁麵會跳轉,點擊導航欄右邊的“Add”按鈕,會將這個Pass添加到Passbook中。

12

如果用戶沒有在它的iPhone或iPod touch中接收Email,可以在Mac OS X 10.8.2以上係統中,使用郵件應用程序接收這個郵件。

13

點擊郵件中的“查看憑證…”按鈕,會彈出添加Pass的對話框。

14

如果這個Pass沒有添加到Passbook,右下角的按鈕為“添加到Passbook”,如果已經添加到Passbook則這個按鈕是“完成”或“更新”。

Passbook就到這裏!更多Passbook內容可以參考我的新書《iOS網絡編程與雲端應用最佳實踐》以及多貝免費公開課5月30日《蘋果電子商務探討-iOS6 Passbook解析與開發》

最後更新:2017-04-03 18:52:02

  上一篇:go 喬布斯和蓋茨眼中真實的對方
  下一篇:go 又一批共18種&quot;問題食品&quot;曝光!國人要睜大眼、閉緊嘴巴哦!