Google Play Billing Library 7 または 8 からバージョン 9 に移行する

このドキュメントでは、Google Play Billing Library(PBL)7 または 8 から PBL 9 に移行する方法と、新機能を統合する方法について説明します。

バージョン 9.0.0 の変更点をすべて網羅したリストについては、リリースノートをご覧ください。

概要

PBL 9 には、既存の API の改善と、以前に非推奨となった API の削除が含まれています。このバージョンのライブラリでは、新しいサブレスポンス コードを通じて、より豊富なエラー コンテキストも導入されています。

PBL アップグレードの下位互換性

PBL 9 に移行するには、リリースノートとこの移行ガイドの後半で説明するように、アプリから既存の API 参照の一部を更新または削除する必要があります。

PBL 7 または 8 から PBL 9 にアップグレードする

PBL 7 または 8 から PBL 9 にアップグレードするには、次の操作を行います。

  1. アプリの build.gradle ファイルで、Play Billing Library の依存関係のバージョンを更新します。

    dependencies {
      def billing_version = "9.0.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.0.0"
      implementation("com.android.billingclient:billing-ktx:$billing_version")
    }
    
  2. (PBL 7 から PBL 9 へのアップグレードにのみ適用されます)。queryProductDetailsAsync メソッドの実装を更新します。

    ProductDetailsResponseListener.onProductDetailsResponse メソッドのシグネチャが変更されたため、queryProductDetailsAsync 実装でアプリの変更が必要になります。詳しくは、購入可能なサービスを表示するをご覧ください。

  3. 削除された 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 queryProductDetailsAsyncQueryProductDetailsParams を使用します。
    SkuDetailsResponseListener queryProductDetailsAsyncProductDetailsResponseListener を使用します。
    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 queryProductDetailsAsyncQueryProductDetailsParams を使用します。
    SkuDetailsResponseListener queryProductDetailsAsyncProductDetailsResponseListener を使用します。
    QueryPurchaseHistoryParams
    • 有効または保留中の購入には queryProductDetailsAsync を使用します。
    • バックエンド サーバーで消費された購入をトラッキングします。
    • キャンセルまたは無効になった購入には、サーバーサイドの Voided Purchases API を使用します。
    getSkuDetailsList と setSkuDetailsList BillingFlowParams.Builder.setProductDetailsParamsList を使用する

  4. (推奨)サービスの自動再接続を有効にします。

    サービスが切断されている間に API 呼び出しが行われた場合、Play Billing Library はサービス接続の自動再確立を試行できます。詳細については、サービスの自動再接続を有効にするをご覧ください。

  5. 新しいサブレスポンス コードを処理します。

    launchBillingFlow() から返される BillingResult に、サブレスポンス コード フィールドが含まれるようになりました。このフィールドは、失敗のより具体的な理由を示すために、一部のケースでのみ入力されます。サブレスポンス フィールドには次の値を指定できます。

    • PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS - ユーザーの残高が購入しようとしているアイテムの価格を下回っている場合に返されます。
    • USER_INELIGIBLE - ユーザーが定期購入特典の利用資格要件を満たしていない場合に返されます。
    • NO_APPLICABLE_SUB_RESPONSE_CODE - デフォルト値。他のサブレスポンス コードが適用されない場合に返されます。

    移行手順: PurchasesUpdatedListener または同等の結果処理を更新して、これらの特定の下位レスポンス コードを認識して応答し、ユーザー エクスペリエンスを向上させます。たとえば、お支払い方法の修正を求めるメッセージが表示されたり、特定のエラー メッセージが表示されたりします。

  6. エラーコードの再分類に関する認識。

    システムによって Google Play ストア アプリがブロックされている場合(OEM カスタマイズのキッズモードなど)、PBL からのレスポンス コードが ERROR から BILLING_UNAVAILABLE に変更されました。

    移行手順: エラー処理ロジックがこの変更に対応し、これらの特定のシナリオで一般的なエラーを受け取ることに依存しないようにします。

  7. DeveloperProvidedBillingDetails.getLinkUri() の null 値許容を処理します。

    外部決済統合の一部として DeveloperProvidedBillingDetails を使用している場合、getLinkUri()@Nullable になりました。

    移行手順: この変更を安全に処理するには、DeveloperProvidedBillingDetails.getLinkUri() メソッドから返される null と空の文字列("")の両方の値を、ブラウザ インテントの解析または起動の前に処理するように、統合コードを修正してください。次に例を示します。

    Kotlin

    val linkUri = details.getLinkUri()
    if (!linkUri.isNullOrEmpty()) {
      val intent = Intent(Intent.ACTION_VIEW, Uri.parse(linkUri))
      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);
    }
    
  8. オプションの変更。