Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

Takahiro Miyoshi

November 27, 2019
Tweet

More Decks by Takahiro Miyoshi

Other Decks in Technology

Transcript

  1. アプリ内定期購入における

    状態管理と”通知”の活用
    2019/11/27 Tech Kitchen #22
    ユーザー・決済基盤部
    三吉 貴大 @sankich92
    1

    View Slide

  2. 自己紹介
    2

    View Slide

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

    View Slide

  4. 定期購入の状態管理
    4

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  12. Google Play
    Real-time developer notifications
    12

    View Slide

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

    View Slide

  14. 14

    View Slide

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

    View Slide

  16. クエリの結果
    DPEF [email protected] [email protected]
    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

    View Slide

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

    View Slide

  18. Apple App Store
    Server-to-server notifications
    18

    View Slide

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

    View Slide

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

    View Slide

  21. 21

    View Slide

  22. 22

    View Slide

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

    View Slide

  24. まとめ
    24

    View Slide

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

    View Slide