Google Play Billing Library リリースノート

このドキュメントには、Google Play Billing Library のリリースノートが記載されています。

Google Play Billing Library 9.1.0 リリース(2026-06-18)

Google Play Billing Library と Kotlin 拡張機能のバージョン 9.1.0 がリリースされました。

変更の概要

Google Play Billing Library 9.0.0 リリース(2026-05-19)

Google Play Billing Library と Kotlin 拡張機能のバージョン 9.0.0 がリリースされました。以前のバージョンの PBL から移行する場合は、PBL 9 移行ガイドをご覧ください。

変更の概要

  • ブロックされた Google Play ストア アクティビティのエラーコードを更新: ブロックされた Google Play ストア アプリのエラーコードが更新されました。システムによって Google Play ストア アプリがブロックされる場合(OEM カスタマイズのキッズモードなど)、レスポンス コードが ERROR から BILLING_UNAVAILABLE に変更されました。また、このようなケースの BillingResult で、Google Play ストアがブロックされているというデバッグ メッセージが表示されるようになりました。

  • デベロッパー提供の請求の Null 可能性の更新: DeveloperProvidedBillingDetails.getLinkUri() メソッドが @Nullable に更新されました。この変更は、外部決済の直接リンク URI が決済選択段階で利用できないシナリオをサポートします。

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

  • targetSdkVersion を 35 に更新しました。

  • アプリ内メッセージングを使用して、オプトインによる値上げの予定をユーザーに通知できるようになりました。これにより、ユーザーはアプリを離れることなく値上げを確認できます。オプトインによる値上げの未処理のメッセージは、ユーザーが値上げに同意できる初日から表示され、最大で 7 日ごとに 1 回表示されます。

Google Play Billing Library 8.3.0 リリース(2025-12-23)

Google Play Billing Library と Kotlin 拡張機能のバージョン 8.3.0 がリリースされました。

変更の概要

Google Play Billing Library 8.2.1 リリース(2025 年 12 月 15 日)

Google Play Billing Library と Kotlin 拡張機能のバージョン 8.2.1 がリリースされました。

バグの修正

Google Play Billing Library 8.2.0 リリース(2025-12-09)

Google Play Billing Library と Kotlin 拡張機能のバージョン 8.2.0 がリリースされました。

変更の概要

Google Play Billing Library 8.1.0 リリース(2025-11-06)

Google Play Billing Library と Kotlin 拡張機能のバージョン 8.1.0 がリリースされました。

変更の概要

  • 停止中の定期購入

    定期購入をクエリする際に一時停止中の定期購入を含めるため、BillingClient.queryPurchasesAsync() メソッドに新しいパラメータが追加されました。一時停止された定期購入は、ユーザーに引き続き関連付けられますが、ユーザーが定期購入を一時停止したか、更新のお支払い方法が承認されなかったため、有効ではありません。

    リスナーで返される Purchase オブジェクトは、一時停止中の定期購入に対して isSuspended() = true を返します。この場合、購入した定期購入へのアクセス権を付与するのではなく、定期購入センターにユーザーを誘導します。ユーザーはそこで、お支払い方法の管理や一時停止状態の解除を行って、定期購入を再開できます。

  • サブスクリプションの更新:

    • BillingFlowParams.ProductDetailsParams オブジェクトに setSubscriptionProductReplacementParams() メソッドが追加されました。このメソッドでは、商品レベルの置換情報を指定できます。

    • SubscriptionProductReplacementParams オブジェクトには 2 つのセッター メソッドがあります。

      • setOldProductId: 現在の ProductDetails の商品で交換する必要がある古い商品。
      • setReplacementMode: これはアイテム レベルの交換モードです。モードは SubscriptionUpdateParams と基本的に同じですが、値のマッピングが更新されています。新しい置換モード KEEP_EXISTING が導入され、アイテムの既存の支払いスケジュールを変更せずに維持できるようになりました。
    • SubscriptionUpdateParams setSubscriptionReplacementMode は非推奨になります。代わりに SubscriptionProductReplacementParams.setReplacementMode を使用してください。

  • minSdkVersion を 23 に更新しました。

  • 1 回限りのアイテムの予約購入 API を有効にしました

    予約購入の詳細を取得する ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails() API を使用できるようになりました。

  • Google Play Billing Library で Kotlin バージョン 2.2.0 がサポートされるようになりました。

Google Play Billing Library 8.0.0 リリース(2025-06-30)

Google Play Billing Library と Kotlin 拡張機能のバージョン 8.0.0 がリリースされました。

