iOS9 Day-by-Day:Day 8:Apple Pay

本文翻譯自iOS9 Day-by-Day系列文章之一般卑,原文地址

這是一個系列文章匠抗,查看更多請移步目錄頁

Apple Pay在 iOS8 時被引入澳叉,它是一種簡單便捷、安全窄绒、私密的支付方式贝次,用于在你的app中購買實體或服務(wù)性商品,使得用戶只需要簡單的通過指紋授權(quán)進行交易颗祝,完成購買浊闪。

Apple Pay只能應(yīng)用在某一些設(shè)備中,當前在iPhone 6螺戳,iPhone 6+搁宾, iPad Air 2 以及 iPad mini 3(當前還包括iPhone 6s, iPhone 6s+,iPad pro等所有包含指紋識別的設(shè)備)倔幼,這是因為Apple Pay必須要有一個叫做安全元件(Secure Element)的專門芯片提供支持盖腿,用于存儲和加密機密的信息。

你不應(yīng)該使用Apple Pay這種方式去解鎖你的app的任何特性损同,而應(yīng)該用于程序內(nèi)購買翩腐。Apple Pay是用于購買實體商品和服務(wù)的,例如:會員膏燃、酒店預訂茂卦、訂票等

為什么要使用Apple Pay

Apple Pay能大大的簡化開發(fā)者的工作,你不再需要去操作和管理卡號组哩,也不需要用戶去注冊賬號等龙。同時你可以移除相應(yīng)的業(yè)務(wù)邏輯处渣,你的用戶也不再需要一個賬戶。購買和賬單信息將由 Apple Pay token自動的傳遞給你的支付進程蛛砰。這意味著一個更簡單的購買流程罐栈,帶來更高的轉(zhuǎn)化率。

WWDC session 702泥畅,Apple Pay Within Apps , Nick Shearer 介紹了一些 Apple Pay 在美國的不同商業(yè)交易中超高轉(zhuǎn)化率的統(tǒng)計數(shù)據(jù)荠诬。

Stubhub 發(fā)現(xiàn)使用 Apple Pay 的客戶的轉(zhuǎn)換率超過傳統(tǒng)客戶 20%。

OpenTable在集成 Apple Pay 后轉(zhuǎn)換率增長了50%

Staples 發(fā)現(xiàn)使用 Apply Pay 后位仁,轉(zhuǎn)換率增長了109%

創(chuàng)建一個簡單的商店應(yīng)用(Store App)

我們將創(chuàng)建一個包含商店的簡單應(yīng)用柑贞,并且展示如何使用Apple Pay 去處理我們的交易,這個應(yīng)用將只有一個商品障癌,但是已經(jīng)足以完整的展示如何創(chuàng)建和開始使用Apple Pay

這是我們將要去構(gòu)建的效果凌外,如圖所見辩尊,當用戶點擊“購買”按鈕是會顯示一個Apple Pay的表單

授權(quán)Apple Pay (Enabling Apple Pay)

在我們編寫任何代碼之前涛浙,我們必須確讓我們的應(yīng)用有能力使用Apple Pay,一旦你創(chuàng)建完成一個新的工程摄欲,打開項目設(shè)置轿亮,找到capabilities 標簽

enabling apple pay 1
enabling apple pay 1

你應(yīng)該能夠在 capabilities 里看到 Apple Pay (注:Apple Developer Program members 才能看到),把狀態(tài)設(shè)置為開啟胸墙。你將被要求選擇一個開發(fā)團隊的賬號我注。然后希望Xcode能都為你完成所有設(shè)置,并且Apple Pay能夠使用迟隅。

我們必須要添加一個 Merchant ID但骨,以便 Apple 知道如何去為當前付款信息編碼,點擊在Merchant ID區(qū)域出現(xiàn)的添加按鈕智袭,填寫你的唯一的Merchant ID奔缠。在這個例子中我們使用merchant.com.shinobistore.appleplay

enabling apple pay 2
enabling apple pay 2

使用 Apple Pay

