この記事は and factory.inc Advent Calendar 2024 の10日目の記事になります。
こんにちは!
and factoryでAndroidエンジニアをしている @igyaaaaです!
気づけばもう年末間近、部屋の大掃除タスクを溜め続けているうちに、だんだんと虚無感が増してきました。
さて、今回はGoogle Play Billing Libraryを7.0にアップデートした際のことを軽く共有したいと思います。
1. enablePendingPurchases()
が非推奨に
これまで保留購入に対応するため、BillingClient.Builder
の enablePendingPurchases()
を使っていましたが、Billing Library 7.0以降では非推奨となりました。
理由としては、7.0から定期購入でも保留状態がサポートされるようになったため、新しいパラメータ化されたメソッド enablePendingPurchases(PendingPurchaseParams)
を使用する必要があります。
修正前後のコード
Before
BillingClient.newBuilder(this)
.enablePendingPurchases() // Deprecated
.build()
After
BillingClient.newBuilder(application.applicationContext)
.enablePendingPurchases(
PendingPurchasesParams.newBuilder()
.enableOneTimeProducts() // 一回限りのアイテムをサポート
.enablePrepaidPlans() // 任意: 定期購入の保留をサポートする場合
.build()
)
.build()
補足
-
enableOneTimeProducts()
通常の一回限りの購入アイテムをサポートします -
enablePrepaidPlans()
定期購入(特にプリペイドプラン)の保留にも対応したい場合に必要です
2. queryPurchaseHistoryAsync()
が非推奨に
アプリ内で定期購入の履歴を取得するために queryPurchaseHistoryAsync()
を使用していましたが、7.0以降は非推奨となりました。そのため、代わりに queryPurchasesAsync()
を使うように変更しました。
修正前後のコード
Before
billingClient.queryPurchaseHistoryAsync(SkuType.SUBS) { result, purchaseList ->
// ロジック
}
After
val params = QueryPurchasesParams.newBuilder()
.setProductType(ProductType.SUBS)
.build()
billingClient.queryPurchasesAsync(params) { _, purchasesList ->
// ロジック
}
注意点
queryPurchasesAsync()
と queryPurchaseHistoryAsync()
の違い
queryPurchasesAsync()
では、以下の条件に該当するアイテムのみが取得できます
-
保留中のアイテム
- ユーザーが購入手続きを進めたが、完了していない状態のもの
-
未消費の一回限りのアイテム
- 例えば、消費型アイテム(ゲーム内通貨など)の購入が完了したが、アプリ内でまだ消費されていないもの
-
有効期限内の定期購入アイテム
- 現在アクティブな定期購入(期限切れでないもの)
履歴が取得できないケース
-
消費済みのアイテム
例: ゲーム内等の通貨を購入して消費済みの場合、履歴は取得されません -
有効期限切れの定期購入
有効期限が切れた過去の定期購入は含まれません
もし完全な購入履歴が必要な場合は、対応できないため、サーバーサイドで管理する必要がありそうです🤔
まとめ
自分が直近で対応した箇所は上の通りですが、他にも定期購入の分割購入APIなど新しい機能が追加されているので気になった方はぜひ公式ドキュメントを参考にしてみてください!