変更の概要

  • アプリ内アイテムは、1 回限りのアイテムと呼ばれるようになります。

  • 1 回限りのアイテムに対する複数の購入オプションと特典。

    1 回限りのアイテムに複数の購入オプションと特典を設定できるようになりました。これにより、商品を販売する際の柔軟性が向上し、商品を管理する際の複雑さが軽減されます。

  • queryProductDetailsAsync() メソッドを改善しました。

    PBL 8.0.0 より前は、queryProductDetailsAsync() メソッドは取得できなかった商品を返しませんでした。これは、商品が見つからない、ユーザーが利用できる特典がないなどの理由が考えられます。PBL 8.0.0 では、未取得の商品が、未取得の商品に関する情報を提供する新しい商品レベルのステータス コードとともに返されます。ProductDetailsResponseListener.onProductDetailsResponse() のシグネチャが変更されているため、アプリの変更が必要になります。詳しくは、結果を処理するをご覧ください。

  • サービスの自動再接続。

    新しい BillingClient.Builder.enableAutoServiceReconnection() ビルダー パラメータを使用すると、デベロッパーはサービスの自動再接続を有効にできます。これにより、Play 請求サービスへの再接続が自動的に処理され、サービスの切断時に startConnection() を手動で呼び出す必要がなくなるため、接続管理が簡素化されます。詳細については、接続を自動的に再確立するをご覧ください。

  • launchBillingFlow() メソッドのサブレスポンス コード。

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

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

    以前に非推奨とマークされていた queryPurchaseHistory() メソッドが削除されました。代わりにどの API を使用するかについては、購入履歴のクエリをご覧ください。

  • querySkuDetailsAsync() メソッドを削除しました。

    以前に非推奨とマークされていた querySkuDetailsAsync() メソッドが削除されました。代わりに queryProductDetailsAsync を使用してください。

  • BillingClient.Builder.enablePendingPurchases() メソッドを削除しました。

    以前に非推奨とマークされていたパラメータのない enablePendingPurchases() メソッドが削除されました。代わりに enablePendingPurchases(PendingPurchaseParams params) を使用してください。非推奨の enablePendingPurchases() は enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()) と機能的に同等です。

  • skuType を受け取るオーバーロードされた queryPurchasesAsync() メソッドを削除しました。

    以前に非推奨とマークされていた queryPurchasesAsync(String skuType, PurchasesResponseListener listener) メソッドが削除されました。あるいは、queryPurchasesAsync(QueryPurchasesParams queryPurchasesParams, PurchasesResponseListener listener) を使用します。

Google Play Billing Library 7.1.1 リリース(2024-10-03)

Google Play Billing Library と Kotlin 拡張機能のバージョン 7.1.1 がリリースされました。

バグの修正

Google Play Billing Library 7.1.0 リリース(2024-09-19)

Google Play Billing Library と Kotlin 拡張機能のバージョン 7.1.0 がリリースされました。

変更の概要

  • 接続ステータスと管理に関連するスレッドの安全性を改善。
  • Google Play Billing Library 7.1.1 で完全にリリースされた BillingResult レスポンス コードをテストするための部分的な変更を導入しました。この機能を使用して統合をテストするには、Google Play Billing Library 7.1.1 にアップグレードする必要があります。課金オーバーライド テストが有効になっているアプリケーションにのみ影響するバグが存在します。通常の使用には影響しません。詳細については、BillingResult レスポンス コードをテストするをご覧ください。

Google Play Billing Library 7.0.0 リリース(2024-05-14)

Google Play Billing Library と Kotlin 拡張機能のバージョン 7.0.0 がリリースされました。

変更の概要

Google Play Billing Library 6.2.1 リリース(2024-04-16)

Google Play Billing Library と Kotlin 拡張機能のバージョン 6.2.1 がリリースされました。

変更の概要

Google Play Billing Library 6.2.0 リリース(2024-03-06)

Google Play Billing Library と Kotlin 拡張機能のバージョン 6.2.0 がリリースされました。

変更の概要

Google Play Billing Library 6.1.0 リリース(2023-11-14)

Google Play Billing Library と Kotlin 拡張機能のバージョン 6.1.0 がリリースされました。

変更の概要

Google Play Billing Library 6.0.1 リリース(2023-06-22)

Google Play Billing Library と Kotlin 拡張機能のバージョン 6.0.1 がリリースされました。

変更の概要

Android 14 に対応するように Play Billing Library を更新しました。

Google Play Billing Library 6.0 リリース(2023-05-10)

Google Play Billing Library と Kotlin 拡張機能のバージョン 6.0.0 がリリースされました。

