Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
課金ユーザを増やすためのInAppBilling定期購入の 活用事例
Search
farmanlab
July 23, 2019
Programming
1.2k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
課金ユーザを増やすためのInAppBilling定期購入の 活用事例
課金ユーザを増やすためのInAppBilling定期購入の活用事例を紹介します。
farmanlab
July 23, 2019
More Decks by farmanlab
See All by farmanlab
MLKitでカスタムモデルを使う
farmanlab
1
5.6k
Other Decks in Programming
See All in Programming
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
230
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
720
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
410
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
250
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
480
SREの越境 / SRE Collaboration
y0hgi
2
220
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
220
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
340
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
410
Intent as Code
shoppingjaws
6
1k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
110
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
560
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
460
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
520
Code Reviewing Like a Champion
maltzj
528
40k
Ethics towards AI in product and experience design
skipperchong
2
380
Documentation Writing (for coders)
carmenintech
77
5.5k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
280
Game over? The fight for quality and originality in the time of robots
wayneb77
1
280
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
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を使って 猶予期間中ユーザに知らせる仕組みを作った
お金は超便利!!
ありがとうございました!