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
CSC509 Lecture 09
javiergs
PRO
0
140
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
9
3.3k
Creating a Free Video Ad Network on the Edge
mizoguchicoji
0
120
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
1
100
距離関数を極める! / SESSIONS 2024
gam0022
0
280
WebフロントエンドにおけるGraphQL(あるいはバックエンドのAPI)との向き合い方 / #241106_plk_frontend
izumin5210
4
1.4k
GitHub Actionsのキャッシュと手を挙げることの大切さとそれに必要なこと
satoshi256kbyte
5
430
C++でシェーダを書く
fadis
6
4.1k
とにかくAWS GameDay!AWSは世界の共通言語! / Anyway, AWS GameDay! AWS is the world's lingua franca!
seike460
PRO
1
880
Contemporary Test Cases
maaretp
0
140
ActiveSupport::Notifications supporting instrumentation of Rails apps with OpenTelemetry
ymtdzzz
1
230
Outline View in SwiftUI
1024jp
1
330
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
Fireside Chat
paigeccino
34
3k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
410
Code Reviewing Like a Champion
maltzj
520
39k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
10 Git Anti Patterns You Should be Aware of
lemiorhan
655
59k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
109
49k
Ruby is Unlike a Banana
tanoku
97
11k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
720
The Cult of Friendly URLs
andyhume
78
6k
The Language of Interfaces
destraynor
154
24k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
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
ありがとうございました