変更の概要

  • ProrationMode の代わりとして、新しい ReplacementMode 列挙型を追加しました。

    なお、下位互換性の維持のため、ProrationMode は引き続き利用できます。

  • PENDING 購入の注文 ID を削除しました。

    以前は、購入が保留中であっても、常に注文 ID が作成されていました。バージョン 6.0.0 以降は、保留中の購入の注文 ID は作成されません。このような購入では、購入ステータスが PURCHASED に移行すると注文 ID が入力されます。

  • queryPurchases メソッドと launchPriceConfirmationFlow メソッドを削除しました。

    これまで非推奨とマークされていた queryPurchases メソッドと launchPriceConfirmationFlow メソッドは、Play Billing Library 6.0.0 から削除されました。デベロッパーは queryPurchases ではなく queryPurchasesAsync を使用する必要があります。launchPriceConfirmationFlow の代わりについては、価格の変更をご覧ください。

  • 新しいネットワーク エラー レスポンス コードを追加しました。

    新しいネットワーク エラー レスポンス コードである NETWORK_ERROR が PBL バージョン 6.0.0 から追加されました。ネットワーク接続の問題によりエラーが発生した場合に、このコードが返されます。これまでこのようなネットワーク接続エラーは、SERVICE_UNAVAILABLE と返されていました。

  • SERVICE_UNAVAILABLE と SERVICE_TIMEOUT を更新しました。

    PBL バージョン 6.0.0 より、処理のタイムアウトによるエラーは現在の SERVICE_TIMEOUT ではなく SERVICE_UNAVAILABLE と返されます。

    これは以前のバージョンの PBL では変更されません。

  • SERVICE_TIMEOUT を削除しました。

    PBL バージョン 6.0.0 より、SERVICE_TIMEOUT は返されなくなります。以前のバージョンの PBL では引き続きこのコードが返されます。

  • 追加のロギングを追加しました。

    Play Billing Library 6 リリースには追加ロギングが含まれます。追加ロギングは API の使用状況(成功と失敗など)とサービス接続の問題に関する分析情報を提供します。この情報は Play Billing Library のパフォーマンスを改善し、エラーを適切にサポートするために使用されます。

Google Play Billing Library 5.2.1 リリース(2023-06-22)

Google Play Billing Library と Kotlin 拡張機能のバージョン 5.2.1 がリリースされました。

変更の概要

Android 14 に対応するように Play Billing Library を更新しました。

Google Play Billing Library 5.2 リリース(2023-04-06)

Google Play Billing Library と Kotlin 拡張機能のバージョン 5.2.0 がリリースされました。

変更の概要

Google Play Billing Library 5.1 リリース(2022-10-31)

Google Play Billing Library と Kotlin 拡張機能のバージョン 5.1.0 がリリースされました。

このバージョンには、以下の変更が含まれています。

変更の概要

Google Play Billing Library 5.0 リリース(2022-05-11)

Google Play Billing Library と Kotlin 拡張機能のバージョン 5.0.0 がリリースされました。

このバージョンには、以下の変更が含まれています。

変更の概要

  • 定期購入商品の新しいモデル(単一の定期購入商品について複数の特典を作成できる新しいエンティティなど)を導入しました。詳細については、移行ガイドをご覧ください。
  • BillingClient.querySkuDetailsAsync() の代わりとして BillingClient.queryProductDetailsAsync() を追加しました。
  • EU のパーソナライズされた価格開示要件のために setIsOfferPersonalized() メソッドを追加しました。このメソッドの使用方法については、価格のパーソナライズを示すをご覧ください。
  • queryPurchases() を削除しました。これは、以前非推奨になり、Google Play Billing Library 4.0.0 で導入された queryPurchasesAsync に置き換えられています。
  • launchPriceChangeFlow は非推奨になりました。将来のリリースで削除される予定です。代替手段の詳細については、価格変更確定フローを起動するをご覧ください。
  • 以前、購入フローをインスタンス化する際に使用されていた setVrPurchaseFlow() を削除しました。以前のバージョンでは、このメソッドはユーザーを Android 搭載デバイスでの購入完了手続きにリダイレクトしていました。このメソッドを削除すると、ユーザーは通常の購入フローで購入手続きを完了するようになります。

Google Play Billing Library 4.1 リリース(2022-02-23)

Google Play Billing Library と Kotlin 拡張機能のバージョン 4.1.0 がリリースされました。

このバージョンには、以下の変更が含まれています。

変更の概要

Google Play Billing Library 4.0 リリース(2021-05-18)

Google Play Billing Library と Kotlin 拡張機能のバージョン 4.0.0 がリリースされました。

変更の概要

Google Play Billing Library 3.0.3 リリース(2021-03-12)

Google Play Billing Library、Kotlin 拡張機能、Unity プラグインのバージョン 3.0.3 がリリースされました。

Java と Kotlin のバグの修正

  • endConnection() を呼び出す際に発生するメモリリークを修正しました。
  • 単一タスクの起動モードを利用するアプリで Google Play Billing Library を使用する際に発生する問題を修正しました。請求ダイアログが表示された状態でアプリが停止され、その後アプリが Android ランチャーから再開された場合、onPurchasesUpdated() コールバックがトリガーされるようになります。

Unity のバグの修正

  • Java バージョン 3.0.3 への更新でメモリリークを修正し、請求ダイアログが表示された状態でアプリが停止され、その後アプリが Android ランチャーから再開された場合に購入できなくなる問題を解決しました。