現(xiàn)在我們已經(jīng)配置完成并且擁有權(quán)限,我們要開始搭建 UI 吼野,以便讓用戶可以購買產(chǎn)品和支付校哎。打開 storyboard 添加一些UI,展示可支付的商品瞳步。

我們剛剛創(chuàng)建的UI界面僅僅包括了一個帶有標題闷哆、價格和描述文本的圖片。對我們的Demo來說這并不是重點单起,我們需要添加一個按鈕抱怔,我們把它添到視圖的下面。我們要添加的按鈕是一個 PKPaymentButton, 這個在 iOS 8.3 時引入嘀倒。這個按鈕是本地化的屈留,在能夠使用Apple Pay的時候提供用戶標準的視覺引導讼稚。因此,蘋果強力推薦使用這個按鈕來啟動 Apple Pay 的支付頁面

這個按鈕有三個顯示的樣式:

White 绕沈、 WhiteOutline锐想、 Black

它同樣有兩種不同的按鈕類型

PlainBuy

有幾種不同的方式可以設(shè)置按鈕的樣式乍狐。不幸的是赠摇,當前還不支持在Interface Builder中添加這個類型的按鈕,因此打開ViewController.swift 并且重載(override)viewDidLoad方法

override func viewDidLoad() {
super.viewDidLoad()

    let paymentButton =     PKPaymentButton(type:.Buy, style:.Black)
    paymentButton.translatesAutoresizingMaskIntoConstraints = false
    paymentButton.addTarget(self, action: "buyNowButtonTapped", forControlEvents: .TouchUpInside)
    bottomToolbar.addSubview(paymentButton)

    bottomToolbar.addConstraint(NSLayoutConstraint(item: paymentButton, attribute: .CenterX, relatedBy: .Equal, toItem: bottomToolbar, attribute: .CenterX, multiplier: 1, constant: 0))
    bottomToolbar.addConstraint(NSLayoutConstraint(item: paymentButton, attribute: .CenterY, relatedBy: .Equal, toItem: bottomToolbar, attribute: .CenterY, multiplier: 1, constant: 0))
}

這就是我們?nèi)啃枰龅那瞅健K梢宰赃m應(yīng)藕帜,本質(zhì)上我們真正在意的就是這個按鈕。 當我們點擊了按鈕后惜傲,在 buyNowButtonTapped 方法里洽故,我們啟動購買進程。

當界面搭建好后盗誊,我們必須首先對Apple Pay 的一些類的概念有好的理解

PKPaymentSummaryItem

這個 Object 是在Apple Pay交易表單上的一個簡單條目时甚,他可以使商品,也可以是稅哈踱,或者運費荒适。

PKPaymentRequest

一個 PKPaymentRequest 包含(combines)了一些你想要的關(guān)于用戶支付的一些條目,包括例如你的merchant identifier开镣,country codecurrency code

PKPaymentAuthorisationViewController

PKPaymentAuthorisationViewController 提示用戶授權(quán) PKPaymentRequest刀诬,并且選擇投遞地址和有效的支付卡

PKPayment

PKPayment包括需要處理的交易的信息,并且包含需要顯示的確認信息邪财。

所有的這些類都包含在 PassKit (因此以PK作為前綴)之下陕壹,所以我們需要去引入這個框架,在你需要用到 Apple Pay 的地方

設(shè)置 Payment

設(shè)置payment的第一步:創(chuàng)建一個 PKPaymentRequest 步驟如下:

