Slide 1

Slide 1 text

いつかくるそのときのために   Apple  Pay対応のやりかた 株式会社メルカリ   iOSエンジニア   ⼤大庭慎⼀一郎郎

Slide 2

Slide 2 text

⾃自⼰己紹介 ⼤大庭  慎⼀一郎郎  (ooba  /  bricklife)   株式会社メルカリ   2013年年4⽉月⼊入社   「メルカリ」iOS版を開発

Slide 3

Slide 3 text

メルカリとは? いわゆる「フリマアプリ」   2013年年7⽉月  JP版リリース   2014年年8⽉月  US版リリース   2015年年2⽉月  Apple  Pay対応

Slide 4

Slide 4 text

Apple  Payって?

Slide 5

Slide 5 text

Apple  Pay 現状USでしか使えないApple独⾃自の決済システム   端末内の「セキュアエレメント」にカード情報を保持   カード情報のほかに連絡先なども保存できる   決済時にはカード情報は送られない   実店舗でのNFC決済のほか、アプリ内でも使える

Slide 6

Slide 6 text

Apple  Payの利利⽤用条件 iPhone  6、iPhone  6  Plus、iPad  Air  2、iPad  mini  3   iOS  8.1以上   地域設定が「アメリカ合衆国」になっている   Touch  IDまたはパスコードの設定   iCloudアカウント

Slide 7

Slide 7 text

Apple  Payが有効になると

Slide 8

Slide 8 text

対応している決済システム Authorize.Net   Braintree   Chase  Paymentech   CyberSource   First  Data   Stripe   TSYS ˞ IUUQTEFWFMPQFSBQQMFDPNBQQMFQBZΑΓൈਮ ݱࡏ

Slide 9

Slide 9 text

Apple  Pay決済の流流れ ˞ʮ(FUUJOH4UBSUFEXJUI"QQMF1BZʯ͔ΒҾ༻

Slide 10

Slide 10 text

Apple  Pay対応⼿手順

Slide 11

Slide 11 text

準備 1. Merchant  IDを作成   2. プロジェクトでApple  Payを有効

Slide 12

Slide 12 text

実装 1. 実⾏行行端末でApple  Payが使えるかどうかの確認   2. Apple  Payのガイドラインに沿ったボタンを表⽰示   3. PKPaymentRequestを⽣生成   4. PKPaymentAuthorizationViewControllerを表⽰示   5. PKPaymentAuthorizationViewControllerDelegateの対応

Slide 13

Slide 13 text

Merchant  IDの作成

Slide 14

Slide 14 text

Apple  Payを有効

Slide 15

Slide 15 text

Apple  Payが使えるか確認 PKPaymentAuthorizationViewControllerのクラス メソッドで確認できる   +  canMakePayments   +  canMakePaymentsUsingNetworks:


Slide 16

Slide 16 text

Apple  Payボタンの設置 「Apple  Pay  Button  and  Resources」から好きなの を選んで使う   「Apple  Pay  Identity  Guidelines」によい例例と悪い 例例が書いてあるので参考にする   iOS  8.3以降降ならPKPaymentButtonで⽣生成できる

Slide 17

Slide 17 text

Apple  Payボタンの設置例例

Slide 18

Slide 18 text

PKPaymentRequestの⽣生成 PKPaymentRequest *paymentRequest = [[PKPaymentRequest alloc] init]; paymentRequest.currencyCode = @"USD"; paymentRequest.countryCode = @"US"; paymentRequest.merchantIdentifier = @“"; 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;

Slide 19

Slide 19 text

PKPaymentAuthorizationView Controllerを表⽰示 PKPaymentAuthorizationViewController *vc = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:paymentRequest]; vc.delegate = (id)self; [self presentViewController:vc animated:YES completion:nil];

Slide 20

Slide 20 text

PKPaymentAuthorizationView Controllerの表⽰示例例

Slide 21

Slide 21 text

PKPaymentAuthorizationView ControllerDelegateの対応 - (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus))completion { // ࢧ෷͍৘ใΛؚΜͩPKPaymentͷΠϯελϯε͕औಘͰ͖Δ // αʔόʹ payment.token ΍ QBZNFOU.billingAddress ͳͲඞཁͳ৘ใΛૹΔ completion(PKPaymentAuthorizationStatusSuccess); } - (void)paymentAuthorizationViewControllerDidFinish:(UIViewController *)controller { [controller dismissViewControllerAnimated:YES completion:nil]; }

Slide 22

Slide 22 text

Apple  Pay対応の罠

Slide 23

Slide 23 text

開発・QAがつらい 利利⽤用条件を揃えてもApple  Payが使えないことがある   US発⾏行行のクレジットカードじゃないと登録できない   https://support.apple.com/ja-‐‑‒jp/HT6288   Enterprise配布では使えない   →  ⽇日本で開発・QAするのつらい

Slide 24

Slide 24 text

リジェクト事案 開発のためにApple  Payを有効にしたけど、まだ実装完了了 していない状態でサブミットしたらリジェクトされた…   →「次のバージョンで実装するから!」と⾔言って回避 アプリの設定でApple  Payが有効になっているのに 実装されていないからリジェクトするね 

Slide 25

Slide 25 text

警告事案 JP版をUS版と同じプロジェクトからビルドしたら、サブミット時 に⾃自動的に警告メールがきた   →  とりあえず審査員向けのコメントで説明   →  その後、ビルドを⼯工夫してJP版からPassKitへの参照をなくした アプリの設定でApple  Payが有効になっていないの に実装が⼊入っているんだけど 

Slide 26

Slide 26 text

最後に宣伝 メルカリで開発・運⽤用している汎⽤用プッシュ 通知サーバ「Gaurun(がうるん)」を公開 しました!  Go⾔言語!  OSS!   https://github.com/mercari/gaurun