Google Play Billing Library 3.0.2 リリース(2020-11-24)

Google Play Billing Library と Kotlin 拡張機能のバージョン 3.0.2 がリリースされました。

バグの修正

  • Kotlin 拡張機能でコルーチンがエラー「Already resume」を返して失敗するバグを修正しました。
  • Kotlin 拡張機能が kotlinx.coroutines ライブラリ バージョン 1.4 以上で使用されている場合の未解決の参照を修正しました。

Google Play Billing Library 3.0.1 リリース(2020-09-30)

Google Play Billing Library と Kotlin 拡張機能のバージョン 3.0.1 がリリースされました。

バグの修正

  • 請求フローの途中で強制終了されたアプリが復帰した場合、購入結果を通知する PurchasesUpdatedListener が呼び出されないことがあるバグを修正しました。

Google Play Billing Library 3.0 リリース(2020-06-08)

Google Play Billing Library、Kotlin 拡張機能、Unity プラグインのバージョン 3.0.0 がリリースされました。

変更の概要

  • 特典 SKU のサポートを削除しました。
  • ChildDirected パラメータと UnderAgeOfConsent パラメータを削除しました。
  • サポートが終了したデベロッパー ペイロード メソッドを削除しました。
  • サポートが終了した BillingFlowParams.setAccountId() メソッドと BillingFlowParams.setDeveloperId() メソッドを削除しました。
  • サポートが終了した BillingFlowParams.setOldSkus(String oldSku) メソッドと BillingFlowParams.addOldSku(String oldSku) メソッドを削除しました。
  • null 可能性アノテーションを追加しました。

バグの修正

  • SkuDetails.getIntroductoryPriceCycles() が String ではなく int を返すようになりました。
  • 追加のパラメータが設定されていなくても、追加のパラメータがあるものとして請求フローが処理されるバグを修正しました。

Google Play Billing Library 2.2.1 リリース(2020-05-20)

Google Play Billing Library のバージョン 2.2.1 がリリースされました。

バグの修正

  • Kotlin 拡張機能が依存する Java Play Billing Library のデフォルト バージョンを更新しました。

Google Play Billing Library 2.2.0 リリースと Unity サポート(2020-03-23)

Google Play Billing Library 2.2.0 には、購入を正しいユーザーに確実に紐付けるための機能が用意されています。こうした変更により、デベロッパー ペイロードに基づいてカスタム ソリューションを構築する必要がなくなります。今回のアップデートの一環として、デベロッパー ペイロード機能のサポートが終了しました。この機能は今後のリリースで削除される予定です。推奨される代替機能などについて詳しくは、デベロッパー ペイロードをご覧ください。

Unity 用 Google Play Billing Library 2

Google Play Billing Library 2 の現在の Java 版と Kotlin 版に加え、Unity と組み合わせて使用するためのライブラリ バージョンがリリースされました。Unity アプリ内購入 API を使用しているゲーム デベロッパーはアップグレードすることで、Google Play Billing Library 2 のすべての機能を利用できるようになります。また、今後の Google Play Billing Library 最新版へのアップグレードも簡単になります。

詳しくは、Unity で Google Play 請求サービスを使用するをご覧ください。

変更の概要

Google Play Billing Library 2.1.0 リリースと Kotlin 拡張機能 2.1.0 リリース(2019-12-10)

Google Play Billing Library のバージョン 2.1.0 と新しい Kotlin 拡張機能がリリースされました。Google Play Billing Library の Kotlin 拡張機能には、Kotlin での開発に役立つイディオマティックな API が用意されており、より優れた null 安全やコルーチンをサポートしています。コード例については、Google Play Billing Library の使用をご覧ください。

このバージョンには、以下の変更が含まれています。

変更の概要

  • BillingFlowParams において、デバイス上の複数のアカウントが同じ SKU を所有している場合のあいまいさを排除するために、setOldSku(String oldSku) をサポート終了として setOldSku(String oldSku, String purchaseToken) に置き換えました。

Google Play Billing Library 2.0.3 リリース(2019-08-05)

Google Play Billing Library のバージョン 2.0.3 がリリースされました。

バグの修正

  • querySkuDetailsAsync() が正しい結果を返さず、失敗してコード DEVELOPER_ERROR を返すことがあるバグを修正しました。

Google Play Billing Library 2.0.2 リリース(2019-07-08)

Google Play Billing Library のバージョン 2.0.2 がリリースされました。このリリースではリファレンス ドキュメントが更新されていますが、ライブラリの機能に変更はありません。

Google Play Billing Library 2.0.1 リリース(2019-06-06)

Google Play Billing Library のバージョン 2.0.1 がリリースされました。このバージョンには、以下の変更が含まれています。

