このドキュメントでは、Google Play Billing Library(PBL)7 または 8 から PBL 9 に移行する方法と、新機能を統合する方法について説明します。
バージョン 9.0.0 の変更点をすべて網羅したリストについては、リリースノートをご覧ください。
Android のスキル
GitHub で表示Play Billing Library をアップグレードする
android skills add play-billing-library-version-upgradeHelp me upgrade my Play Billing Library implementation.概要
PBL 9 には、既存の API の改善と、以前に非推奨となった API の削除が含まれています。このバージョンのライブラリでは、新しいサブレスポンス コードにより、より詳細なエラー コンテキストも導入されています。
PBL アップグレードの下位互換性
PBL 9 に移行するには、リリースノートとこの移行ガイドの後半で説明されているように、アプリから既存の API リファレンスの一部を更新または削除する必要があります。
PBL 7 または 8 から PBL 9 にアップグレードする
PBL 7 または 8 から PBL 9 にアップグレードする手順は次のとおりです。
アプリの
build.gradleファイルで、Play Billing Library の依存関係のバージョンを更新します。dependencies { def billing_version = "9.1.0" implementation "com.android.billingclient:billing:$billing_version" }Kotlin を使用している場合、Google Play Billing Library の KTX モジュールに Kotlin 拡張機能とコルーチンのサポートが含まれているため、Google Play Billing Library を使用する際に慣用的な Kotlin コードを作成できます。これらの拡張機能をプロジェクトに含めるには、アプリの
build.gradleファイルに次の依存関係を追加します。dependencies { val billing_version = "9.1.0" implementation("com.android.billingclient:billing-ktx:$billing_version") }(PBL 7 から PBL 9 へのアップグレードにのみ適用)。
queryProductDetailsAsyncメソッドの実装を更新します。ProductDetailsResponseListener.onProductDetailsResponseメソッドのシグネチャが変更されたため、queryProductDetailsAsyncの実装のためにアプリを変更する必要があります。詳しくは、商品の在庫状況を表示するをご覧ください。削除された API を処理する。
次の表に、削除された API と、アプリで使用する必要がある対応する代替 API を示します。
アップグレード元
PBL 9 では、次の表に示す API がサポートされなくなりました。実装でこれらの削除された API を使用している場合は、対応する代替 API について表をご覧ください。
以前に非推奨になった API を削除 使用する代替 API queryPurchaseHistoryAsync API 購入履歴をクエリするをご覧ください。queryPurchaseHistoryAsync を使用して無料試用の利用資格を判断していた場合は、ProductDetails.getSubscriptionOfferDetails() を使用して、ユーザーが利用できる特典を判断する必要があります。 BillingClient.SkuType BillingClient.ProductType。INAPP と SUBS の商品タイプ定数は、非推奨の SKU タイプ定数と機能的に類似しています。 SkuDetails ProductDetails。これは、1 回限りのアイテムをサポートする新しいデータモデルです。 SkuDetailsParams queryProductDetailsAsync で QueryProductDetailsParams を使用します。 SkuDetailsResponseListener queryProductDetailsAsync で ProductDetailsResponseListener を使用します。 QueryPurchaseHistoryParams - 有効な購入または保留中の購入には queryPurchasesAsync を使用します。
- バックエンド サーバーで消費された購入を追跡します。
- キャンセルまたは取り消された購入については、サーバーサイドの Voided Purchases API を使用します。
getSkuDetailsList と setSkuDetailsList BillingFlowParams.Builder.setProductDetailsParamsList を使用します。 querySkuDetailsAsync queryProductDetailsAsync enablePendingPurchases()(パラメータなしの API) enablePendingPurchases(PendingPurchasesParams params)
非推奨の enablePendingPurchases() は、enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())と機能的に同等です。queryPurchasesAsync(String skuType, PurchasesResponseListener listener) queryPurchasesAsync アップグレード元
次の表に、PBL 9 で削除された API と、アプリで使用する必要がある対応する代替 API を示します。
以前に非推奨になった API を削除 使用する代替 API BillingClient.SkuType BillingClient.ProductType。INAPP と SUBS の商品タイプ定数は、非推奨の SKU タイプ定数と機能的に類似しています。 SkuDetails ProductDetails。これは、1 回限りのアイテムをサポートする新しいデータモデルです。 SkuDetailsParams queryProductDetailsAsync で QueryProductDetailsParams を使用します。 SkuDetailsResponseListener queryProductDetailsAsync で ProductDetailsResponseListener を使用します。 QueryPurchaseHistoryParams - 有効な購入または保留中の購入には queryProductDetailsAsync を使用します。
- バックエンド サーバーで消費された購入を追跡します。
- キャンセルまたは取り消された購入については、サーバーサイドの Voided Purchases API を使用します。
getSkuDetailsList と setSkuDetailsList BillingFlowParams.Builder.setProductDetailsParamsList を使用します。 (推奨)サービスの自動再接続を有効にします。
Play Billing Library は、サービスが切断されている間に API 呼び出しが行われた場合、サービス接続の自動再確立を試行できます。詳細については、自動サービス再接続を有効にするをご覧ください。
新しいサブレスポンス コードを処理します。
launchBillingFlow()から返される BillingResult に、サブレスポンス コード フィールドが含まれるようになりました。このフィールドは、失敗のより具体的な理由を提供するために、一部のケースでのみ入力されます。サブレスポンス フィールドには次の値を指定できます。PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS- ユーザーの資金が、購入しようとしているアイテムの価格を下回っている場合に返されます。USER_INELIGIBLE- ユーザーが定期購入特典に設定された資格要件を満たしていない場合に返されます。NO_APPLICABLE_SUB_RESPONSE_CODE- デフォルト値。他のサブレスポンス コードが適用されない場合に返されます。
移行手順:
PurchasesUpdatedListenerまたは同等の結果処理を更新して、これらの特定のサブレスポンス コードを認識して応答し、ユーザー エクスペリエンスを向上させます。たとえば、お支払い方法の修正を求めるメッセージや、特定のエラー メッセージが表示されます。エラーコードの再分類に関する認識。
Google Play ストア アプリがシステムによってブロックされている場合(OEM カスタマイズのキッズモードなど)、PBL からのレスポンス コードが
ERRORからBILLING_UNAVAILABLEに変更されました。移行手順: エラー処理ロジックがこの変更に対応し、これらの特定のシナリオで一般的なエラーの受信に依存しないようにします。
DeveloperProvidedBillingDetails.getLinkUri()の null 可能性を処理する。外部決済の統合の一部として
DeveloperProvidedBillingDetailsを使用している場合、getLinkUri()は@Nullableになりました。移行ステップ: この変更を安全に処理するには、統合コードが
DeveloperProvidedBillingDetails.getLinkUri()メソッドからのnull値と空の文字列("")値の両方を処理してから、ブラウザ インテントを解析または起動するようにします。次に例を示します。Kotlin
val linkUri = details.linkUri if (!linkUri.isNullOrEmpty()) { val intent = Intent(Intent.ACTION_VIEW, linkUri.toUri()) context.startActivity(intent) }
Java
String linkUri = details.getLinkUri(); if (!android.text.TextUtils.isEmpty(linkUri)) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(linkUri)); context.startActivity(intent); }オプションの変更。
プリペイド プランの保留中の購入をサポートします。詳細については、定期購入と保留中の取引を処理するをご覧ください。
仮想分割払いのサブスクリプション。詳細については、分割払い定期購入の統合をご覧ください。