iOS App整合Apple Pay教程(附範例程式碼),iosapple
蘋果在本周一發布了iOS 8.1版本,並正式開放了Apple Pay支付系統。Apple Pay是一個基於NFC的支付系統,不久將被數以萬計的線下零售商店予以支援。即便這項科技並不是徹底的突破性進展,但它足以推動許多公司和零售商來支援這種支付方式,並成為蘋果又一項成功的投資。
Apple Pay還給開發人員帶來了處理支付的新渠道,使用者將期望在應用中使用它,因為它將驗證和交易極端簡化,僅需手指輕輕一觸即可完成,如果應用裡面有涉及到交易,開發人員很有必要整合Apple Pay。那麼如何將Apple Pay功能整合到你的應用裡呢?
在App裡設定Apple Pay
Xcode 6.1提供了非常方便的介面來設定Apple Pay。第一步先修改target為iOS 8.1,然後在項目Capabilities裡將Apple Pay設定為on,這將自動匯入需要的庫檔案,然後添加一個許可權檔案並設定,最後修改或建立你的App ID。
你可能會注意到上面沒有有效Merchant ID,我們需要建立一個,訪問蘋果iOS 開發人員中心的位於Identifiers > Merchant ID的頁面。
然後隨著流程指引,建立一個Merchant ID並註冊它。
現在,我們需要給Merchant ID添加一個認證簽章要求(Certificate Signing Request),以便加密支付令牌來保證其安全性。為達到這個目的,導航至你的Merchant ID,並點擊Edit按鈕來修改它。
現在,你需要建立一個認證。點擊下面的Create Certificate按鈕,並跟隨蘋果的流程指引完成建立。
現在Merchant ID設定好了,你可以回到Xcode並重新整理Merchant ID區塊,如果一切正常,你應當看到剛建立的ID出現在列表上。將它選中,然後可以進入下一部分。
編寫代碼
我們在Github上提供了一個整合Apple Pay的樣本項目:cjbeauchamp/ApplePayDemo ,許可權檔案和App設定檔案已經剝離出去了,可以放心將它添加到你自己的項目裡。下面我們將討論一些開發中的要點。
設定項目
Apple Pay使用了PassKit架構,所以你需要在適當的檔案裡匯入標頭檔:
1 |
#import <passkit passkit.h=""></passkit> |
你還需要接收Apple Pay處理資訊的回調,所以確保將委託添加到接收類上:
12 |
@interface ViewController : UIViewController <pkpaymentauthorizationviewcontrollerdelegate></pkpaymentauthorizationviewcontrollerdelegate> |
建立支付請求
首先你需要確認裝置是否支援Apple Pay支付,確認的代碼是:
123 |
if ([PKPaymentAuthorizationViewController canMakePayments]) { ... } |
在上面的代碼塊裡,你能使用PKPayment類來建立支付請求。下面是相應的代碼,你需要將其中一些資訊修改成自己的,比如merchantIdentifier需要與你之前建立的Merchant ID相匹配。
123456 |
PKPaymentRequest *request = [[PKPaymentRequest alloc] init]; request.countryCode = @ "US" ; request.currencyCode = @ "USD" ; request.supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa]; request.merchantCapabilities = PKMerchantCapabilityEMV; request.merchantIdentifier = @ "merchant.com.myMerchantID" ; |
添加物品到支付頁
你可以使用PKPaymentSummaryItem來建立物品並顯示,這個對象描述了一個物品和它的價格,數組最後的對象必須是總價格。
1234567 |
PKPaymentSummaryItem *widget1 = [PKPaymentSummaryItem summaryItemWithLabel:@ "Widget 1" amount:[NSDecimalNumber decimalNumberWithString:@ "0.99" ]]; PKPaymentSummaryItem *widget2 = [PKPaymentSummaryItem summaryItemWithLabel:@ "Widget 2" amount:[NSDecimalNumber decimalNumberWithString:@ "1.00" ]]; PKPaymentSummaryItem *total = [PKPaymentSummaryItem summaryItemWithLabel:@ "Grand Total" amount:[NSDecimalNumber decimalNumberWithString:@ "1.99" ]]; request.paymentSummaryItems = @[widget1, widget2, total]; |
顯示認證視圖
最後,顯示由PassKit架構提供的view controller,接下來它將自動處理認證。
123 |
PKPaymentAuthorizationViewController *paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request]; paymentPane.delegate = self; [self presentViewController:paymentPane animated:TRUE completion:nil]; |
實現委託方法
被請求的委託方法是被認證成功和認證完成兩個事件調用的。是否解除view controller,以及讓使用者知道認證是否成功都取決於你。方法的簽名如下:
12 |
- (void)paymentAuthorizationViewController:didAuthorizePayment:completion: - (void)paymentAuthorizationViewControllerDidFinish: |
支付驗證
在Apple Pay驗證了支付之後,仍然需要開發人員來完成交易,這可以用didAuthorizePayment委託方法來完成,它需要你串連伺服器並上傳支付令牌和 其他資訊,以完成整個支付流程。在伺服器呼叫結束後,你需要調用completion方法,摒棄提供success或failure標記的參數。你可以在 範例程式碼裡找到具體實現。
監控並最佳化交易
Apple Pay是現有的結賬流程非常棒的解決方案,在應用裡使用它無疑會讓使用者們高興。儘管Apple Pay讓支付流程極端簡化,仍然有許多變動地方,他們的表現將直接與app的營收掛鈎。
交易監控
Crittercism公司的新Transaction Management是一種很棒的方法,用來監控各種交易確保它們工作正常。如果一個API端末或服務執行緩慢,或者如果使用者決定取消交易,或者你的應用崩潰了,你需要知道這些資訊才能更好的最佳化它們。你可以到Crittercism官方網站瞭解更多資訊。
總結
希望這個入門教程讓你更好的理解和使用Apple Pay。別忘了閱讀蘋果的指南和文檔來瞭解如何與供應商整合,以及使用者介面的指導規範。你可以在蘋果Apple Pay的官網上找到它們。