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.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")
    }
    
  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 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 を使用します。

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

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

  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

    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. オプションの変更。