バグの修正

  • 一部のケースでデバッグ メッセージが null で返されていたバグを修正しました。
  • メモリリークに関する潜在的な問題を修正しました。

Google Play Billing Library 2.0 リリース(2019-05-07)

Google Play Billing Library のバージョン 2.0 がリリースされました。このバージョンには、以下の変更が含まれています。

購入は 3 日以内に承認する必要がある

Google Play では、アプリ内またはアプリ外でのアイテム購入をサポートしています。ユーザーがどちらでアイテムを購入したかにかかわらず、一貫した購入エクスペリエンスを Google Play からユーザーに確実に提供するには、ユーザーにエンタイトルメントを付与した後、Google Play Billing Library を介して受信したすべての購入をできるだけ早く承認する必要があります。3 日以内に購入を承認しない場合、ユーザーは自動的に払い戻しを受け、Google Play は購入を取り消します。保留中のトランザクション(バージョン 2.0 の新機能)では、購入ステータスが PURCHASED に移行したときに 3 日間の猶予期間の適用が開始され、購入ステータスが PENDING の間は適用されません。

定期購入の場合、新しい購入トークンのある購入はすべて承認する必要があります。つまり初回購入、プランの変更、再登録はすべて承認する必要がありますが、その後の更新を承認する必要はありません。購入に確認が必要かどうかを判断するには、購入の確認フィールドを確認します。

Purchase オブジェクトには、購入が承認されたかどうかを示す isAcknowledged() メソッドが含まれるようになりました。さらに、Google Play Developer API には、Purchases.products と Purchases.subscriptions の確認ブール値が含まれています。購入を承認する際は、すでに承認されているかどうかを確認するためにこれらの方法を必ず使用してください。

次のいずれかの方法で購入を承認できます。

  • 消費アイテムの場合は、クライアント API にある consumeAsync() を使用します。
  • 非消費アイテムの場合は、クライアント API にある acknowledgePurchase() を使用します。
  • Server API では、新しい acknowledge() メソッドも利用できます。

BillingFlowParams.setSku() の削除

以前にサポート対象外となった BillingFlowParams#setSku() メソッドは、このリリースで削除されました。購入フローでアイテムをレンダリングするには、BillingClient.querySkuDetailsAsync() を呼び出して、結果として得られる SkuDetails オブジェクトを BillingFlowParams.Builder.setSkuDetails() に渡します。

コード例については、Google Play Billing Library の使用をご覧ください。

デベロッパー ペイロードのサポート

Google Play Billing Library のバージョン 2.0 では、購入に添付できる任意の文字列であるデベロッパー ペイロードのサポートが追加されました。デベロッパー ペイロード パラメータを購入に添付することができますが、購入が承認または消費された場合に限られます。これは、購入フローを起動するときにペイロードを指定できる AIDL のデベロッパー ペイロードとは異なります。購入はアプリ外部で開始できるようになったため、この変更により、常にペイロードを購入に追加できるようになりました。

新しいライブラリでペイロードにアクセスするために、Purchase オブジェクトに getDeveloperPayload() メソッドが追加されました。

一貫したオファー

割引 SKU を提供すると Google Play は SKU の元の価格を返すようになり、割引が適用されていることをユーザーに知らせることができます。

SkuDetails には、元の SKU 価格を取得するための 2 つの新しいメソッドがあります。

保留中の取引

Google Play Billing Library のバージョン 2.0 では、エンタイトルメントを付与する前に追加のアクションを必須とする購入をサポートする必要があります。たとえば、ユーザーは実店舗でアプリ内アイテムを現金で購入するよう選択したとします。その場合は、アプリ外部で取引が完了することになります。このシナリオでは、ユーザーが取引を完了した後にのみエンタイトルメントを付与する必要があります。

保留中の購入を有効にするには、アプリの初期化の一環として enablePendingPurchases() を呼び出します。

Purchase.getPurchaseState() を使用して、購入ステータスが PURCHASED か PENDING かを確認します。ステータスが PURCHASED の場合にのみエンタイトルメントを付与するようにしてください。Purchase ステータスが更新されているかどうかを確認する手順は次のとおりです。

  1. アプリの開始時に BillingClient.queryPurchases() を呼び出して、ユーザーに関連付けられた未消費のアイテムのリストを取得します。
  2. 返された Purchase オブジェクトごとに Purchase.getPurchaseState() を呼び出します。
  3. onPurchasesUpdated() メソッドを実装し、Purchase オブジェクトの変更に対応します。

また、Google Play Developer API には Purchases.products の PENDING ステータスが含まれています。保留中の取引はサブスクリプションでは対象外です。

このリリースでは、新しいリアルタイムのデベロッパー通知タイプである OneTimeProductNotification も導入されています。この通知タイプには、値が ONE_TIME_PRODUCT_PURCHASED または ONE_TIME_PRODUCT_CANCELED のいずれかである単一のメッセージが含まれています。この通知タイプは、現金などのお支払い方法で遅延が関係する購入に対してのみ送信されます。

