Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
サブスクリプションサービスにおけるIn-App Purchase再考 / Rethink In...
Search
Masato Ohba
September 01, 2018
Technology
7
7.4k
サブスクリプションサービスにおけるIn-App Purchase再考 / Rethink In-App Purchase on subscription services
iOSDC2018「サブスクリプションサービスにおけるIn-App Purchase再考」
リアルタイムでの反応はこちら
https://togetter.com/li/1262366
Masato Ohba
September 01, 2018
Tweet
Share
More Decks by Masato Ohba
See All by Masato Ohba
Unlocking Potential of Property Based Testing with Ractor
ohbarye
3
12k
プロトタイピングによる不確実性の低減 / Reducing Uncertainty through Prototyping
ohbarye
5
760
My Favorite Protocol: Idempotency-Key Header
ohbarye
7
5.7k
エンジニア9名でプロポーザル提出8件, 採択3件を支える技術と文化 / Proposal Fight Culture
ohbarye
1
5.2k
管理機能アーキテクチャパターンの考察と実践 / Learn Architecture through Admin
ohbarye
33
17k
サブスクリプションサービスをつくる時にエンジニアが考えること / Behind the Scenes: Engineering a Subscription Service
ohbarye
15
17k
RuboCop Custom Formatter for Reviewdog Diagnostic Format
ohbarye
2
2.1k
DB外の副作用をトランザクションから分離しよう / Isolate out-of-DB side effects from transactions
ohbarye
8
4k
Balance Security and Usability in the Field of 3D Secure
ohbarye
4
4.1k
Other Decks in Technology
See All in Technology
Zero Data Loss Autonomous Recovery Service サービス概要
oracle4engineer
PRO
0
3.1k
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
9
41k
開発者体験を意識した開発チームの生産性向上の取り組み
ham0215
3
650
Practical GenAI with Go - Elastic and Golang Sydney
adriancole
0
130
Oracle Database 23ai 新機能 #3 Oracle Globally Distributed Database(GDD)
oracle4engineer
PRO
1
160
Oracle Exadata Database Service(Dedicated Infrastructure):サービス概要のご紹介
oracle4engineer
PRO
0
9.3k
FastConnect の冗長性
ocise
0
7.1k
分野に潜むツールの紹介
pojiro
1
330
waitany と waitall を作った話
mrkn
0
110
#Zenoh 完全に理解した 〜組込み純情篇〜
takasehideki
1
450
contenteditableと向き合う
kikuchikakeru
2
140
20分で分かるIAM全機能 (拡大版) / 20240903-jawsug-yokohama-iam
opelab
3
120
Featured
See All Featured
Fontdeck: Realign not Redesign
paulrobertlloyd
80
5.1k
Faster Mobile Websites
deanohume
304
30k
A designer walks into a library…
pauljervisheath
201
24k
Designing with Data
zakiwarfel
98
5k
Stop Working from a Prison Cell
hatefulcrawdad
266
20k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
190
16k
Making the Leap to Tech Lead
cromwellryan
128
8.8k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
22
580
The World Runs on Bad Software
bkeepers
PRO
64
11k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
RailsConf 2023
tenderlove
26
790
The Invisible Customer
myddelton
119
13k
Transcript
#iosdc サブスクリプションサービスにおける In-App Purchase再考 サブスクリプションサービスにおける In-App Purchase再考 @ohbarye iOSDC Japan
2018
#iosdc サブスクリプションサービスにおける In-App Purchase再考 言いたいこと WAIT In-App Purchaseがベストな選択肢か、もう一度考えてみましょう
#iosdc サブスクリプションサービスにおける In-App Purchase再考 用語の定義 ➔ In-App Purchase(アプリ内課金):デバイスやコンピュータ上のアプリの中 で追加のコンテンツや定期購読コンテンツを購入できるしくみ ➔
本セッションでは ◆ In-App PurchaseをIAPと呼称します ◆ iOSに限定します(Amazon, Android, Unity IAPなどは除く)
#iosdc サブスクリプションサービスにおける In-App Purchase再考 IAPを知っている Webサービスにおける 一般的な決済を知っている 想定する聴衆 ココ以外
#iosdc サブスクリプションサービスにおける In-App Purchase再考 Agenda | 01 02 03 04
自己紹介、どういう立場から語るのか Webサービス/IAPの決済基礎 IAPと他決済手段の比較 結論
#iosdc サブスクリプションサービスにおける In-App Purchase再考 お話しないこと ➔ IAPの実装方法の詳細 ◆ コードは全く出てきません ➔
自動更新購読 (Auto-Renewable) 型以外のIAP ◆ 消耗型、非消耗型、非更新購読 ◆ サブスクリプションサービスの実現とはあまり関係ないため
#iosdc サブスクリプションサービスにおける In-App Purchase再考 自己紹介、どういう立場から語るのか 01
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ Engineering Manager in ➔ 決済開発・運用を3年弱
@ohbarye
#iosdc サブスクリプションサービスにおける In-App Purchase再考 #1 on 2018-09-27 https://connpass.com/event/97627/
#iosdc サブスクリプションサービスにおける In-App Purchase再考
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ 主に中高生向けの動画視聴サブスクリプションサービス ➔ 月額1,058円(税込) ◆ クレカ・コンビニ・キャリア
➔ または月額1,200円(税込) ◆ IAP スタディサプリ この辺+αを 運用しています
#iosdc サブスクリプションサービスにおける In-App Purchase再考 IAPを知っている Webサービスにおける 一般的な決済を知っている 真ん中から語ります
#iosdc サブスクリプションサービスにおける In-App Purchase再考 Webサービス/IAPの決済基礎 02
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ Webサービスの決済基礎 ◆ 登場人物の整理 ◆ 決済ゲートウェイとは
➔ IAPの場合
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ Webサービスの決済基礎 ◆ 登場人物の整理 ◆ 決済ゲートウェイとは
➔ IAPの場合
#iosdc サブスクリプションサービスにおける In-App Purchase再考 立替払契約 参考 http://blog.kyash.co/entry/2018/05/14/102255 加盟店 登場人物 簡略図(クレカ決済の一例)
決済ゲートウェイ カード会社 イシュア・ アクワイアラ 売買契約 高校生・保護者 SBPS (ソフトバンク ペイメントサービス) スタディサプリ 三井住友カード
#iosdc サブスクリプションサービスにおける In-App Purchase再考 加盟店 登場人物 簡略図(キャリア決済の一例) 決済ゲートウェイ キャリア各社 売買契約
高校生・保護者 SBPS (ソフトバンク ペイメントサービス) ソフトバンク スタディサプリ 立替払契約
#iosdc サブスクリプションサービスにおける In-App Purchase再考 加盟店 登場人物 簡略図(コンビニ決済の一例) 決済ゲートウェイ コンビニ各社 売買契約
高校生・保護者 SBPS (ソフトバンク ペイメントサービス) セブンイレブン スタディサプリ 支払
#iosdc サブスクリプションサービスにおける In-App Purchase再考 決済ゲートウェイ?
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ Webサービスの決済基礎 ◆ 登場人物の整理 ◆ 決済ゲートウェイとは
➔ IAPの場合
#iosdc サブスクリプションサービスにおける In-App Purchase再考 決済ゲートウェイとは ➔ 多種の決済を一括の契約とシステムで導入できるサービス ➔ カード会社・コンビニ各社の締日や入金タイミングの差分を吸収 ◆
経理上も嬉しい ➔ デザインパターンでいうFacade pattern SBPS GMOペイメント ベリトランス MF KESSAI etc.
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ Webサービスの決済基礎 ◆ 登場人物の整理 ◆ 決済ゲートウェイとは
➔ IAPの場合
#iosdc サブスクリプションサービスにおける In-App Purchase再考 加盟店 IAPの場合 Apple 売買契約 高校生・保護者 スタディサプリ
カード会社 キャリア各社 Apple ID コンビニ各社
#iosdc サブスクリプションサービスにおける In-App Purchase再考 Appleが 決済ゲートウェイにあたる つまり…
#iosdc サブスクリプションサービスにおける In-App Purchase再考 IAPを再考するには 決済ゲートウェイとして 比較してみるのも一案
#iosdc サブスクリプションサービスにおける In-App Purchase再考 IAPと他決済手段の比較 03
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ 開発〜テスト ➔ 運用 ◆ 障害対応、カスタマーサポート、加盟店サポート
➔ ビジネス ◆ 手数料、マルチプラットフォーム、撤退 以下の3つの観点で比較
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ 開発〜テスト ➔ 運用 ◆ 障害対応、カスタマーサポート、加盟店サポート
➔ ビジネス ◆ 手数料、マルチプラットフォーム、撤退
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ コードレベルの実装コストはややIAPが高い ◆ IAPの場合iOSがわかるエンジニアが必須 ◆ クライアントサイドUIとサーバサイド、定期実行ジョブの3つの実装が必
要になるのは同じ ➔ トランザクション管理の問題が一番やっかい ◆ 特にIAPは通信のシーケンスが複雑 開発の比較
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ 決済の実装ではステージング環境でのテスト容易性が大事 ➔ AppStoreのsandbox (通称 ”精神と時の部屋”)
には幾つか問題点がある ◆ 不安定、App Storeに接続できず失敗することがある ◆ App Store側での購読状態をこちらでコントロールできない ➔ リリースクオリティを満たせるか不安になることがしばしばある… テストの比較(IAPの問題)
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ 任意のタイミングで任意のレスポンスを返せる仕組みがある ◆ ソフトバンクペイメントサービスではGUIでレスポンスを操作可能 ◆ Stripeはmock
serverの実装を公開しており、自前で立てられる ➔ テストが容易、想定ケースを網羅することで安心してリリースできる テストの比較(他の決済ゲートウェイ)
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ 開発〜テスト ➔ 運用 ◆ 障害対応、カスタマーサポート、加盟店サポート
➔ ビジネス ◆ 手数料、マルチプラットフォーム、撤退
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ どんなに堅牢に作っても障害は絶対に起きる ➔ 決済ゲートウェイに求めるもの 障害対応の観点
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ 加盟店側サーバがDown ◆ 決済ゲートウェイへ支払い確定を送ったがこちらのサーバが死んでいる 場合「お金を払っているのに閲覧できない」という問題に ➔
決済ゲートウェイ側サーバがDown ◆ 例外をこちらでハンドル可能なのでマシ ◆ どのタイミングでダウンしたかによってデータの一貫性を保つのが困難 なこともある 障害の例
#iosdc サブスクリプションサービスにおける In-App Purchase再考 こうした問題に対して ➔ SBPS (ソフトバンクペイメントサービス) ◆ 決済ゲートウェイ側の障害発生時間通知がある
◆ どちらかが正常に処理を完了できなかった場合の通知がある ◆ => 障害に付随する問題を検知できる ➔ App Store ◆ 特になし (知ってたら教えてください)
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ サブスクリプションサービスでは決済に関する問い合わせは必ず来る ◆ 「払ったのに使えない」 ◆ 「退会手続きをしたい」「返金してほしい」
カスタマーサポートの観点
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ SBPS (ソフトバンクペイメントサービス) ◆ 決済ゲートウェイ側の管理画面と呼ばれるWebサイトで決済履歴を照 会できる
➔ App Store ◆ iTunes Connect からは特定のユーザーの情報を閲覧できない 「払ったのに使えない」
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ SBPS (ソフトバンクペイメントサービス) ◆ 一部決済手段を除いて可能 ➔
IAPの自動更新では ◆ 加盟店側で強制的に解約することや返金することはできない ◆ 期間内の返金はユーザーからAppleへ問い合わせしてもらう 「退会手続きをしたい」「返金してほしい」
#iosdc サブスクリプションサービスにおける In-App Purchase再考 加盟店サポートの観点 ➔ SBPS (ソフトバンクペイメントサービス) ◆ 加盟店サポートヘルプデスクがある
◆ 加盟店ごとの個別対応にかなり柔軟 ◆ 不整合を検知した時は異常データの修正までやってくれる ➔ App Store ◆ 問い合わせることはできるが加盟店個別の対応は基本的に無い
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ 開発〜テスト ➔ 運用 ◆ 障害対応、カスタマーサポート、加盟店サポート
➔ ビジネス ◆ 手数料、マルチプラットフォーム、撤退
#iosdc サブスクリプションサービスにおける In-App Purchase再考 30%
#iosdc サブスクリプションサービスにおける In-App Purchase再考 3~4%
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ 30%: 自動更新型IAPの手数料 ◆ 2年目から15%(※ユーザー単位) ➔
3~4%: 日本の主流な決済の手数料 ◆ (『銀行が「LINEペイ」に到底勝てない根本理由』より) ➔ 販売価格が同じだと純粋に利益率に響く ◆ IAPによる購入だけ単価を上げることもできるが… ビジネス観点の比較(手数料)
#iosdc サブスクリプションサービスにおける In-App Purchase再考 混乱
#iosdc サブスクリプションサービスにおける In-App Purchase再考 マルチプラットフォーム
#iosdc サブスクリプションサービスにおける In-App Purchase再考 iOSだけでなくAndroidや Webでサービス提供する 予定ありますか
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ IAPはiOSにしか適用できない ◆ ビジネスが成長してマルチプラットフォーム対応する場合、大きな足か せ ➔
初手IAPは考えもの ◆ スタディサプリもApple以外の決済ゲートウェイを介した決済手段を実 装し、後からIAPを追加した YESなら以下に留意
#iosdc サブスクリプションサービスにおける In-App Purchase再考 iOSから撤退して 別プラットフォームに移る 可能性はありますか
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ IAPに限らずサブスクリプションモデルの決済をやめるのは難しい ◆ 新規申し込みを止めることはできる ◆ 既存ユーザーが使い続ける限りコードやチーム体制は残り続ける
➔ マルチプラットフォーム対応や手数料差を考えて他の決済手段に移ろうにも 運用コストのためになかなか離れられない…という事態を招く可能性 YESなら以下に留意
#iosdc サブスクリプションサービスにおける In-App Purchase再考 そろそろIAPの 良いところが聞きたい
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ iOSプラットフォームとインテグレートされたスムーズな決済の流れ ◆ クレカ情報などを入れることなく、ログイン済のAppleアカウントに紐づく 情報で決済 ◆
登録後に別サイトに飛んで決済するより遥かに良いユーザー体験 ➔ クレカを持たない高校生がメインターゲットとなるスタディサプリではユーザー がプリペイドで使うケースも多くて人気 IAPの優位性
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ シームレスな決済体験は必ずしもIAPの独壇場ともいえないかも ➔ アプリ内では ◆ 後述の一部のケースでiOSアプリ内にStripeの決済導入が可能
➔ Webでもモバイルでの決済体験向上が進んでいる ◆ Payment Request API ◆ Apple Pay on Safari とはいえ
#iosdc サブスクリプションサービスにおける In-App Purchase再考 結論 04
#iosdc サブスクリプションサービスにおける In-App Purchase再考 言いたいこと again WAIT In-App Purchaseがベストな選択肢か、もう一度考えてみましょう
#iosdc サブスクリプションサービスにおける In-App Purchase再考 とはいえIAPでないと 審査通らないのでは…?
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ガイドラインを読む > 3.1.5(a)アプリケーションの外部で使用する商品やサービス: ユーザーが アプリケーションの外部で使用する商品やサービスをアプリケーションで購入 できるようにする場合、そうした商品の支払いにはApp内課金以外(Apple
Payや クレジットカードなど)の方法を使用する必要があります。 https://developer.apple.com/jp/app-store/review/guidelines/#in-ap p-purchase
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ アプリ外部で使用する商品(実物、チューターサービス)を販売する場合はむ しろIAPは使えない ◆ 参考: BOOTH
iOSアプリはどうやって有料ダウンロード商品の販売を解禁したか? https://inside.pixiv.blog/danbo-tanak/4749 ➔ コーチによる学習サポートを提供するスタディサプリ合格特訓コースではクレ カ決済で申し込める ※ 審査リジェクトリスクは常にあります。選択は自己責任でお願いします。 IAP以外の決済手段提供ができるとき
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ 「iOSのサブスクリプションサービスならIAPだ」と安易に選択する前に再考し てほしい ◆ 決済ゲートウェイとしてのクオリティに着目すると良い ◆
その選択で御社のサーバサイドエンジニアが苦しむかもしれない ➔ 決済手段の導入はビジネス上の戦略も含めた重大な意思決定になる ◆ エンジニアとしてリスク洗い出し・代替手段検討をしっかりやる 改めて結論
#iosdc サブスクリプションサービスにおける In-App Purchase再考 Thank you!
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ 決済業界 ◆ http://finance-startups.jp/2017/04/smartpayment-competitionarea/ ◆ http://blog.kyash.co/entry/2018/05/14/102255
➔ 手数料 ◆ https://developer.apple.com/jp/app-store/subscriptions/ ◆ https://toyokeizai.net/articles/-/233362 ➔ 審査 ◆ https://inside.pixiv.blog/danbo-tanak/4749 参考資料
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ Apple関連 ◆ https://developer.apple.com/jp/app-store/Receipt-Validation-Programming-Guide-JP.pdf ◆ https://developer.apple.com/jp/app-store/review/guidelines/#in-app-purchase
◆ https://developer.apple.com/jp/documentation/NetworkingInternet/Conceptual/StoreKitGuide/I ntroduction.html ◆ https://developer.apple.com/jp/documentation/General/ValidateAppStoreReceipt/Introduction. html ➔ Stripe関連 ◆ https://github.com/stripe/stripe-mock ◆ https://stripe.com/docs/mobile/ios
#iosdc サブスクリプションサービスにおける In-App Purchase再考 ➔ Apple Pay on Safari ◆
https://www.ipodwave.com/iphone/howto/apple-pay-web-pay.html ➔ Payment Request API ◆ https://developers.google.com/web/updates/2016/07/payment-request