アプリ内定期購入における状態管理と”通知”の活用 / Using notifications to handle the states of in-app subscriptions

アプリ内定期購入における状態管理と”通知”の活用 / Using notifications to handle the states of in-app subscriptions

09796cb754b7d31f1a4f31da436177ab?s=128

Takahiro Miyoshi

November 27, 2019
Tweet

Transcript

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

    1
  2. 自己紹介 2

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

    → Rails 3
  4. 定期購入の状態管理 4

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

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

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

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

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

  10. アプリ内定期購入の“通知” •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
  11. 利用方法の全体像 1. 共通決済基盤で Webhook として通知を受信 2. 対象の定期購入の状態を更新 3. 通知のログを DWH

    に保存 ‣ データ活用基盤の今 〜DWH外観図〜 4. 必要に応じて各サービスへ Amazon SNS で通知 11
  12. Google Play Real-time developer notifications 12

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

    • https://cloud.google.com/pubsub/docs/push • https://developers.google.com/identity/protocols/ OpenIDConnect#validatinganidtoken 13
  14. 14

  15. 注文ごとの通知履歴 15

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

    な分析 17
  18. Apple App Store Server-to-server notifications 18

  19. 通知方法 •エンドポイントを設定すると HTTP POST で送られて くる ‣ 認証は password (shared

    secret) • https://developer.apple.com/documentation/storekit/in- app_purchase/enabling_server-to-server_notifications 19
  20. Google Play との通知内容の違い •イベントだけでなくレシートの情報も送られてくる •notification_type によってあるフィールドがあったり なかったりと JSON スキーマが一定でない •1つのイベントに対し複数の

    notification_type を組み 合わせて同時に通知が送られてくる 20
  21. 21

  22. 22

  23. 変更点 •猶予期間周りの notification_type が増えた •フィールドに unified_receipt が増えた ‣ レシート検証しなくても履歴が取れるように •関連ドキュメントもアップデートされた

    ‣ 同時に送られてくる複数の通知の扱い方が明文化された •https://developer.apple.com/videos/play/wwdc2019/302/ 23
  24. まとめ 24

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