保留中の購入を承認する場合は、購入ステータスが PENDING ではなく PURCHASED の場合にのみ承認するようにしてください。

API の変更

Google Play Billing Library のバージョン 2.0 には、新しい機能をサポートし、既存の機能を明確にするための API の変更がいくつか含まれています。

consumeAsync

consumeAsync() が purchaseToken ではなく ConsumeParams オブジェクトを受け取るようになりました。ConsumeParams には purchaseToken と省略可能なデベロッパー ペイロードが含まれます。

このリリースでは、以前のバージョンの consumeAsync() が削除されました。

queryPurchaseHistoryAsync

混乱を最小限に抑えるために、queryPurchaseHistoryAsync() は Purchase オブジェクトではなく PurchaseHistoryRecord を返すようになりました。PurchaseHistoryRecord オブジェクトは Purchase オブジェクトと同じですが、queryPurchaseHistoryAsync() によって返された値のみを反映し、autoRenewing、orderId、packageName フィールドを含みません。返されたデータにはなんの変更もないことにご注意ください。queryPurchaseHistoryAsync() は以前と同じデータを返します。

BillingResult の戻り値

以前は BillingResponse 整数値を返していた API が BillingResult オブジェクトを返すようになりました。BillingResult には BillingResponse 整数と、エラー診断に使用できるデバッグ文字列が含まれています。デバッグ文字列は en-US ロケールを使用し、エンドユーザーには表示されません。

バグの修正

Google Play Billing Library 1.2.2 リリース(2019-03-07)

Google Play Billing Library のバージョン 1.2.2 がリリースされました。このバージョンには、以下の変更が含まれています。

バグの修正

  • バージョン 1.2.1 で発生したスレッドの問題を修正しました。バックグラウンド呼び出しでメインスレッドをブロックしなくなりました。

その他の変更点

  • メインスレッドを使用することをおすすめしますが、バックグラウンド スレッドから Google Play Billing Library をインスタンス化することができるようになりました。
  • ANR が発生する可能性を減らすために、インスタンス化はバックグラウンド スレッドに完全に移行されました。

Play Billing Library 1.2.1 リリース(2019-03-04)

Google Play Billing Library のバージョン 1.2.1 がリリースされました。このバージョンには、以下の変更が含まれています。

主な変更

その他の変更点

  • テストを容易にするために PurchasesResult と SkuDetailsResult に公開コンストラクタを追加しました。
  • SkuDetails オブジェクトで新しいメソッド getOriginalJson() を使用できるようになりました。
  • すべての AIDL サービス呼び出しはバックグラウンド スレッドによって処理されるようになりました。

バグの修正

  • NULL のコールバック リスナーがパブリック API に渡されなくなりました。

Google Play Billing Library 1.2 リリース(2018-10-18)

Google Play Billing Library のバージョン 1.2 がリリースされました。このバージョンには、以下の変更が含まれています。

変更の概要

  • Google Play Billing Library は、Android ソフトウェア開発キットのライセンス契約のもとに提供されます。
  • launchPriceChangeConfirmationFlow API が追加されました。これにより、定期購入価格に対する保留中の変更を確認するようユーザーに促します。
  • ユーザーの定期購入をアップグレードまたはダウングレードする場合に、新しい比例配分モード DEFERRED のサポートが追加されました。
  • BillingFlowParams クラス内で setSku() を setSkuDetails() で置き換えました。
  • 軽微なバグの修正とコードの最適化を行いました。

価格変更の確認

Google Play Console で定期購入の価格を変更し、ユーザーがアプリを起動した際に新しい価格を確認して承認できるように表示できるようになりました。

この API を使用するには、定期購入商品の skuDetails を使用して PriceChangeFlowParams オブジェクトを作成し、launchPriceChangeConfirmationFlow() を呼び出します。次のコード スニペットに示すように、PriceChangeConfirmationListener を実装して価格変更確認フローが終了したときに結果を処理してください。

Kotlin

val priceChangeFlowParams = PriceChangeFlowParams.newBuilder()
    .setSkuDetails(skuDetailsOfThePriceChangedSubscription)
    .build()

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        object : PriceChangeConfirmationListener() {
            override fun onPriceChangeConfirmationResult(responseCode: Int) {
                // Handle the result.
            }
        })

Java

PriceChangeFlowParams priceChangeFlowParams =
        PriceChangeFlowParams.newBuilder()
    .setSkuDetails(skuDetailsOfThePriceChangedSubscription)
    .build();

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        new PriceChangeConfirmationListener() {
            @Override
            public void onPriceChangeConfirmationResult(int responseCode) {
                // Handle the result.
            }
        });

