Cookpad Tech Kitchen #22 決済基盤の最新事情 https://cookpad.connpass.com/event/153267/ https://techlife.cookpad.com/entry/2019/12/17/113612
アプリ内定期購入における 状態管理と”通知”の活用2019/11/27 Tech Kitchen #22ユーザー・決済基盤部三吉 貴大 @sankich921
View Slide
自己紹介2
三吉 貴大 @sankichi92•2017 新卒•サービス開発 / 会員事業→ユーザー・決済基盤•Android → Rails3
定期購入の状態管理4
定期購入の状態管理•ユーザーが以下の状態になるのを避ける‣ お金を払っているのに有料サービスが使えない‣ お金を払っていないのに有料サービスが使える•決済ゲートウェイの状態と常に同期する5
Polling による素朴な状態管理•定期的に有効期限が切れた定期購入の最新状態を取得‣ 購読中であれば有料サービスの提供を継続‣ 購読中でなくなっていれば有料サービスの提供を停止•(アプリ起動時にも最新状態を取得)6
購読オン・オフ以外の状態•自動更新の停止•猶予期間•商品変更•試用期間•課金の延期•(一時停止)•(価格変更)•(Subscription Offer)7
サービス側からの要望•請求が失敗して猶予期間に入った場合に支払い方法の更新を促したい•1年プランを途中解約したユーザー数やどのタイミングで途中解約が行われたかを把握したい•etc...8
アプリ内定期購入の“通知”9
アプリ内定期購入の“通知”•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/appstoreservernotifications10
利用方法の全体像1. 共通決済基盤で Webhook として通知を受信2. 対象の定期購入の状態を更新3. 通知のログを DWH に保存‣ データ活用基盤の今 〜DWH外観図〜4. 必要に応じて各サービスへ Amazon SNS で通知11
Google PlayReal-time developer notifications12
通知方法•Cloud Pub/Sub のトピックを設定すると通知が送られてくる‣ push サブスクリプションで利用‣ (JWT を使った認証周りのドキュメントが分散している)• https://cloud.google.com/pubsub/docs/push• https://developers.google.com/identity/protocols/OpenIDConnect#validatinganidtoken13
14
注文ごとの通知履歴15
クエリの結果DPEF [email protected] [email protected]S20190901-03-58231966 2019-09-30 17:03:15.003 6S20190901-03-58231966 2019-09-30 18:04:56.131 2S20190901-03-58231966 2019-10-30 17:03:14.203 216
クックパッドでの利用•猶予期間に入ったユーザーに対するお知らせ‣ 非自発的解約が大幅に減少•自動更新をオフにしたユーザーの観測‣ ライブ配信の直後に解約したユーザー数をダッシュボード化してよりリアルな数値を把握•施策検討や問い合わせ対応など adhoc な分析17
Apple App StoreServer-to-server notifications18
通知方法•エンドポイントを設定すると HTTP POST で送られてくる‣ 認証は password (shared secret)• https://developer.apple.com/documentation/storekit/in-app_purchase/enabling_server-to-server_notifications19
Google Play との通知内容の違い•イベントだけでなくレシートの情報も送られてくる•notification_type によってあるフィールドがあったりなかったりと JSON スキーマが一定でない•1つのイベントに対し複数の notification_type を組み合わせて同時に通知が送られてくる20
21
22
変更点•猶予期間周りの notification_type が増えた•フィールドに unified_receipt が増えた‣ レシート検証しなくても履歴が取れるように•関連ドキュメントもアップデートされた‣ 同時に送られてくる複数の通知の扱い方が明文化された•https://developer.apple.com/videos/play/wwdc2019/302/23
まとめ24
•アプリ内定期購入では毎年新たな機能が増えている•それらを利用するには”通知”をうまく活用することが必須になる•クックパッドでは定期購入の状態をただ更新するだけでなく、DWHに通知を保存して活用している25