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
760
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
530
CircleCIでFlakyなテストを再実行する_potatotips#83
kako351
0
160
ComposeでTimeRangePickerを作る_YUMEMI.grow Mobile #2
kako351
1
670
Composeの座標を取得する ~コーチマークにおける活用事例~_DroidKaigi.collect#1
kako351
2
2.4k
チームで導入する Jetpack Compose あの素晴らしいLTをもう一度.ver
kako351
1
1.1k
【DevFest & ADS JP 22】チームで導入するJetpackCompose@おいしい健康
kako351
0
1.9k
Other Decks in Programming
See All in Programming
テストコードのガイドライン 〜作成から運用まで〜
riku929hr
7
1.4k
知られざるDMMデータエンジニアの生態 〜かつてツチノコと呼ばれし者〜
takaha4k
1
410
ゼロからの、レトロゲームエンジンの作り方
tokujiros
3
1k
カンファレンス動画鑑賞会のススメ / Osaka.swift #1
hironytic
0
170
Azure AI Foundryのご紹介
qt_luigi
1
190
React 19でお手軽にCSS-in-JSを自作する
yukukotani
5
560
盆栽転じて家具となる / Bonsai and Furnitures
aereal
0
1.8k
ASP.NET Core の OpenAPIサポート
h455h1
0
110
Alba: Why, How and What's So Interesting
okuramasafumi
0
210
GitHub CopilotでTypeScriptの コード生成するワザップ
starfish719
26
6k
KMP와 kotlinx.rpc로 서버와 클라이언트 동기화
kwakeuijin
0
300
QA環境で誰でも自由自在に現在時刻を操って検証できるようにした話
kalibora
1
140
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1030
460k
Embracing the Ebb and Flow
colly
84
4.5k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Navigating Team Friction
lara
183
15k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.5k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Measuring & Analyzing Core Web Vitals
bluesmoon
5
210
Typedesign – Prime Four
hannesfritz
40
2.5k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
192
16k
Building Your Own Lightsaber
phodgson
104
6.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
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