価格変更確認フローに新しい価格情報を含むダイアログが表示され、ユーザーに新しい価格を受け入れるように求めます。このフローは、BillingClient.BillingResponse 型のレスポンス コードを返します。

新しい比例配分モード

ユーザーの定期購入をアップグレードまたはダウングレードする場合は、新しい比例配分モード DEFERRED を使用できます。このモードでは、次回の更新時にユーザーの定期購入を更新します。比例配分モードの設定方法について詳しくは、比例配分モードの設定をご覧ください。

SKU の詳細を設定する新しい方法

BillingFlowParams クラスでの setSku() メソッドが非推奨になりました。この変更により、Google Play 請求サービスのフローを最適化できます。

アプリ内課金クライアントで BillingFlowParams の新しいインスタンスを作成するときは、setSkuDetails() を使用して JSON オブジェクトを直接操作することをおすすめします。以下に示すコード スニペットをご確認ください。

BillingFlowParams Builder クラスでの setSku() メソッドが非推奨になりました。代わりに、次のコード スニペットに示すように、setSkuDetails() メソッドを呼び出してください。setSkuDetails() オブジェクトに渡されるオブジェクトは querySkuDetailsAsync() メソッドで取得されます。

Kotlin

private lateinit var mBillingClient: BillingClient
private val mSkuDetailsMap = HashMap<String, SkuDetails>()

private fun querySkuDetails() {
    val skuDetailsParamsBuilder = SkuDetailsParams.newBuilder()
    mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build()
    ) { responseCode, skuDetailsList ->
        if (responseCode == 0) {
            for (skuDetails in skuDetailsList) {
                mSkuDetailsMap[skuDetails.sku] = skuDetails
            }
        }
    }
}

private fun startPurchase(skuId: String) {
    val billingFlowParams = BillingFlowParams.newBuilder()
    .setSkuDetails(mSkuDetailsMap[skuId])
    .build()
}

Java

private BillingClient mBillingClient;
private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>();

private void querySkuDetails() {
    SkuDetailsParams.Builder skuDetailsParamsBuilder
            = SkuDetailsParams.newBuilder();
    mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build(),
            new SkuDetailsResponseListener() {
                @Override
                public void onSkuDetailsResponse(int responseCode,
                        List<SkuDetails> skuDetailsList) {
                    if (responseCode == 0) {
                        for (SkuDetails skuDetails : skuDetailsList) {
                            mSkuDetailsMap.put(skuDetails.getSku(), skuDetails);
                        }
                    }
                }
            });
}

private void startPurchase(String skuId) {
    BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
            .setSkuDetails(mSkuDetailsMap.get(skuId))
            .build();
}

Play Billing Library 1.1 リリース(2018-05-07)

Google Play Billing Library のバージョン 1.1 がリリースされました。このバージョンには、以下の変更が含まれています。

変更の概要

  • 既存の定期購入をアップグレードまたはダウングレードする際に BillingFlowParams で配分モードを指定するためのサポートを追加しました。
  • BillingFlowParams の replaceSkusProration ブール値フラグはサポートされなくなりました。代わりに replaceSkusProrationMode を使用してください
  • launchBillingFlow() はレスポンスの失敗に対してコールバックをトリガーするようになりました。

動作の変更

Google Play Billing Library バージョン 1.1 では、次のように動作が変更されました。

デベロッパーが BillingFlowParams クラスの replaceSkusProrationMode を設定できるようになった

ProrationMode は、ユーザーの定期購入をアップグレードまたはダウングレードする際の比例配分の種類に関する詳細を提供します。

Kotlin

BillingFlowParams.newBuilder()
    .setSku(skuId)
    .setType(billingType)
    .setOldSku(oldSku)
    .setReplaceSkusProrationMode(replaceSkusProrationMode)
    .build()

Java

BillingFlowParams.newBuilder()
    .setSku(skuId)
    .setType(billingType)
    .setOldSku(oldSku)
    .setReplaceSkusProrationMode(replaceSkusProrationMode)
    .build();

Google Play は次の比例配分モードをサポートしています。

IMMEDIATE_WITH_TIME_PRORATION 切り替えは直ちに有効になり、新しい有効期限が比例配分され、ユーザーへの入金または請求が行われます。これが現在のデフォルトの動作です。
IMMEDIATE_AND_CHARGE_PRORATED_PRICE 切り替えは直ちに有効になりますが、請求期間は変わりません。残りの期間の価格に対する請求が行われます。

注: このオプションは定期購入のアップグレードでのみ利用可能です。

IMMEDIATE_WITHOUT_PRORATION 切り替えは直ちに有効になり、新しい価格が次回契約期間に請求されます。請求期間は変わりません。

replaceSkusProration が BillingFlowParams クラスでサポートされなくなった

デベロッパーは、定期購入のアップグレード要求に対して比例配分額を請求するためのブール値フラグを設定できましたが、より詳細な比例配分命令を含む ProrationMode がサポートされるようになったため、このブール値フラグはサポートされなくなります。

