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
なぜ適用するか、移行して理解するClean Architecture 〜構造を超えて設計を継承する〜 / Why Apply, Migrate and Understand Clean Architecture - Inherit Design Beyond Structure
seike460
PRO
1
660
git worktree × Claude Code × MCP ~生成AI時代の並列開発フロー~
hisuzuya
1
420
Systèmes distribués, pour le meilleur et pour le pire - BreizhCamp 2025 - Conférence
slecache
0
100
「Cursor/Devin全社導入の理想と現実」のその後
saitoryc
0
140
すべてのコンテキストを、 ユーザー価値に変える
applism118
2
660
GoのGenericsによるslice操作との付き合い方
syumai
3
680
Gleamという選択肢
comamoca
6
760
DroidKnights 2025 - 다양한 스크롤 뷰에서의 영상 재생
gaeun5744
3
310
ニーリーにおけるプロダクトエンジニア
nealle
0
100
AWS CDKの推しポイント 〜CloudFormationと比較してみた〜
akihisaikeda
3
310
datadog dash 2025 LLM observability for reliability and stability
ivry_presentationmaterials
0
110
AIエージェントはこう育てる - GitHub Copilot Agentとチームの共進化サイクル
koboriakira
0
330
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
A designer walks into a library…
pauljervisheath
206
24k
Automating Front-end Workflow
addyosmani
1370
200k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Site-Speed That Sticks
csswizardry
10
650
YesSQL, Process and Tooling at Scale
rocio
173
14k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
790
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
KATA
mclloyd
29
14k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.6k
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を使って 猶予期間中ユーザに知らせる仕組みを作った
お金は超便利!!
ありがとうございました!