このガイドでは、対象アプリで「代替の課金システムのみ」(ユーザー選択型ではない)を提供するように API を統合する方法について説明します。資格要件や対象地域など、これらのプログラムの詳細については、代替の課金システムについてをご覧ください。
Play Billing Library のセットアップ
Android アプリに Play Billing Library の依存関係を追加します。代替の課金システムの API を使用するには、バージョン 6.1 以降を使用する必要があります。
Google Play に接続する
統合プロセスの最初のステップは、Google Play 請求サービスの統合ガイドに記載のステップと同じですが、BillingClient の初期化の際にいくつかの違いがあります。
enableAlternativeBillingOnly
という新しいメソッドを呼び出して、アプリが「代替の課金システムのみ」を使用していることを示す必要があります。
次の例は、これらの変更を行った BillingClient
の初期化方法を示しています。
Kotlin
var billingClient = BillingClient.newBuilder(context)
.enableAlternativeBillingOnly()
.build()
Java
private BillingClient billingClient = BillingClient.newBuilder(context)
.enableAlternativeBillingOnly()
.build();
BillingClient
を初期化したら、統合ガイドの説明のとおりに Google Play への接続を確立する必要があります。
利用可否の確認
アプリは isAlternativeBillingOnlyAvailableAsync
を呼び出して、「代替の課金システムのみ」が利用可能であることを確認する必要があります。
「代替の課金システムのみ」が利用可能な場合、この API は BillingResponseCode.OK を返します。他のレスポンス コードに対応する方法については、レスポンス処理をご覧ください。
Kotlin
billingClient.isAlternativeBillingOnlyAvailableAsync(object:
AlternativeBillingOnlyAvailabilityListener {
override fun onAlternativeBillingOnlyAvailabilityResponse(
billingResult: BillingResult) {
if (billingResult.responseCode != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors,
// handling alternative billing only being unavailable, etc.
return
}
// Alternative billing only is available. Continue with steps in
// the guide.
}
});
Java
billingClient.isAlternativeBillingOnlyAvailable(
new AlternativeBillingOnlyAvailabilityListener() {
@Override
public void onAlternativeBillingOnlyAvailabilityResponse(
BillingResult billingResult) {
if (billingResult.getResponseCode() != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors,
// handling alternative billing only being unavailable,
// etc.
return;
}
// Alternative billing only is available. Continue with steps in
// the guide.
}
});
ユーザー向け情報ダイアログ
「代替の課金システムのみ」を統合するには、対象アプリで情報画面を表示して、Google Play では課金が管理されないことをユーザーが把握できるようにする必要があります。情報画面は、代替の課金システムのフローを開始する前に、毎回 showAlternativeBillingOnlyInformationDialog
API を呼び出してユーザーに表示しなければなりません。ユーザーがすでにダイアログを確認している場合、通常はこの API を使用してもダイアログが再度表示されることはありません。ユーザーがデバイスのキャッシュを削除した場合などに、ダイアログが再度表示されることがあります。
Kotlin
// An activity reference from which the alternative billing only information
// dialog will be launched.
val activity : Activity = ...;
val listener : AlternativeBillingOnlyInformationDialogListener =
AlternativeBillingOnlyInformationDialogListener {
override fun onAlternativeBillingOnlyInformationDialogResponse(
billingResult: BillingResult) {
// check billingResult
}
}
val billingResult =
billingClient.showAlternativeBillingOnlyInformationDialog(activity,
listener)
Java
// An activity reference from which the alternative billing only information
// dialog will be launched.
Activity activity = ...;
AlternativeBillingOnlyInformationDialogListener listener =
new AlternativeBillingOnlyInformationDialogListener() {
@Override
public void onAlternativeBillingOnlyInformationDialogResponse(
BillingResult billingResult) {
// check billingResult
}
};
BillingResult billingResult =
billingClient.showAlternativeBillingOnlyInformationDialog(activity,
listener);
このメソッドが BillingResponseCode.OK を返した場合、アプリは取引を続行できます。BillingResponseCode.USER_CANCELED の場合は、アプリは showAlternativeBillingOnlyInformationDialog を呼び出して、再度ユーザーにダイアログを表示する必要があります。他のレスポンス コードについては、レスポンス処理のセクションをご覧ください。
Google Play に取引を報告する
代替の課金システムを通じて行われた取引はすべて、24 時間以内にバックエンドから Google Play Developer API を呼び出して Google Play に報告する必要があります。その際、以下の API を使用して取得した externalTransactionToken
を提供します。1 回だけの購入、新しい定期購入、既存の定期購入のアップグレードまたはダウングレードごとに、新しい externalTransactionToken を生成する必要があります。externalTransactionToken
の取得後に取引を報告する方法については、バックエンド統合ガイドをご覧ください。
Kotlin
billingClient.createAlternativeBillingOnlyReportingDetailsAsync(object:
AlternativeBillingOnlyReportingDetailsListener {
override fun onAlternativeBillingOnlyTokenResponse(
billingResult: BillingResult,
alternativeBillingOnlyReportingDetails:
AlternativeBillingOnlyReportingDetails?) {
if (billingResult.responseCode != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors.
return
}
val externalTransactionToken =
alternativeBillingOnlyReportingDetails?
.externalTransactionToken
// Send transaction token to backend and report to Google Play.
}
});
Java
billingClient.createAlternativeBillingOnlyReportingDetailsAsync(
new AlternativeBillingOnlyReportingDetailsListener() {
@Override
public void onAlternativeBillingOnlyTokenResponse(
BillingResult billingResult,
@Nullable AlternativeBillingOnlyReportingDetails
alternativeBillingOnlyReportingDetails) {
if (billingResult.getResponseCode() != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors.
return;
}
String transactionToken =
alternativeBillingOnlyReportingDetails
.getExternalTransactionToken();
// Send transaction token to backend and report to Google Play.
}
});
レスポンス処理
上記のメソッド isAlternativeBillingOnlyAvailableAsync(),
showAlternativeBillingOnlyInformationDialog()
および createAlternativeBillingOnlyReportingDetailsAsync()
は、エラーの場合、BillingResponseCode.OK 以外のレスポンスを返すことがあります。推奨されるエラー処理は次のとおりです。
ERROR
: これは内部エラーです。取引を進めないでください。 呼び出して再試行showAlternativeBillingOnlyInformationDialog()
: 情報を表示します。 次回ユーザーがこのダイアログを表示したときに 購入しようとします。FEATURE_NOT_SUPPORTED
: 代替の課金システムの API が、現在のデバイスの Play ストアでサポートされていません。取引を進めないでください。USER_CANCELED
: 取引を進めないでください。発信 再度showAlternativeBillingOnlyInformationDialog()
をクリックすると、 次回ユーザーが入力を試行したときに表示される 購入しますBILLING_UNAVAILABLE
: 取引が「代替の課金システムのみ」の対象ではないため、このプログラムでは進めることができません。このエラーは、ユーザーがこのプログラムの対象国に居住していないか、アカウントがプログラムに正常に登録されていない場合に発生します。後者の場合は、Google Play Console で登録ステータスを確認してください。DEVELOPER_ERROR
: リクエストでエラーが発生しています。先に進む前に、デバッグ メッセージを使用してエラーを特定および修正してください。NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE
: 再試行が必要な一時的なエラーです。SERVICE_DISCONNECTED
の場合は、Google Play との接続を再確立してから再試行してください。
代替の課金システムをテストする
ライセンス テスターは、代替の課金システムの統合のテストを行う必要があります。マイページ ライセンス テスターが開始した取引については請求されません できます。詳しくは、アプリ ライセンスを使用したアプリ内課金のテストをご覧ください。 ライセンス テスターの設定についてご覧ください。
次のステップ
アプリ内統合が完了すると、バックエンドを統合する準備が整います。