launchBillingFlow() がレスポンスの失敗に対してコールバックをトリガーするようになった

Billing Library は常に PurhcasesUpdatedListener コールバックをトリガーし、BillingResponse を非同期で返します。BillingResponse の同期戻り値も保持されます。

バグの修正

  • サービスが切断されると、非同期メソッドの早い段階で正しく終了するようになりました。
  • Builder パラメータ オブジェクトはビルド オブジェクトを変換しなくなりました。
  • 不具合 68087141: launchBillingFlow() はレスポンスの失敗に対してコールバックをトリガーするようになりました。

Google Play Billing Library 1.0 リリース(2017-09-19、発表)

Google Play Billing Library のバージョン 1.0 がリリースされました。このバージョンには、以下の変更が含まれています。

重要な変更点

  • ライブラリのマニフェスト内に請求許可を埋め込みました。com.android.vending.BILLING 権限を Android マニフェストに追加する必要はありません。
  • 新しいビルダーが BillingClient.Builder クラスに追加されました。
  • SKU を照会するためのメソッドで使用される SkuDetailsParams クラスのビルダー パターンが導入されました。
  • 整合性のためにいくつかの API メソッドが更新されました(戻り引数の名前と順序は同じ)。

動作の変更

Google Play Billing Library バージョン 1.0 では、次のように動作が変更されました。

BillingClient.Builder クラス

BillingClient.Builder が newBuilder パターンで初期化されるようになりました。

Kotlin

billingClient = BillingClient.newBuilder(context).setListener(this).build()

Java

billingClient = BillingClient.newBuilder(context).setListener(this).build();

launchBillingFlow メソッドが BillingFlowParams クラスを使用して呼び出されるようになった

購入または定期購入の請求フローを開始するには、launchBillingFlow() メソッドが、リクエストに固有のパラメータによって初期化された BillingFlowParams インスタンスを受け取ります。

Kotlin

BillingFlowParams.newBuilder().setSku(skuId)
        .setType(billingType)
        .setOldSku(oldSku)
        .build()

// Then, use the BillingFlowParams to start the purchase flow
val responseCode = billingClient.launchBillingFlow(builder.build())

Java

BillingFlowParams.newBuilder().setSku(skuId)
                              .setType(billingType)
                              .setOldSku(oldSku)
                              .build();

// Then, use the BillingFlowParams to start the purchase flow
int responseCode = billingClient.launchBillingFlow(builder.build());

利用可能なアイテムを照会するための新しい方法

queryPurchaseHistoryAsync() メソッドと querySkuDetailsAsync() メソッドの引数は Builder パターンにラップされました。

Kotlin

val params = SkuDetailsParams.newBuilder()
params.setSkusList(skuList)
        .setType(itemType)
billingClient.querySkuDetailsAsync(params.build(), object : SkuDetailsResponseListener() {
    ...
})

Java

SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList)
        .setType(itemType);
billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {...})

以前は便宜上、また API で整合性をとるためにラッパークラスだった結果が、結果コードと SkuDetails オブジェクトのリストで返されるようになりました。

Kotlin

fun onSkuDetailsResponse(@BillingResponse responseCode: Int, skuDetailsList: List<SkuDetails>)

Java

public void onSkuDetailsResponse(@BillingResponse int responseCode, List<SkuDetails> skuDetailsList)

onConsumeResponse() メソッドでパラメータの順序が変更された

ConsumeResponseListener インターフェースから返される onConsumeResponse の引数の順序が、API 全体で整合性がとれるように変更されました。

Kotlin

fun onConsumeResponse(@BillingResponse responseCode: Int, outToken: String)

Java

public void onConsumeResponse(@BillingResponse int responseCode, String outToken)

PurchaseResult オブジェクトのラップ解除

PurchaseResult が、API 全体で整合性がとれるようラップ解除されました。

Kotlin

fun onPurchaseHistoryResponse(@BillingResponse responseCode: Int, purchasesList: List<Purchase>)

Java

void onPurchaseHistoryResponse(@BillingResponse int responseCode, List<Purchase> purchasesList)

バグの修正

デベロッパー プレビュー 1 リリース(2017-06-12、発表)

デベロッパーによるプレビューが開始されました。目的は請求関連処理の開発プロセスを簡素化することで、これによりデベロッパーはアプリケーション アーキテクチャやナビゲーション構造といった Android アプリ固有のロジックの実装に専念できます。

このライブラリには、Android アプリを Google Play 請求サービス API と統合する際に使用できる便利なクラスと機能がいくつか含まれています。また、このライブラリは Android インターフェース定義言語(AIDL)サービスの上に抽象化レイヤを提供し、デベロッパーがアプリと Google Play 請求サービス API の間のインターフェースを簡単に定義できるようにします。