このドキュメントには、Google Play Billing Library のリリースノートが掲載されています。
Google Play Billing Library 8.0.0 リリース(2025 年 6 月 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 Billing Service への再接続が自動的に処理され、サービスが切断された場合にstartConnection()を手動で呼び出す必要がなくなるため、接続管理が簡素化されます。詳細については、接続を自動的に再確立するをご覧ください。launchBillingFlow()メソッドのサブレスポンス コード。launchBillingFlow()から返される BillingResult に、サブレスポンス コード フィールドが追加されます。このフィールドは、失敗のより具体的な理由を示すために、一部のケースでのみ入力されます。PBL 8.0.0 では、ユーザーの残高が購入しようとしている商品の価格より少ない場合に、PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS サブコードが返されます。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 がリリースされました。
バグの修正
BillingResultレスポンス コードのテストに関連する Play Billing Library 7.1.0 のバグを修正しました。
Google Play Billing Library 7.1.0 リリース(2024-09-19)
Google Play Billing Library と Kotlin 拡張機能のバージョン 7.1.0 がリリースされました。
変更の概要
- 接続ステータスと管理に関連するスレッドの安全性を改善しました。
- Play Billing Library 7.1.1 で完全にリリースされる [
BillingResult][billing-result] レスポンス コードをテストするための部分的な変更を導入しました。この機能を使用して統合をテストするには、Play Billing Library 7.1.1 にアップグレードする必要があります。[課金のオーバーライド テストを有効にする][enable-billing-overrides-testing] が有効になっているアプリにのみ影響し、通常の使用には影響しないバグが存在します。詳細については、BillingResultレスポンス コードをテストするをご覧ください。[billing-result]: /reference/com/android/billingclient/api/BillingResult [enable-billing-overrides-testing]: /google/play/billing/test-response-codes#enable-billing-overrides-testing
Google Play Billing Library 7.0.0 リリース(2024-05-14)
Google Play Billing Library と Kotlin 拡張機能のバージョン 7.0.0 がリリースされました。
変更の概要
分割払いの定期購入をサポートする API を追加しました。
- ユーザーが購入できる分割払いの基本プランに [
ProductDetails.InstallmentPlanDetails][installment-details] を追加しました。この API を使用すると、アプリで分割払いのプランとそのコミットメント設定を特定し、関連情報をユーザーに提供できます。詳しくは、[定期購入の分割払いガイド][分割払い] をご覧ください。[installment-details]: /reference/com/android/billingclient/api/ProductDetails.InstallmentPlanDetails [installments]: /google/play/billing/subscriptions#installments
- ユーザーが購入できる分割払いの基本プランに [
このリリースで非推奨となった
BillingClient.Builder.enablePendingPurchases()に代わるPendingPurchasesParamsとBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)を追加しました。- 非推奨の
enablePendingPurchases()は、機能的にはenablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())と同等です。
- 非推奨の
定期購入のプリペイド プランの保留中のトランザクションをサポートする API を追加しました。
PendingPurchasesParams.Builder.enablePrepaidPlans()とBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)を使用して、定期購入プリペイド プランの保留中の取引を有効にします。サポートを追加する際は、アプリで定期購入のライフサイクルも正しく管理されていることを確認してください。詳しくは、保留中の購入に関するガイドをご覧ください。- 保留中のチャージ、または既存のサブスクリプションへのアップグレードまたはダウングレードを取得するための
Purchase.PendingPurchaseUpdateとPurchase.getPendingPurchaseUpdate()を追加しました。
BillingClient.Builder.enableAlternativeBilling()、AlternativeBillingListener、AlternativeChoiceDetailsを削除しました。- デベロッパーは、リスナー コールバックで
UserChoiceBillingListenerとUserChoiceDetailsとともにBillingClient.Builder.enableUserChoiceBilling()を使用する必要があります。
- デベロッパーは、リスナー コールバックで
BillingFlowParams.ProrationMode、BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()、BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()を削除しました。 - デベロッパーは、代わりにBillingFlowParams.SubscriptionUpdateParams.Builder#setSubscriptionReplacementMode(int)でBillingFlowParams.SubscriptionUpdateParams.ReplacementModeを使用する必要があります。-BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()。 -BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()。BillingFlowParams.SubscriptionUpdateParams.Builder#setOldSkuPurchaseToken()を削除しました。 - デベロッパーは代わりにBillingFlowParams.SubscriptionUpdateParams.Builder#setOldPurchaseToken(java.lang.String)を使用する必要があります。BillingClient.queryPurchaseHistoryAsync()は非推奨になりました。今後のリリースで削除される予定です。デベロッパーは代わりに次の代替方法を使用する必要があります。- 承認済みと保留中の購入:
BillingClient.queryPurchasesAsync()を使用して、アクティブな購入を取得します。 - 消費された購入: デベロッパーは、消費された購入を独自のサーバーで追跡する必要があります。
- キャンセルされた購入: voided-purchases デベロッパー API を使用します。
- 詳しくは、購入履歴に対するクエリをご覧ください。
- 承認済みと保留中の購入:
デベロッパーが空の
offerTokenを指定すると、BillingFlowParams.ProductDetailsParams.setOfferToken()が例外をスローするようになりました。minSdkVersionを 21 に、targetSdkVersionを 34 に更新しました。
Google Play Billing Library 6.2.1 リリース(2024-04-16)
Google Play Billing Library と Kotlin 拡張機能のバージョン 6.2.1 がリリースされました。
変更の概要
- ダイアログの完了時に特定のケースで
AlternativeBillingOnlyInformationDialogListenerが呼び出されない可能性があるBillingClient.showAlternativeBillingOnlyInformationDialog()のバグを修正しました。
Google Play Billing Library 6.2.0 リリース(2024 年 3 月 6 日)
Google Play Billing Library と Kotlin 拡張機能のバージョン 6.2.0 がリリースされました。
変更の概要
- 外部提案をサポートする API を追加
- 外部オファーを提供できるように
BillingClient.Builder.enableExternalOffer()を追加しました。 - 外部オファー機能の提供の可否を確認する
BillingClient.isExternalOfferAvailableAsync()を追加しました。 - アプリの外部にユーザーを誘導する前に、ユーザーに情報ダイアログを表示する
BillingClient.showExternalOfferInformationDialog()を追加しました。 - 外部オファーを通じて行われた取引を報告するために必要なペイロードを作成する
BillingClient.createExternalOfferReportingDetailsAsync()を追加しました。
- 外部オファーを提供できるように
Google Play Billing Library 6.1.0 リリース(2023-11-14)
Google Play Billing Library と Kotlin 拡張機能のバージョン 6.1.0 がリリースされました。
変更の概要
- 「代替の課金システムのみ(ユーザー選択型ではない)」をサポートする API を追加しました
- 「代替の課金システムのみ」を提供する機能を有効にする
BillingClient.Builder.enableAlternativeBillingOnly()を追加しました。 - 「代替の課金システムのみ」の利用可否を確認する
BillingClient.isAlternativeBillingOnlyAvailableAsync()を追加しました。 - 「代替の課金システムのみ」が使用されている場合にユーザーに通知する情報ダイアログを表示する
BillingClient.showAlternativeBillingOnlyInformationDialog()を追加しました。 - 「代替の課金システムのみ」を通じて行われた取引を報告するために必要なペイロードを作成する
BillingClient.createAlternativeBillingOnlyReportingDetailsAsync()を追加しました。
- 「代替の課金システムのみ」を提供する機能を有効にする
- ユーザー選択型決済の API を更新しました
- 非推奨となった AlternativeBillingListener に代わる
UserChoiceBillingListenerを追加しました。 - 非推奨となった
AlternativeChoiceDetailsに代わるUserChoiceDetailsを追加しました。 - 非推奨となった
BillingClient.Builder.enableAlternativeBilling()に代わるBillingClient.Builder.enableUserChoiceBilling()を追加しました。
- 非推奨となった AlternativeBillingListener に代わる
- Google Play の国を取得する
BillingClient.getBillingConfigAsync()を追加しました。
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 がリリースされました。
変更の概要
- 韓国のユーザー向けにモバイル / タブレットでの代替の課金システムのフローをサポートするクラスを追加しました。
- 起点となったサブスクリプションの外部取引 ID を指定する
BillingFlowParams.SubscriptionUpdateParams.Builder.setOriginalExternalTransactionId()メソッドを追加しました。 - 韓国のユーザーが代替の課金オプションを選択できる
BillingClient.Builder.enableAlternativeBilling()メソッドを追加しました。
Google Play Billing Library 5.1 リリース(2022-10-31)
Google Play Billing Library と Kotlin 拡張機能のバージョン 5.1.0 がリリースされました。
このバージョンには、以下の変更が含まれています。
変更の概要
- 特典 ID を取得するための
ProductDetails.SubscriptionOfferDetails.getOfferId()メソッドを追加しました。 - 基本プラン ID を取得するための
ProductDetails.SubscriptionOfferDetails.getBasePlanId()メソッドを追加しました。 targetSdkVersionを 31 に更新しました。
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 がリリースされました。
このバージョンには、以下の変更が含まれています。
変更の概要
- 定期購入の支払い不承認の処理に役立つ
BillingClient.showInAppMessages()を追加しました。定期購入の支払い不承認の処理にアプリ内メッセージングを使用する方法について詳しくは、支払い不承認の処理に関する説明をご覧ください。
Google Play Billing Library 4.0 リリース(2021-05-18)
Google Play Billing Library と Kotlin 拡張機能のバージョン 4.0.0 がリリースされました。
変更の概要
今後のリリースで削除される予定の
BillingClient.queryPurchases()の代わりとして、BillingClient.queryPurchasesAsync()を追加しました。定期購入の新しい交換モードである
IMMEDIATE_AND_CHARGE_FULL_PRICEを追加しました。Play Billing Library の接続状態を取得する
BillingClient.getConnectionState()メソッドを追加しました。Javadoc と実装を更新して、メソッドを呼び出せるスレッドと、投稿されるスレッドの結果を示すようにしました。
定期購入の更新を開始する新しい方法として、
BillingFlowParams.Builder.setSubscriptionUpdateParams()を追加しました。これは、削除されたBillingFlowParams#getReplaceSkusProrationMode、BillingFlowParams#getOldSkuPurchaseToken、BillingFlowParams#getOldSku、BillingFlowParams.Builder#setReplaceSkusProrationMode、BillingFlowParams.Builder#setOldSkuに代わるものです。Purchase.getQuantity()とPurchaseHistoryRecord.getQuantity()を追加しました。Purchase#getSkus()とPurchaseHistoryRecord#getSkus()を追加しました。これらは、削除されたPurchase#getSkuとPurchaseHistoryRecord#getSkuに代わるものです。BillingFlowParams#getSku、BillingFlowParams#getSkuDetails、BillingFlowParams#getSkuTypeを削除しました。
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 in-app purchase API を使用しているゲーム デベロッパーはアップグレードすることで、Google Play Billing Library 2 のすべての機能を利用できるようになります。また、今後の Google Play Billing Library 最新版へのアップグレードも簡単になります。
詳しくは、Unity で Google Play 請求サービスを使用するをご覧ください。
変更の概要
- Google Play Billing Library(Java)
AcknowledgePurchaseParamsのsetDeveloperPayload()メソッドとgetDeveloperPayload()メソッドのサポートが終了しました。ConsumeParamsのsetDeveloperPayload()メソッドとgetDeveloperPayload()メソッドのサポートが終了しました。BillingFlowParamsのsetAccountId()の名前がsetObfuscatedAccountId()に変更されました。また、フィールドの文字数の制限(64 文字)と、個人を特定できる情報(PII)の設定を禁止する制限がドキュメントに記載されました。setAccountId()のサポートは終了しました。今後のライブラリ バージョンで削除される予定です。BillingFlowParamsに、setObfuscatedAccountId()と同じように機能するsetObfuscatedProfileId()が追加されました。詳しくは、デベロッパー ペイロードのアップデートと代替機能をご覧ください。PurchaseにgetAccountIdentifiers()メソッドが追加されました。このメソッドは、BillingFlowParamsに設定された、難読化されたアカウント識別子を返します。- 特典 SKU のサポート終了の一環として、
BillingClientのloadRewardedSku()メソッドのサポートが終了しました。サポート終了に関する詳細については、Google Play Console ヘルプセンターをご覧ください。
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 つの新しいメソッドがあります。
getOriginalPriceAmountMicros()- 割引前の SKU のフォーマットされていない元の価格を返します。
getOriginalPrice()- 追加の通貨形式で元の価格を返します。
保留中の取引
Google Play Billing Library のバージョン 2.0 では、エンタイトルメントを付与する前に追加のアクションを必須とする購入をサポートする必要があります。たとえば、ユーザーは実店舗でアプリ内アイテムを現金で購入するよう選択したとします。その場合は、アプリ外部で取引が完了することになります。このシナリオでは、ユーザーが取引を完了した後にのみエンタイトルメントを付与する必要があります。
保留中の購入を有効にするには、アプリの初期化の一環として enablePendingPurchases() を呼び出します。
Purchase.getPurchaseState() を使用して、購入ステータスが PURCHASED か PENDING かを確認します。ステータスが PURCHASED の場合にのみエンタイトルメントを付与するようにしてください。Purchase ステータスが更新されているかどうかを確認する手順は次のとおりです。
- アプリの起動時に
BillingClient.queryPurchases()を呼び出して、ユーザーに関連付けられている未消費アイテムのリストを取得します。 - 返された
PurchaseオブジェクトごとにPurchase.getPurchaseState()を呼び出します。 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 ロケールを使用し、エンドユーザーには表示されません。
バグの修正
SkuDetails.getIntroductoryPriceAmountMicros()がStringではなくlongを返すようになりました。
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 ソフトウェア開発キットのライセンス契約のもとに提供されます。
launchPriceChangeConfirmationFlowAPI が追加されました。これにより、定期購入価格に対する保留中の変更を確認するようユーザーに促します。- ユーザーの定期購入をアップグレードまたはダウングレードする場合に、新しい比例配分モード
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)
バグの修正
- PURCHASES_UPDATED バンドルに応答コードがない
- デバイスが回転中に発生する ProxyBillingActivity と PurchasesUpdatedListener の問題を修正
デベロッパー プレビュー 1 リリース(2017-06-12、発表)
デベロッパーによるプレビューが開始されました。目的は請求関連処理の開発プロセスを簡素化することで、これによりデベロッパーはアプリケーション アーキテクチャやナビゲーション構造といった Android アプリ固有のロジックの実装に専念できます。
このライブラリには、Android アプリと Google Play Billing API を統合する際に便利なクラスと機能がいくつか含まれています。また、このライブラリは Android インターフェース定義言語(AIDL)サービス上に抽象化レイヤを提供するため、デベロッパーはアプリと Google Play Billing API 間のインターフェースを簡単に定義できます。