348 Views
May 13, 15
スライド概要
potatotips #17で発表した資料の加筆修正版です。
いつかくるそのときの参考になれば幸いです。詳しい対応方法は以下のURLを熟読してください。
https://developer.apple.com/apple-pay/
SwiftとLEGOとBluetooth LEが好きなプログラマ
いつかくるそのときのために Apple Pay対応のやりかた 株式会社メルカリ iOSエンジニア ⼤大庭慎⼀一郎郎
⾃自⼰己紹介 ⼤大庭 慎⼀一郎郎 (ooba / bricklife) 株式会社メルカリ 2013年年4⽉月⼊入社 「メルカリ」iOS版を開発
メルカリとは? いわゆる「フリマアプリ」 2013年年7⽉月 JP版リリース 2014年年8⽉月 US版リリース 2015年年2⽉月 Apple Pay対応
Apple Payって?
Apple Pay 現状USでしか使えないApple独⾃自の決済システム 端末内の「セキュアエレメント」にカード情報を保持 カード情報のほかに連絡先なども保存できる 決済時にはカード情報は送られない 実店舗でのNFC決済のほか、アプリ内でも使える
Apple Payの利利⽤用条件 iPhone 6、iPhone 6 Plus、iPad Air 2、iPad mini 3 iOS 8.1以上 地域設定が「アメリカ合衆国」になっている Touch IDまたはパスコードの設定 iCloudアカウント
Apple Payが有効になると
対応している決済システム Authorize.Net First Data Braintree Stripe Chase Paymentech TSYS CyberSource ※ https://developer.apple.com/apple-pay/ より抜粋 (2015/5現在)
Apple Pay決済の流流れ ※ 「Getting Started with Apple Pay」から引用
Apple Pay対応⼿手順
準備 1. Merchant IDを作成 2. プロジェクトでApple Payを有効
実装 1. 実⾏行行端末でApple Payが使えるかどうかの確認 2. Apple Payのガイドラインに沿ったボタンを表⽰示 3. PKPaymentRequestを⽣生成 4. PKPaymentAuthorizationViewControllerを表⽰示 5. PKPaymentAuthorizationViewControllerDelegateの対応
Merchant IDの作成
Apple Payを有効
Apple Payが使えるか確認 PKPaymentAuthorizationViewControllerのクラス メソッドで確認できる + canMakePayments + canMakePaymentsUsingNetworks:
Apple Payボタンの設置 「Apple Pay Button and Resources」から好きなの を選んで使う 「Apple Pay Identity Guidelines」によい例例と悪い 例例が書いてあるので参考にする iOS 8.3以降降ならPKPaymentButtonで⽣生成できる
Apple Payボタンの設置例例
PKPaymentRequestの⽣生成
PKPaymentRequest *paymentRequest = [[PKPaymentRequest alloc] init];
paymentRequest.currencyCode = @"USD";
paymentRequest.countryCode = @"US";
paymentRequest.merchantIdentifier = @“<YOUR MERCHANT ID>";
NSDecimalNumber *amount = [NSDecimalNumber decimalNumberWithMantissa:500
exponent:-2
isNegative:NO];
PKPaymentSummaryItem *summaryItem = [PKPaymentSummaryItem summaryItemWithLabel:@"Mercari"
amount:amount];
paymentRequest.paymentSummaryItems = @[summaryItem];
paymentRequest.supportedNetworks = @[PKPaymentNetworkAmex,
PKPaymentNetworkMasterCard,
PKPaymentNetworkVisa];
paymentRequest.merchantCapabilities = PKMerchantCapability3DS;
paymentRequest.requiredBillingAddressFields = PKAddressFieldPostalAddress;
PKPaymentAuthorizationView Controllerを表⽰示 PKPaymentAuthorizationViewController *vc = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:paymentRequest]; vc.delegate = (id<PKPaymentAuthorizationViewControllerDelegate>)self; [self presentViewController:vc animated:YES completion:nil];
PKPaymentAuthorizationView Controllerの表⽰示例例
PKPaymentAuthorizationView ControllerDelegateの対応 - (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus))completion { // 支払い情報を含んだPKPaymentのインスタンスが取得できる // サーバに payment.token や payment.billingAddress など必要な情報を送る completion(PKPaymentAuthorizationStatusSuccess); } - (void)paymentAuthorizationViewControllerDidFinish:(UIViewController *)controller { [controller dismissViewControllerAnimated:YES completion:nil]; }
Apple Pay対応の罠
開発・QAがつらい 利利⽤用条件を揃えてもApple Payが使えないことがある US発⾏行行のクレジットカードじゃないと登録できない https://support.apple.com/ja-‐‑‒jp/HT6288 Enterprise配布では使えない → ⽇日本で開発・QAするのつらい
リジェクト事案 アプリの設定でApple Payが有効になっているのに 実装されていないからリジェクトするね 開発のためにApple Payを有効にしたけど、まだ実装完了了 していない状態でサブミットしたらリジェクトされた… →「次のバージョンで実装するから!」と⾔言って回避
警告事案 アプリの設定でApple Payが有効になっていないの に実装が⼊入っているんだけど JP版をUS版と同じプロジェクトからビルドしたら、サブミット時 に⾃自動的に警告メールがきた → とりあえず審査員向けのコメントで説明 → その後、ビルドを⼯工夫してJP版からPassKitへの参照をなくした
最後に宣伝 メルカリで開発・運⽤用している汎⽤用プッシュ 通知サーバ「Gaurun(がうるん)」を公開 しました! Go⾔言語! OSS! https://github.com/mercari/gaurun