func buyNowButtonTapped(sender: UIButton) {

// Networks that we want to accept.
let paymentNetworks = [PKPaymentNetworkAmex,
    PKPaymentNetworkMasterCard,
    PKPaymentNetworkVisa,
    PKPaymentNetworkDiscover]

我們需要做的第一件事是創(chuàng)建一個數(shù)組用于存儲可接受的多種支付網(wǎng)絡(luò)树埠,它確定了哪些類型的卡糠馆,是我們想要允許使用的。

if PKPaymentAuthorizationViewController.canMakePaymentsUsingNetworks(paymentNetworks) {

然后我們要檢測弥奸,當前設(shè)備是否可以處理這些類型的交易榨惠。canMakePaymentsUsingNetworks 是PKPaymentAuthorizationViewController 中標準的檢測設(shè)備是否有交易處理能力的方法

let request = PKPaymentRequest()

    // This merchantIdentifier should have been created for you in Xcode when you set up the ApplePay capabilities.
    request.merchantIdentifier = "shinobistore.com.day-by-day."
    request.countryCode = "US" // Standard ISO country code. The country in which you make the charge.
    request.currencyCode = "USD" // Standard ISO currency code. Any currency you like.
    request.supportedNetworks = paymentNetworks
    request.merchantCapabilities = .Capability3DS // 3DS or EMV. Check with your payment platform or processor.

如果我們能夠在當前設(shè)備上處理交易,那么我們將通過上面的代碼創(chuàng)建一個支付請求盛霎,每一行后面的注釋解釋了每一行的作用.

// Set the items that you are charging for. The last item is the total amount you want to charge.
    let shinobiToySummaryItem = PKPaymentSummaryItem(label: "Shinobi Cuddly Toy", amount: NSDecimalNumber(double: 22.99), type: .Final)
    let shinobiPostageSummaryItem = PKPaymentSummaryItem(label: "Postage", amount: NSDecimalNumber(double: 3.99), type: .Final)
    let shinobiTaxSummaryItem = PKPaymentSummaryItem(label: "Tax", amount: NSDecimalNumber(double: 2.29), type: .Final)
    let total = PKPaymentSummaryItem(label: "Total", amount: NSDecimalNumber(double: 29.27), type: .Final)

然后赠橙,正如上面代碼顯示那樣,你現(xiàn)在必須設(shè)置你想在Apple Pay表單中的顯示的產(chǎn)品愤炸,他們會用在下面的這一行paymentSummaryItems

request.paymentSummaryItems = [shinobiToySummaryItem, shinobiPostageSummaryItem, shinobiTaxSummaryItem, total]

這個 API 有趣的一點是期揪,在數(shù)組最后一個,是用戶實際需要支付的金額规个。它在表單的最后凤薛,會特別表示出來姓建。在這里是總價。如果缤苫,你希望現(xiàn)實更多的條目速兔,你需要手動計算并且在列表最后,添加一個PKPaymentSummaryItem

// Create a PKPaymentAuthorizationViewController from the request
    let authorizationViewController = PKPaymentAuthorizationViewController(paymentRequest: request)

    // Set its delegate so we know the result of the payment authorization
    authorizationViewController.delegate = self

    // Show the authorizationViewController to the user
    presentViewController(authorizationViewController, animated: true, completion: nil)

最后活玲,為請求創(chuàng)建一個PKPaymentAuthorizationViewController涣狗,設(shè)置代理并且將它顯示給用戶

現(xiàn)在我們需要確定我們是否實現(xiàn)了PKPaymentAuthorizationViewController 的代理方法,我們需要去實現(xiàn)這些方法舒憾,來讓我們知道交易是否生成镀钓,并在得到授權(quán)或完成后,響應(yīng)相關(guān)事件镀迂。

paymentAuthorizationViewController:didAuthorizePayment 方法中我們需要用 provider 去處理支付數(shù)據(jù)丁溅,然后返回狀態(tài)給我們的應(yīng)用,返回的 PKPayment 擁有一個 PKPaymentToken 的屬性探遵,我們需要發(fā)送給支付的 provider.用于編碼和私鑰加密的

func paymentAuthorizationViewController(controller: PKPaymentAuthorizationViewController, didAuthorizePayment payment: PKPayment, completion: (PKPaymentAuthorizationStatus) -> Void) {

paymentToken = payment.token

// You would typically use a payment provider such as Stripe here using payment.token
completion(.Success)

// Once the payment is successful, show the user that the purchase has been successful.
self.performSegueWithIdentifier("purchaseConfirmed", sender: self)
}

paymentAuthorizationViewControllerDidFinish 方法中窟赏,我們簡單的dismiss我們的ViewController。

func paymentAuthorizationViewControllerDidFinish(controller: PKPaymentAuthorizationViewController) {
self.dismissViewControllerAnimated(true, completion: nil)
}

這就是全部别凤。顯然饰序,在現(xiàn)實世界中,你可能還需要把支付的 token 發(fā)送給支付服務(wù)提供者规哪,例如 Stripe,但這個超出本教程的范圍塌衰。我們還添加了一個 controller 來顯示收據(jù)诉稍。在這個例子中,僅顯示支付 token 的 transactionIdentifier最疆。這是一個被格式化好的的全球唯一的一個字符串杯巨,可以用來做收據(jù)的驗證。

延伸閱讀

關(guān)于 Apple Pay 的更多信息努酸,我推薦觀看 WWDC session 702服爷,Apple Pay Within Apps,視頻相當長,但如果你對將Apple Pay集成到你的應(yīng)用中很感興趣获诈,那它一定是值得觀看仍源。這個 session 中間有一段,講了 Apple Pay 是如何改進交易處理的用戶體驗的舔涎。

另外笼踩,在蘋果開發(fā)者網(wǎng)站上,還有一個文檔 guide to Apple Pay亡嫌。如果你想要在應(yīng)用中集成 Apple Pay 的話嚎于,它是非常值得一讀的掘而。

最后,別忘了于购,如果你想觀看我們在 Demo 中創(chuàng)建的項目的話袍睡,可以在 Github 上找到他。

這是一個系列文章肋僧,查看更多請移步目錄頁

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末女蜈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子色瘩,更是在濱河造成了極大的恐慌伪窖,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件居兆,死亡現(xiàn)場離奇詭異覆山,居然都是意外死亡,警方通過查閱死者的電腦和手機泥栖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門簇宽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吧享,你說我怎么就攤上這事魏割。” “怎么了钢颂?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵钞它,是天一觀的道長。 經(jīng)常有香客問我殊鞭,道長遭垛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任操灿,我火速辦了婚禮锯仪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘趾盐。我一直安慰自己庶喜,他們只是感情好,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布救鲤。 她就那樣靜靜地躺著久窟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜒简。 梳的紋絲不亂的頭發(fā)上瘸羡,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音搓茬,去河邊找鬼犹赖。 笑死队他,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的峻村。 我是一名探鬼主播麸折,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼粘昨!你這毒婦竟也來了垢啼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤张肾,失蹤者是張志新(化名)和其女友劉穎芭析,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吞瞪,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡馁启,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了芍秆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惯疙。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖妖啥,靈堂內(nèi)的尸體忽然破棺而出霉颠,到底是詐尸還是另有隱情,我是刑警寧澤荆虱,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布蒿偎,位于F島的核電站,受9級特大地震影響克伊,放射性物質(zhì)發(fā)生泄漏酥郭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一愿吹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惜姐,春花似錦犁跪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至条舔,卻和暖如春枫耳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背孟抗。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工迁杨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钻心,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓铅协,卻偏偏與公主長得像捷沸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子狐史,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 原文地址這是一個系列文章痒给,查看更多請移步目錄頁 Apple Pay 是在 iOS 8 中第一次被介紹,它可以為你的...
    Nathan_Bao閱讀 3,360評論 1 23
  • Apple Pay 一個方便 & 安全的移動支付技術(shù)骏全,讓用戶完成他們的支付環(huán)節(jié)并把支付相關(guān)的信息告訴你 只可以購買...
    skingtree閱讀 1,897評論 0 4
  • 本文翻譯自Chris Grant的《iOS9 Day-by-Day :: Day8 :: Apple Pay》(h...
    戴維營教育閱讀 969評論 4 7
  • 1.About Apple Pay Apple Pay是一種移動支付技術(shù)苍柏,讓使用者把它們對真實的物品和服務(wù)的支付信...
    NEWWORLD閱讀 5,202評論 14 51
  • 關(guān)于 Apple Pay apple pay 是一種移動支付技術(shù),它可以讓用戶將自己在現(xiàn)實生活中購物姜贡、享受服務(wù)的支...
    LuxDark閱讀 537評論 0 2