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
Androidのアプリ内課金をAACで実装する
Search
syarihu
April 10, 2019
Programming
4
18k
Androidのアプリ内課金をAACで実装する
In-tamachi Billing Nightで発表した資料です。
https://billing-night.connpass.com/event/125510/
syarihu
April 10, 2019
Tweet
Share
More Decks by syarihu
See All by syarihu
[DroidKaigi 2024] Android ViewからJetpack Composeへ 〜Jetpack Compose移行のすゝめ〜 / From Android View to Jetpack Compose: A Guide to Migration
syarihu
2
2.4k
[shibuya.apk #46] Composableの枠を超えてアニメーションする / Animation beyond Composable
syarihu
0
14
[shibuya.apk #41] Jetpack Composeでグリッドに柔軟にスペースを入れたい
syarihu
0
2.7k
[DroidKaigi 2022] 詳解Google Playの新しい定期購入 ~オファーの活用や実装例を添えて~
syarihu
0
3.3k
5分で分かるGoogle Playの新しいサブスクリプション / Google Play new subscription 2022
syarihu
1
1.7k
[DroidKaigi 2021] Google Play 定期購入 比例配分モード完全攻略ガイド / Google Play Subscription Proration Mode Complete Guide
syarihu
1
7.5k
[Money Forward Tech Drive] What's new in Google Play [Recap #io21]
syarihu
0
530
[Android 11 Meetups] Google Play Commerce からのアップデート / Android 11 Meetups Google Play Commerce
syarihu
4
2.8k
[potatotips #70] license-list-pluginを使ってOSSライセンス画面を自動生成する / license-list-plugin
syarihu
4
4.5k
Other Decks in Programming
See All in Programming
レガシーシステムにどう立ち向かうか 複雑さと理想と現実/vs-legacy
suzukihoge
14
2.2k
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
100
見せてあげますよ、「本物のLaravel批判」ってやつを。
77web
7
7.8k
初めてDefinitelyTypedにPRを出した話
syumai
0
420
Kaigi on Rails 2024 〜運営の裏側〜
krpk1900
1
230
Enabling DevOps and Team Topologies Through Architecture: Architecting for Fast Flow
cer
PRO
0
340
『ドメイン駆動設計をはじめよう』のモデリングアプローチ
masuda220
PRO
8
540
ふかぼれ!CSSセレクターモジュール / Fukabore! CSS Selectors Module
petamoriken
0
150
受け取る人から提供する人になるということ
little_rubyist
0
250
macOS でできる リアルタイム動画像処理
biacco42
9
2.4k
ヤプリ新卒SREの オンボーディング
masaki12
0
130
シェーダーで魅せるMapLibreの動的ラスタータイル
satoshi7190
1
480
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
45
6.8k
Embracing the Ebb and Flow
colly
84
4.5k
A Philosophy of Restraint
colly
203
16k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
Building Applications with DynamoDB
mza
90
6.1k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
28
2k
A Tale of Four Properties
chriscoyier
156
23k
Designing for humans not robots
tammielis
250
25k
4 Signs Your Business is Dying
shpigford
180
21k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
GitHub's CSS Performance
jonrohan
1030
460k
Adopting Sorbet at Scale
ufuk
73
9.1k
Transcript
Androidの アプリ内課金を AACで実装する In-tamachi Billing Night 2019/04/10 (Wed) @syarihu
Taichi Sato (@syarihu) • Money Forward, Inc. ◦ Android Engineer
• TechBooster
None
勉強会開催の経緯
None
年額課金をリリース! • 月額課金に加えて年額課金がで きるようになった • 年額課金を実装する際、課金周 りの知見が少なくて困った
None
アプリ内課金の勉強会開催へ • そんな感じでつぶやいてみた • 「ええやん」ってなって開催するこ とになった
アプリ内課金の勉強会開催へ • Subscriptionだと定期購読だけ になってしまうので In-tamachi Billing Nightになっ た
Androidのアプリ内課金を AACで実装する
定期購入とは?
定期購入とは? • Play Consoleで管理可能な アプリ内アイテムは3種類ある
定期購入とは? • 管理対象アイテム • 定期購入 • 特典アイテム
定期購入とは? • 管理対象アイテム • 定期購入 • 特典アイテム
定期購入とは? • 週、月、3ヶ月、6ヶ月、年間のい ずれかの期間で定期的に課金で きるアイテム • 新規購入者に対して、無料期間 やお試し価格の設定も可能
定期購入とは? • ある定期購入アイテムから 別の定期購入アイテムへのアッ プグレードまたはダウングレード を行う仕組みも提供
定期購入のアップグレードと ダウングレード • ユーザーは定期購入期間の終了 を待たず、グレード変更可能 • 変更前のプランですでに無料期 間を終えている場合は 新たに無料期間は発生しない
定期購入のアップグレードと ダウングレード • グレード変更を行うと現在有効な 定期購入はただちにキャンセルさ れ、新たな定期購入が作成され る
定期購入のアップグレードと ダウングレード • 最初の支払いは前の定期購入の 未使用分を使い切ったあとから 始まる
月額プラン 500円 / 月 プラン変更 2019年04月15日 年額プラン 5,500円 / 年
支払い日 2019年04月01日
月額プラン 500円 / 月 プラン変更 2019年04月15日 年額プラン 5,500円 / 年
支払い日 2019年04月01日 500円 / 30日 = 16.66円 / 日 250円分使用
月額プラン 500円 / 月 プラン変更 2019年04月15日 年額プラン 5,500円 / 年
支払い日 2019年04月01日 500円 / 30日 = 16.66円 / 日 250円分使用
月額プラン 500円 / 月 プラン変更 2019年04月15日 年額プラン 5,500円 / 年
支払い日 2019年04月01日 500円 / 30日 = 16.66円 / 日 250円分使用 前プランの残り = 250円
月額プラン 500円 / 月 プラン変更 2019年04月15日 年額プラン 5,500円 / 年
支払い日 2019年04月01日 500円 / 30日 = 16.66円 / 日 250円分使用 前プランの残り = 250円 5,500円 / 365日 = 15.07円 / 日
月額プラン 500円 / 月 プラン変更 2019年04月15日 年額プラン 5,500円 / 年
支払い日 2019年04月01日 500円 / 30日 = 16.66円 / 日 250円分使用 前プランの残り = 250円 5,500円 / 365日 = 15.07円 / 日 250円 / 15.07円 = 1日分使用可能 (16.58円)
月額プラン 500円 / 月 プラン変更 2019年04月15日 年額プラン 5,500円 / 年
支払い日 2019年04月01日 500円 / 30日 = 16.66円 / 日 250円分使用 前プランの残り = 250円 5,500円 / 365日 = 15.07円 / 日 250円 / 15.07円 = 1日分使用可能 (16.58円) 新プラン支払い開始 2019年04月17日
定期購入のアップグレードと ダウングレード • 2019年04月17日以降は毎年04 月17日に課金が発生する
定期購入のアップグレードと ダウングレード • 定期購入アイテム間のアップグ レードやダウングレードの関係性 はPlay Consoleで何か 設定するわけではない
定期購入のアップグレードと ダウングレード • 古いプランから新しいプランへ移 行するといった関連付けは実装 をする際に行う
定期購入のアップグレードと ダウングレード • たとえば年額プランから月額プラ ンへのアップグレードをするなど の見せ方も開発者が定義する
Google Play Billing Libraryを利用する
Google Play BIlling Library • アプリ内課金に便利なクラスを提 供するライブラリ • Google Playアプリとの通信を行
うIn-app Billing APIの操作もライ ブラリ内部に隠蔽されている
Google Play BIlling Library
Google Play BIlling Library AACも利用するので一緒に入れておく
ViewModelでBillingClient を管理する
ViewModelでBillingClientを管理する
ViewModelでBillingClientを管理する
ViewModelでBillingClientを管理する
Google Playのアプリ内 課金サービスに接続する
BillingClientStateListenerの実装と startConnectionの実行
BillingClientStateListenerの実装と startConnectionの実行
BillingClientStateListenerの実装と startConnectionの実行
LifecycleObserverを使って onCreateで接続を開始する
LifecycleObserverを使って onCreateで接続を開始する
LifecycleObserverを使って onCreateで接続を開始する
ViewModelの破棄時に接続を解除する
ViewModelの破棄時に接続を解除する
LiveDataで状態を管理する
各状態を表すsealedクラス
各状態を表すsealedクラス
各状態を表すsealedクラス
BillingStatusをLiveDataで管理する
BillingStatusをLiveDataで管理する
BillingStatusをLiveDataで管理する
BillingStatusをLiveDataで管理する
アプリ内アイテムを 管理する
アプリ内アイテムを管理する
アプリ内アイテムを管理する
アプリ内アイテムを管理する
アプリ内アイテムを管理する
商品情報を取得する
商品情報を取得する
商品情報を取得する
商品情報を取得する
商品情報を取得する
商品情報を取得する
商品情報を取得する
定期購入アイテムを 購入する
定期購入アイテムを購入する
定期購入アイテムを購入する
定期購入アイテムを購入する
定期購入アイテムを購入する
定期購入アイテムを購入する
定期購入アイテムを購入する
定期購入アイテムを購入する
None
定期購入のアップグレードを 行う
定期購入のアップグレードを行う
定期購入のアップグレードを行う
定期購入のアップグレードを行う
定期購入のアップグレードを行う
定期購入のアップグレードを行う
定期購入のアップグレードを行う
定期購入のアップグレードを行う
定期購入のアップグレードを行う
定期購入のアップグレードを行う
定期購入のアップグレードを行う
None
None
まとめ
まとめ • グレード変更後の最初の支払い は前の定期購入の未使用分を使 い切ったあとから始まる
まとめ • 定期購入アイテム間のアップグ レードやダウングレードの関係性 はPlay Consoleで何か 設定するわけではない • グレード変更の関連付けは 実装時に行う
まとめ • Play Billing Libraryの BillingClientはViewModelで管 理するとよい • Play Billing
Libraryの各状態は sealedクラスで定義し、LiveData で状態管理すると楽
まとめ • 課金アイテムの情報はenumクラ スで管理しておくと楽
まとめ • アプリ内課金の知見はWebにあ まりないのでみんな知ってるで しょって思ってることでも共有して ほしい
アプリ内課金の検証や テストコードなどの より詳細な話は技術書典で!
宣伝
None
TechBooster 技術書典6 新刊 [さ05] Android Qなどの最新モ バイル開発情報、 TensorFlow内部の誰も知 らない最適化、今すぐ使え るアプリ内課金やテスト、
Safe Argsなど盛りだくさん 144pです! サークル詳細 | TechBooster | 技術書典 https://techbookfest.org/event/tbf06/circle/61870001
ありがとうございました