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
課金ユーザを増やすためのInAppBilling定期購入の 活用事例
Search
farmanlab
July 23, 2019
Programming
3
1.1k
課金ユーザを増やすためのInAppBilling定期購入の 活用事例
課金ユーザを増やすためのInAppBilling定期購入の活用事例を紹介します。
farmanlab
July 23, 2019
Tweet
Share
More Decks by farmanlab
See All by farmanlab
MLKitでカスタムモデルを使う
farmanlab
1
5.3k
Other Decks in Programming
See All in Programming
MySQL9でベクトルカラム登場!PHP×AWSでのAI/類似検索はこう変わる
suguruooki
1
270
Bedrock AgentCore ObservabilityによるAIエージェントの運用
licux
8
510
バイブコーディング超えてバイブデプロイ〜CloudflareMCPで実現する、未来のアプリケーションデリバリー〜
azukiazusa1
3
760
Advanced Micro Frontends: Multi Version/ Framework Scenarios
manfredsteyer
PRO
0
120
Amazon Q CLI開発で学んだAIコーディングツールの使い方
licux
3
140
副作用と戦う PHP リファクタリング ─ ドメインイベントでビジネスロジックを解きほぐす
kajitack
3
510
ソフトウェア設計とAI技術の活用
masuda220
PRO
25
7.1k
それ CLI フレームワークがなくてもできるよ / Building CLI Tools Without Frameworks
orgachem
PRO
17
3.6k
MCPで実現できる、Webサービス利用体験について
syumai
7
2.3k
Claude Code派?Gemini CLI派? みんなで比較LT会!_20250716
junholee
1
770
No Install CMS戦略 〜 5年先を見据えたフロントエンド開発を考える / no_install_cms
rdlabo
0
410
Prompt Engineeringの再定義「Context Engineering」とは
htsuruo
0
110
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.3k
Writing Fast Ruby
sferik
628
62k
[RailsConf 2023] Rails as a piece of cake
palkan
56
5.7k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
YesSQL, Process and Tooling at Scale
rocio
173
14k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
182
54k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
47
9.6k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
For a Future-Friendly Web
brad_frost
179
9.8k
KATA
mclloyd
31
14k
Transcript
課金ユーザを増やすための InAppBilling定期購入の 活用事例 Cookpad.apk #3 @farmanlab
README ・山下 拓磨 twitter: @farmanlab ・2018年1月入社 会員事業部 →有料会員を増やすことを主軸にした部署 ・元鉄道運転士& 電気設備管理者
みなさんお金って知ってますか? Do you know money?
お金は超絶便利 ・好きなものが買える ・好きなことができる ・好きなとこに住める =人生が豊かになる!!
お金を稼げるサービスを作らなきゃいけない ・社員に素晴らしいおちんぎんを払うため ・キレイなオフィスに住まうため ・みんなに最強のパソコンを支給するため ・事業を継続させるため
クックパッドの主な収入源 有料コンテンツ 広告
三行まとめ ・有料コンテンツの無料体験の バリエーションを増やした話 ・課金ユーザの退会者を 猶予期間を使って減らした話 ・行あまり
定期購入 (In-app-Billing)
In-app-Billing ・Googleが提供するアプリ内課金機能 (ちなみにAppleはIn-app Purchase) 大きく分けると ・使い切りアイテム(INAPP) → 魔法石 ・定期購入アイテム(SUBS)
→プレミアムサービス Amazonプライム
In-app-Billing ・商品の管理、金額の設定などは 基本的にGoogle Play Console上で行う ・一つの機能(アイテム)ごとにid(sku)を設定する
導入は2018年3月 開発者ブログにIn-app-Billing導入時の記事があります https://techlife.cookpad.com/entry/2018/03/14/090000
定期購入のいろいろな機能 ・無料試用期間(フリートライアル) ・3日以上の無料期間が付けられる ・あらゆるサービスで使われている 30日無料 90日無料
こうかは ばつぐんだ!
ここで一つの願望と問題が 生まれます
願望 特定のユーザにだけ多くの無料期間を与える キャンペーンやりたい (誕生日、インストール直後 etc...)
問題 ・同じ商品に複数の無料期間を設定できない →商品別にする? →商品別だから同時購入できる →二重決済防止の仕組みが必要 →めっちゃ大変そう →もう少し良い方法はない? (AppleはGroup内で一つしか有効にならないSubscription Groupというものがある)
解決方法 課金の延期機能を使う (Defer)
Defer https://developer.android.google.cn/google/play/billing/billing_subscriptions?hl=JA#Defer Defer=課金の延期 →次回の課金のタイミングを遅らせる →特定ユーザに付与することが可能 ex:商品自体の無料期間30日+defer30日 →Google Play Developer APIを使って付与する
・そんなもんよりSubscription Group作ってくれ
Defer(pros) ・自前で二重課金防止策を取らずに ユーザごとに異なる無料期間を提供できる
Defer(cons) ・次の課金タイミングを遅らせるだけなので 無料体験ユーザには延期分の日数が表示されない ・課金導線でユーザに認知させる工夫が必要
Defer適用までの流れ ログテーブル ①課金処理 ②決済情報登録 日時バッチ ④ログ取得 Cookpad 決済基盤 ③Defer適用ログ ⑤Defer適用リクエスト
⑥Defer API 決済情報 テーブル
Deferの注意点 ・Deferは次回の課金タイミングの先送り →無料期間なし+defer30日の場合は 最初の課金は即時処理されるので注意 ・本来の使用用途ではないので 二重課金防止の仕組みがすでにあるなら 素直に複数商品用意したほうが良さそう
None
課金してくれるユーザもいれば 解約するユーザもいます…
解約した人数を見る
自発的・非自発的?
自発的解約と非自発的解約 ・自発的解約 →ユーザやPlay Console、 GooglePlay APIから解約されたもの ・非自発的解約 →なんらかの理由によって 支払いができず解約されたもの
非自発的解約の原因 ・クレジットカード期限切れ ・クレジットカード限度額超え ・ギフトカードなどのプリペイド残高不足 etc…(公式で原因の一覧化はされていない)
非自発的解約になるまでのフロー ❌ 課金開始 課金継続 継続失敗 猶予期間 自動解約 (非自発的) 課金再開 課金開始
課金継続 解約(自発的)
GooglePlayConsoleから見れる
具体的な数字はお見せできませんが… ・非自発的解約の割合がそれなりに高い →ユーザの意図しないタイミングで 解約されてそのまま復帰しない →本来救えたはずのユーザ分だけ 機会損失している
どうにか非自発的解約を 少なくしたい
対策1:猶予期間伸ばす ・猶予期間を伸ばすだけでも 非自発的解約者は結構減った →コンソールポチだけで効果絶大
対策2:real-time developer notificationsを使う https://developer.android.google.cn/google/play/billing/realtime_developer_notifications ・ユーザの課金ステータスが更新されると GCPのCloud Pub/Sub(AWS Kinesis的なやつ) へ通知が飛ぶ仕組み ・猶予期間に入ったタイミングも分かる
→猶予期間中にユーザにアプローチできる
通知タイプ
猶予期間をユーザに通知する流れ Cookpad 決済基盤 ログテーブル 日時バッチ APIサーバ ユーザ テーブル ①課金ステータス 変更通知
②Webhook (Push) ③通知ログ保存 ④通知ログ取得・ ユーザ情報に反映 ⑤猶予期間 取得
猶予期間状態のユーザに認知させる
実装する上での工夫や注意点① ・通知に含まれる決済関連の情報は PurchaseTokenと呼ばれるトークンと商品IDのみ →詳細情報をGoogleDeveloperAPIに 問い合わせる必要がある ・アプリからGooglePlayの定期購入画面に 遷移させたい場合、商品IDが必要になるので サーバから値を渡せるように設計する必要がある https://play.google.com/store/account/subscriptions?sku=your-
sub-product-id&package=your-app-package
実装する上での工夫や注意点② ・ユーザの課金ステータスは 日時バッチにして更新性をある程度犠牲にした →行き違いでユーザが復帰してる可能性がある →その旨をユーザに知らせておく →アプリ側の通知UIはGooglePlayの定期購入画面 に遷移したら2、3日表示しない仕様にした
まとめ ・有料コンテンツの無料期間提供は効果高い ・ユーザごとに違った無料期間提供したい →Defer(課金の延期)を使って実現できた ・退会者の中に非自発的のユーザが比較的多い →猶予期間を伸ばすこと、 real-time developer notificationを使って 猶予期間中ユーザに知らせる仕組みを作った
お金は超便利!!
ありがとうございました!