potatotips #17で発表した資料の加筆修正版です。
いつかくるそのときの参考になれば幸いです。詳しい対応方法は以下のURLを熟読してください。 https://developer.apple.com/apple-pay/
いつかくるそのときのために Apple Pay対応のやりかた株式会社メルカリ iOSエンジニア ⼤大庭慎⼀一郎郎
View Slide
⾃自⼰己紹介⼤大庭 慎⼀一郎郎 (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 Braintree Chase Paymentech CyberSource First Data Stripe TSYS˞ IUUQTEFWFMPQFSBQQMFDPNBQQMFQBZΑΓൈਮ ݱࡏ
Apple Pay決済の流流れ˞ʮ(FUUJOH4UBSUFEXJUI"QQMF1BZʯ͔ΒҾ༻
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 = @“";NSDecimalNumber *amount = [NSDecimalNumber decimalNumberWithMantissa:500exponent:-2isNegative:NO];PKPaymentSummaryItem *summaryItem = [PKPaymentSummaryItem summaryItemWithLabel:@"Mercari"amount:amount];paymentRequest.paymentSummaryItems = @[summaryItem];paymentRequest.supportedNetworks = @[PKPaymentNetworkAmex,PKPaymentNetworkMasterCard,PKPaymentNetworkVisa];paymentRequest.merchantCapabilities = PKMerchantCapability3DS;paymentRequest.requiredBillingAddressFields = PKAddressFieldPostalAddress;
PKPaymentAuthorizationViewControllerを表⽰示PKPaymentAuthorizationViewController *vc = [[PKPaymentAuthorizationViewController alloc]initWithPaymentRequest:paymentRequest];vc.delegate = (id)self;[self presentViewController:vc animated:YES completion:nil];
PKPaymentAuthorizationViewControllerの表⽰示例例
PKPaymentAuthorizationViewControllerDelegateの対応- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controllerdidAuthorizePayment:(PKPayment *)paymentcompletion:(void (^)(PKPaymentAuthorizationStatus))completion{// ࢧ͍ใΛؚΜͩPKPaymentͷΠϯελϯε͕औಘͰ͖Δ// αʔόʹ payment.token QBZNFOU.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が有効になっているのに実装されていないからリジェクトするね
警告事案JP版をUS版と同じプロジェクトからビルドしたら、サブミット時に⾃自動的に警告メールがきた → とりあえず審査員向けのコメントで説明 → その後、ビルドを⼯工夫してJP版からPassKitへの参照をなくしたアプリの設定でApple Payが有効になっていないのに実装が⼊入っているんだけど
最後に宣伝メルカリで開発・運⽤用している汎⽤用プッシュ通知サーバ「Gaurun(がうるん)」を公開しました! Go⾔言語! OSS! https://github.com/mercari/gaurun