Slide 1

Slide 1 text

アプリ内定期購入における
 状態管理と”通知”の活用 2019/11/27 Tech Kitchen #22 ユーザー・決済基盤部 三吉 貴大 @sankich92 1

Slide 2

Slide 2 text

自己紹介 2

Slide 3

Slide 3 text

三吉 貴大 @sankichi92 •2017 新卒 •サービス開発 / 会員事業 →ユーザー・決済基盤 •Android → Rails 3

Slide 4

Slide 4 text

定期購入の状態管理 4

Slide 5

Slide 5 text

定期購入の状態管理 •ユーザーが以下の状態になるのを避ける ‣ お金を払っているのに有料サービスが使えない ‣ お金を払っていないのに有料サービスが使える •決済ゲートウェイの状態と常に同期する 5

Slide 6

Slide 6 text

Polling による素朴な状態管理 •定期的に有効期限が切れた定期購入の最新状態を取得 ‣ 購読中であれば有料サービスの提供を継続 ‣ 購読中でなくなっていれば有料サービスの提供を停止 •(アプリ起動時にも最新状態を取得) 6

Slide 7

Slide 7 text

購読オン・オフ以外の状態 •自動更新の停止 •猶予期間 •商品変更 •試用期間 •課金の延期 •(一時停止) •(価格変更) •(Subscription Offer) 7

Slide 8

Slide 8 text

サービス側からの要望 •請求が失敗して猶予期間に入った場合に支払い方法の 更新を促したい •1年プランを途中解約したユーザー数やどのタイミング で途中解約が行われたかを把握したい •etc... 8

Slide 9

Slide 9 text

アプリ内定期購入の“通知” 9

Slide 10

Slide 10 text

アプリ内定期購入の“通知” •Google Play real-time developer notifications ‣ https://developer.android.com/google/play/billing/ realtime_developer_notifications •Apple App Store server-to-server notifications ‣ https://developer.apple.com/documentation/ appstoreservernotifications 10

Slide 11

Slide 11 text

利用方法の全体像 1. 共通決済基盤で Webhook として通知を受信 2. 対象の定期購入の状態を更新 3. 通知のログを DWH に保存 ‣ データ活用基盤の今 〜DWH外観図〜 4. 必要に応じて各サービスへ Amazon SNS で通知 11

Slide 12

Slide 12 text

Google Play Real-time developer notifications 12

Slide 13

Slide 13 text

通知方法 •Cloud Pub/Sub のトピックを設定すると通知が送られてくる ‣ push サブスクリプションで利用 ‣ (JWT を使った認証周りのドキュメントが分散している) • https://cloud.google.com/pubsub/docs/push • https://developers.google.com/identity/protocols/ OpenIDConnect#validatinganidtoken 13

Slide 14

Slide 14 text

14

Slide 15

Slide 15 text

注文ごとの通知履歴 15

Slide 16

Slide 16 text

クエリの結果 DPEF FWFOU@UJNF OPUJpDBUJPO@UZQF S20190901-03-58231966 2019-09-30 17:03:15.003 6 S20190901-03-58231966 2019-09-30 18:04:56.131 2 S20190901-03-58231966 2019-10-30 17:03:14.203 2 16

Slide 17

Slide 17 text

クックパッドでの利用 •猶予期間に入ったユーザーに対するお知らせ ‣ 非自発的解約が大幅に減少 •自動更新をオフにしたユーザーの観測 ‣ ライブ配信の直後に解約したユーザー数をダッシュボード化し てよりリアルな数値を把握 •施策検討や問い合わせ対応など adhoc な分析 17

Slide 18

Slide 18 text

Apple App Store Server-to-server notifications 18

Slide 19

Slide 19 text

通知方法 •エンドポイントを設定すると HTTP POST で送られて くる ‣ 認証は password (shared secret) • https://developer.apple.com/documentation/storekit/in- app_purchase/enabling_server-to-server_notifications 19

Slide 20

Slide 20 text

Google Play との通知内容の違い •イベントだけでなくレシートの情報も送られてくる •notification_type によってあるフィールドがあったり なかったりと JSON スキーマが一定でない •1つのイベントに対し複数の notification_type を組み 合わせて同時に通知が送られてくる 20

Slide 21

Slide 21 text

21

Slide 22

Slide 22 text

22

Slide 23

Slide 23 text

変更点 •猶予期間周りの notification_type が増えた •フィールドに unified_receipt が増えた ‣ レシート検証しなくても履歴が取れるように •関連ドキュメントもアップデートされた ‣ 同時に送られてくる複数の通知の扱い方が明文化された •https://developer.apple.com/videos/play/wwdc2019/302/ 23

Slide 24

Slide 24 text

まとめ 24

Slide 25

Slide 25 text

•アプリ内定期購入では毎年新たな機能が増えている •それらを利用するには”通知”をうまく活用することが 必須になる •クックパッドでは定期購入の状態をただ更新するだけ でなく、DWHに通知を保存して活用している 25