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
Play Billing Library 7.0.0 変更点まとめ@potatotips#88
Search
kako351
July 05, 2024
Programming
0
1.5k
Play Billing Library 7.0.0 変更点まとめ@potatotips#88
kako351
July 05, 2024
Tweet
Share
More Decks by kako351
See All by kako351
Paging3のSeparatorsを使って LazyColumnにヘッダーや 別のアイテムを挿入する
kako351
0
750
CircleCIでFlakyなテストを再実行する_potatotips#83
kako351
0
210
ComposeでTimeRangePickerを作る_YUMEMI.grow Mobile #2
kako351
1
870
Composeの座標を取得する ~コーチマークにおける活用事例~_DroidKaigi.collect#1
kako351
2
3.1k
チームで導入する Jetpack Compose あの素晴らしいLTをもう一度.ver
kako351
1
1.3k
【DevFest & ADS JP 22】チームで導入するJetpackCompose@おいしい健康
kako351
0
2.6k
Other Decks in Programming
See All in Programming
Windows on Ryzen and I
seosoft
0
410
Claude Codeログ基盤の構築
giginet
PRO
7
3.7k
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
340
Feature Toggle は捨てやすく使おう
gennei
0
370
AI 開発合宿を通して得た学び
niftycorp
PRO
0
180
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
3
430
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
2
560
Nuxt Server Components
wattanx
0
150
存在論的プログラミング: 時間と存在を記述する
koriym
5
550
PHP 7.4でもOpenTelemetryゼロコード計装がしたい! / PHPerKaigi 2026
arthur1
1
430
Takumiから考えるSecurity_Maturity_Model.pdf
gessy0129
1
170
Angular-Apps smarter machen mit Gen AI: Lokal und offlinefähig - Hands-on Workshop!
christianliebel
PRO
0
140
Featured
See All Featured
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
93
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.4k
Embracing the Ebb and Flow
colly
88
5k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
240
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
260
Faster Mobile Websites
deanohume
310
31k
SEO for Brand Visibility & Recognition
aleyda
0
4.4k
Abbi's Birthday
coloredviolet
2
5.9k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.2k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Six Lessons from altMBA
skipperchong
29
4.2k
Transcript
Play Billing Library 7.0.0 変更点まとめ potatotips #88
自己紹介 kako351 / @kako_351 株式会社ZOZO Androidエンジニア • バイク(ハンターカブ) • ギター
• コーヒー自宅焙煎 趣味
本日話す内容 Play Billing Library 7.0.0での変更点を以下の分類で紹介します • 新機能 • 削除されたAPI •
非推奨になったAPI 💡 Play Billing Library は Androidのアプリ内課金ライブラリです
新機能 1. 分割払い定期購入をサポート 2. プリペイド プランの保留中の取引をサポート 3. offerTokenが空の場合例外を返す
分割払い用の InstallmentPlanDetails API が追加。 • getInstallmentPlanCommitmentPaymentsCount ◦ ユーザーがプランを購入時、コミットされた支払い回数を返す ◦ 12回払いのプランなら12が返る
• getSubsequentInstallmentPlanCommitmentPaymentsCount ◦ プランが更新された後の支払い回数を返す ◦ 12回払いのプランを更新した場合、12が返る 分割払い定期購入をサポート ※現在は、ブラジル、フランス、イタリア、スペインでのみ
• 保留中の取引を有効 ◦ enablePrepaidPlans() と enablePendingPurchases(PendingPurchaseParams) を使用すると、 定期購入のプリペイド プランの保留中の取引を有効になる。 •
保留中のプランの変更サポート ◦ Purchase.PendingPurchaseUpdate ▪ 既存の購入に対して、保留中のチャージや変更を取得できる 定期購入のプリペイド プランの保留中 の取引をサポート
• ユーザーが購入するオファーを指定するsetOfferTokenが空の場合例外を返すよう になりました。 offerTokenが空の場合例外を返す BillingFlowParams.ProductDetailsParams.newBuilder() .setProductDetails(productDetails) .setOfferToken(selectedOfferToken) // これを忘れると例外 .build()
ただし、setOfferTokenは1回だけ課金商品(OneTime Purchase)の場合は指 定してはいけないので注意が必要です
削除されたAPI 1. enablePendingPurchases() サポート終了 2. AlternativeBilling系の関数削除 3. setOldSkuPurchaseToken() の削除
PendingPurchasesParams とenablePendingPurchases(PendingPurchaseParams) を追加 enablePendingPurchases() サポート終了 BillingClient.newBuilder(context) .setListener(/* …. */) .enablePendingPurchases()
.build() BillingClient.newBuilder(context) .setListener(/* …. */) .enablePendingPurchases( PendingPurchasesParams .newBuilder() .enableOneTimeProducts() .build() ) .build()
GooglePlay以外での課金方法を有効にするいくつかの関数が削除。今後は UserChoiceBillingを使用する。 • 削除された関数 ◦ BillingClient.Builder.enableAlternativeBilling() ◦ AlternativeBillingListener ◦ AlternativeChoiceDetails
• 代わりに使用する関数 ◦ BillingClient.Builder.enableUserChoiceBilling() ◦ UserChoiceBillingListener ◦ UserChoiceDetails AlternativeBilling系の関数削除
setOldSkuPurchaseToken()が削除、代わりにsetOldPurchaseToken(purchaseToken)を使 う setOldSkuPurchaseToken() の削除 BillingFlowParams.SubscriptionUpdateParams.newBuilder() .setOldSkuPurchaseToken(purchaseToken) .build() BillingFlowParams.SubscriptionUpdateParams.newBuilder() .setOldPurchaseToken(purchaseToken) .build()
非推奨に なったAPI 1. queryPurchaseHistoryAsyncが非推奨 a. 確認済み購入と保留中の購入 b. 消費した購入の取得
c. 過去の購入を保持する例 (今日はこれを話に来た!)
BillingClient.queryPurchaseHistoryAsync() は非推奨となり、今後のリリースで削 除される予定。 • 確認済み購入と保留中の購入の取得 ◦ BillingClient.queryPurchasesAsync() を使用して、有効な購入を取得 • 消費した購入の取得
◦ デベロッパーは、消費した購入を独自のサーバーで追跡する必要がある • キャンセルされた購入の取得 ◦ voided-purchases デベロッパー API を使用 queryPurchaseHistoryAsyncが非推奨
• BillingClient.queryPurchasesAsync() ◦ 有効なサブスクリプションと消費されていない1回限りの購入のみが返される ◦ GracePriod(猶予期間)の場合は購入が返ってくる ◦ AccountHold(一時停止)の場合は返ってこない ◦ 期限切れの場合は返ってこない
• queryPurchaseHistoryAsync() との違い ◦ queryPurchaseHistoryAsync() は期限切れや停止された購入も含め、購入履歴すべて返ってき ていた 確認済み購入と保留中の購入の取得
消費した購入(過去の購入履歴)を保持しておきたい場合は、In-App Purchases APIやRTDN(リアルタイムデベロッパー通知)などを利用し、独自でバックエン ド処理を行う必要がある。 消費した購入の取得
RTDNを利用して購入プランが更新されるたびにDBに履歴を保持。バックエンド にはFirebaseを利用。 過去の購入を保持する例(個人アプリ) Firestore Firebase Functions 購入 Google Play
RTDN 更新やキャンセル 新規購入 購入履歴
• 分割払いやプリペイドプランのサポート追加 • 削除されたAPIは代替APIがあるので移行しましょう • queryPurchaseHistoryAsyncが非推奨になったので、ユースケースごとに代替 処理に変更するのがよい。 ◦ 購入履歴を保持したい場合は独自でサーバー側の処理が必要。 まとめ
• https://developer.android.com/google/play/billing/release-notes?hl=ja • https://developer.android.com/reference/com/android/billingclient/api/Billi ngClient#queryPurchasesAsync • https://developer.android.com/reference/com/android/billingclient/api/Billi ngFlowParams.ProductDetailsParams.Builder#setOfferToken(java.lang.String) • https://zenn.dev/attomicgm/articles/about_google_billing_query_purchase
参考
ご清聴 ありがとうございました End of slide