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
1.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Play Billing Library 7.0.0 変更点まとめ@potatotips#88
kako351
July 05, 2024
More Decks by kako351
See All by kako351
Paging3のSeparatorsを使って LazyColumnにヘッダーや 別のアイテムを挿入する
kako351
0
810
CircleCIでFlakyなテストを再実行する_potatotips#83
kako351
0
240
ComposeでTimeRangePickerを作る_YUMEMI.grow Mobile #2
kako351
1
930
Composeの座標を取得する ~コーチマークにおける活用事例~_DroidKaigi.collect#1
kako351
2
3.2k
チームで導入する Jetpack Compose あの素晴らしいLTをもう一度.ver
kako351
1
1.4k
【DevFest & ADS JP 22】チームで導入するJetpackCompose@おいしい健康
kako351
0
2.6k
Other Decks in Programming
See All in Programming
書籍「プロフェッショナルAI駆動開発」紹介スライド
juntaromatsumoto
0
1k
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
640
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
6
2.5k
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
410
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.3k
業務時間外もAIに働いてもらう話
colorful12
3
10k
バグを直したら useEffect が消えた
colorful12
3
840
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
4
1.1k
自分的「カンファレンスの楽しみ方」
syumai
0
190
Building an Out-of-Order CPU
latte72
1
710
RSSとCodexを使ってX投稿自動化してみた
ochtum
0
110
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
Featured
See All Featured
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
470
Between Models and Reality
mayunak
4
450
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.2k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
320
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
270
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Deep Space Network (abreviated)
tonyrice
0
290
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
240
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
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