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
640
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
490
CircleCIでFlakyなテストを再実行する_potatotips#83
kako351
0
150
ComposeでTimeRangePickerを作る_YUMEMI.grow Mobile #2
kako351
1
630
Composeの座標を取得する ~コーチマークにおける活用事例~_DroidKaigi.collect#1
kako351
2
2.2k
チームで導入する Jetpack Compose あの素晴らしいLTをもう一度.ver
kako351
1
1.1k
【DevFest & ADS JP 22】チームで導入するJetpackCompose@おいしい健康
kako351
0
1.8k
Other Decks in Programming
See All in Programming
카카오페이는 어떻게 수천만 결제를 처리할까? 우아한 결제 분산락 노하우
kakao
PRO
0
110
Less waste, more joy, and a lot more green: How Quarkus makes Java better
hollycummins
0
100
見せてあげますよ、「本物のLaravel批判」ってやつを。
77web
7
7.7k
CSC509 Lecture 09
javiergs
PRO
0
140
as(型アサーション)を書く前にできること
marokanatani
10
2.6k
Jakarta Concurrencyによる並行処理プログラミングの始め方 (JJUG CCC 2024 Fall)
tnagao7
1
290
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
9
3.3k
【Kaigi on Rails 2024】YOUTRUST スポンサーLT
krpk1900
1
330
レガシーシステムにどう立ち向かうか 複雑さと理想と現実/vs-legacy
suzukihoge
14
2.2k
Tauriでネイティブアプリを作りたい
tsucchinoko
0
370
Jakarta EE meets AI
ivargrimstad
0
610
どうして僕の作ったクラスが手続き型と言われなきゃいけないんですか
akikogoto
1
120
Featured
See All Featured
The Language of Interfaces
destraynor
154
24k
The World Runs on Bad Software
bkeepers
PRO
65
11k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.8k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
Navigating Team Friction
lara
183
14k
Being A Developer After 40
akosma
86
590k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
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