アプリ内課金のテスト

Google Play Developer Console には、アプリ内課金の実装テストをサポートするツールが複数あります。

  • テスト購入とは、ライセンス テスト ユーザーが、実際にアカウントに対して課金されることなくアプリ内アイテムを購入できる仕組みです。
  • 開発初期のテストでは、Google Play から静的な課金レスポンスが返されます。

アプリ内課金をテストするには、Google Play でアルファ版またはベータ版チャンネルにアプリを公開する必要があります。

アルファ版またはベータ版チャンネルにアプリを公開して数時間後には、テスターがアプリを使えるようになります。 テスト端末上の APK のバージョン コードが、Google Play 上のアルファ版またはベータ版チャンネルに現在アップロードされているバージョンと一致する必要があります。

重要: アプリ内アイテムやアプリ内購入をアルファ版またはベータ版チャンネル内のアプリでテストするには、テスターはアプリのアルファ版またはベータ版テストにオプトインする必要があります。 テスターはテスト用オプトイン URL で、テスターになること、およびオプトインにリンクすることについて説明を受けます。

Android 1.6 以降を搭載したハードウェア端末であればテスト可能ですが、Google Play アプリの最新バージョンがインストールされている必要があります。Android 向けアプリの開発に使う端末の設定方法に関する一般情報は、ハードウェア端末の使用をご覧ください。

アプリ内購入をテストする

アプリ内課金の実装ができたら、次の 2 つの方法でアプリ内 SKU の購入をテストできます。

  • テスト購入は、特定のライセンス テスト ユーザーが課金を伴わずにアプリ内アイテムを購入できる方法です。テスト購入はアルファ版、ベータ版リリースに対してのみ可能です。
  • 本購入は、通常のユーザーが支払いプロセスを経て、実際の課金を伴ってアプリ内アイテムを購入する方法です。

どちらのケースでも、購入ユーザーを管理するには、Google Play のアルファ版およびベータ版リリースチャンネルにアプリを公開する必要があります。

このようなアプローチでテストや確認をする方法については、次のセクションで詳しく説明します。

テスト購入(アプリ内課金サンドボックス)

テスト購入では、開発中または発売準備期間に、大規模なアプリ内課金の実装テストを安全かつ手軽に実施できます。 認証済みのユーザー アカウントを使用すると、実際の課金を伴うことなく Google Play 上でアプリ内アイテムの購入が可能です。

テスト用のアクセスが許可されると、ユーザーは課金無しに購入を行うことができます。 テスト購入には orderId フィールドがないため、ユーザー アカウントへの実際の課金は行われません。

注: 定期購入のテストは、その商品の定期購入期間にかかわらず、毎日繰り返されます。

テスト購入を設定する

テスト購入の設定は簡単です。どのユーザー アカウントもテスト アカウントとして使用でき、テスト アカウントを使用するユーザーなら誰でも、使用可能なあらゆる払い方法でテスト購入できます(実際に課金は発生しません)。

まず、テスターに購入してもらうアプリ内アイテムをアップロードし、公開します。 アプリ内アイテムのアップロードと公開は、Developer Console 内でできます。APK 自体の公開前に、アプリ内アイテムのアップロードと公開ができる点に注意してください。

次に、認証済みユーザー用のライセンス テスト アカウントを作成します。Developer Console で、[Settings] > [Account details] を選択、その後 License Testing セクションで、[Gmail accounts with testing access] フィールドにアドレスを追加してください。 詳細については、テスト購入を設定するをご覧ください。

ユーザーをライセンス テスト アカウントに追加して変更を保存すると、15 分以内にユーザーはアプリ内アイテムのテスト購入を開始できるようになります。

重要: アルファ版またはベータ版チャンネルにアプリを公開した後、テスターはテスト購入をするために、提示されたオプトイン URL でアプリのアルファ版またはベータ版テストにオプトインする必要があります。

注: ライセンス テスト アカウントは、ユーザーの Android 端末上に存在する必要があります。 端末に複数のアカウントがある場合には、アプリをダウンロードしたアカウントで購入することになります。 どのアカウントでもアプリをダウンロードしていない場合は、最初のアカウントで購入します。 ユーザーは購入ダイアログを展開すると、購入に使うアカウントを確認できます。

注: テスト購入には orderId フィールドがありません。 テスト購入をトラックするには、代わりに purchaseToken フィールドを使用してください。

テスト購入とデベロッパー アカウント

認証済みのライセンス テスト アカウントは、特定の APK やパッケージ名ではなく、Google Play 内のデベロッパー アカウントに紐づけられます。 テスト アカウントであると認識されたアカウントでは、あらゆるアプリ内アイテムを課金無しで購入できます。

購入フロー詳細

テスト購入の間、ユーザーはアプリ内で実際の商品販売、購入、一連の実施フローをテストできます。 購入時に、アプリ内アイテムは実際の販売価格がついた通常のアイテムとして表示されますが、 Google Play では購入ダイアログの中央にテスト購入だと分かる案内を表示し、簡単に識別できるようにしています。

完了したテスト購入のキャンセル

Google Play ではユーザーごとに完了したテスト購入を蓄積していますが、支払いのプロセスには渡していません。

また、テスト購入を手動でキャンセルして、テストを続けたいケースもあるかもしれません。 その場合、Play ストアでアプリのページを開きます。キャンセルしたいテスト購入が定期購入の場合、Purchases.subscriptions API の cancel() メソッドを使用することもできます。

重要: Purchases.subscriptions API の refund()revoke() メソッドは、テスト購入に対応していません。

実際のトランザクションでテストする

アプリ内課金に対応したアプリの発売準備をする際は、Google Play のアルファ版またはベータ版のリリース オプションを活用して、全ユーザーにアプリを配信する前に、実装の検証と読み込みテストを実施することができます。

アルファ版またはベータ版のテストグループを利用すると、実際のユーザー(デベロッパーが選択)による Google Play からのアプリ インストール、アプリ内アイテムのテストが可能になります。 本購入をすると、Google Play での通常の支払い方法で実際にユーザーのアカウントに課金されます。 アルファ版またはベータ版の配信グループにテスト用ライセンス アカウントを含めた場合、そのアカウントのユーザーはテスト購入のみ可能です。

重要: アルファ版またはベータ版チャンネルにアプリを公開した後、テスターはテスト購入をするために、提示されたオプトイン URL でアプリのアルファ版またはベータ版テストにオプトインする必要があります。

静的なレスポンスでテストする

まずは Google Play からの静的なレスポンスを利用して、アプリ内課金をテストすることをお勧めします。 これにより、自身のアプリが Google Play からの主要なレスポンスを適切に処理し、署名を正しく照合できたかどうかを確認できます。 この確認はアプリ公開前でも可能です。

静的なレスポンスを使った実装をテストするには、予約済みの商品 ID を持つ特別なアイテムを使い、アプリ内課金をリクエストします。 予約済み商品 ID は、それぞれ Google Play から固有の静的なレスポンスを返します。 予約済み商品 ID を使ったアプリ内課金リクエストの場合、送金処理は発生しません。 また、この場合は支払い形式の指定はできません。 図 1 では android.test.purchased という商品 ID の予約済みアイテムにおける精算フローを表しています。

図 1.特別予約アイテム android.test.purchased の購入フロー

アプリの商品リストに、予約済み商品を含める必要はありません。Google Play では、すでに予約済み商品 ID を認識しています。 また、予約済み商品 ID を使った静的なレスポンス テストを実施するために Developer Console にアプリをアップロードする必要もありません。 アプリを端末にインストールし、端末にログインして予約済み商品 ID を使って課金をリクエストするだけです。

注: 以前は、公開前のドラフト版をアップロードしてアプリをテストできました。 この機能は今後サポートされません。 ただし、Google Play ストアにアップロードする前に、静的なレスポンスを利用してアプリをテストできます。 詳細については、ドラフト版アプリのサポート終了をご覧ください。

アプリ内課金の静的なレスポンスをテストするために、次の 4 つの予約済み商品 ID を利用できます。

  • android.test.purchased

    この商品 ID を使ってアプリ内課金をリクエストすると、Google Play はアイテムの購入ができたと見なしてレスポンスを返します。 レスポンスには JSON 文字列が含まれており、疑似購入情報(例:疑似購入 ID)が書き込まれています。 JSON 文字列が署名され、レスポンスに署名が含まれるケースもあるため、こうしたレスポンスを使って署名認証の実装をテストできます。

  • android.test.canceled

    この商品 ID を使ってアプリ内課金をリクエストすると、Google Play は購入がキャンセルされたと見なしてレスポンスを返します。 クレジットカードが無効、または課金前にデベロッパーがユーザーからの購入をキャンセルしたなど、注文プロセス内でエラーが発生したケースに相当します。

  • android.test.refunded

    この商品 ID を使ってアプリ内課金をリクエストすると、Google Play は購入後に返金されたと見なしてレスポンスを返します。 Google Play のアプリ内課金サービスでは返金処理を開始できません。 デベロッパー(販売者)から開始する必要があります。Google ペイメントの販売者アカウントで自身が返金処理をリクエストすると、Google Play からアプリに返金メッセージが送信されます。 この状況が発生するのは、Google ペイメントからの返金通知を Google Play が受領した場合のみです。 返金に関する詳細については、IN_APP_NOTIFY メッセージの処理アプリ内課金の価格設定をご覧ください。

  • android.test.item_unavailable

    この商品 ID を使ってアプリ内課金をリクエストすると、Google Play は購入済みアイテムがアプリの商品リストに含まれていないと見なしてレスポンスを返します。

予約済みアイテムから、署名入りの静的なレスポンスが返されることもあります。これを利用すると、アプリ内での署名の照合確認をテストできます。 アプリを実行しているユーザーがデベロッパーまたはテストアカウントを持ってる場合は、予約済みアイテムは署名入りのレスポンスのみを返します。

予約済み商品 ID を使ってアプリ内課金をリクエストするには、通常の REQUEST_PURCHASE リクエストを作成し、アプリの商品リストにある実際の商品 ID を使う代わりに、予約済み商品 ID を使います。

予約済み商品 ID を使ったアプリのテストは、次のステップで行います。

  1. Android 搭載端末にアプリをインストールします。

    エミュレータではアプリ内課金のテストを実施できません。アプリ内課金をテストする端末上にアプリをインストールする必要があります。

    端末にアプリをインストールする方法については、実機で実行するをご覧ください。

  2. デベロッパー アカウントで端末にログインします。

    予約済み商品 ID のみを使用してテストを実施する場合、テスト アカウントを使う必要はありません。

  3. サポート対象バージョンの Google Play アプリ、または MyApps アプリが端末で実行されていることを確認します。

    Android 3.0 搭載の端末であれば、アプリ内課金にはバージョン 5.0.12 以降の MyApps アプリが必要です。 その他のバージョンの場合、アプリ内課金にはバージョン 2.3.4 以降の Google Play アプリが必要です。 Google Play アプリのバージョンを確認するには、Google Play をアップデートするをご覧ください。

  4. アプリを実行し、予約済み商品 ID を購入します。

注: 予約済み商品 ID を使ってアプリ内課金をリクエストすると、通常の本番環境の Google Play システムがオーバーライドされます。 予約済み商品 ID に対してアプリ内課金のリクエストを送信すると、サービス品質が本番環境と異なる場合があります。

テスト購入を設定する

静的なレスポンス テストを終えて、アプリ内で署名認証が機能することを確認したら、実際にアプリ内購入を行ってアプリ内課金の実装をテストします。 実際のアプリ内購入のテストを行うことで、ユーザーが実際に行う Google Play での本購入やアプリ内での精算フローなど、アプリ内課金プロセスの全体をテストできます。

注: アルファ版配信チャンネルに公開すると、アプリの包括的なテストを実施できます。 これにより、Google Play ストアにアプリを公開できるようになりますが、利用できるのは自身で指定したテスターに限られます。

実際のアプリ内購入プロセスでアプリ内課金の実装テストをするには、Google Play Developer Console 上で少なくとも 1 件テストアカウントを登録する必要があります。 Google ペイメントではデベロッパー自身によるアイテム購入を認めていないため、アプリ内購入プロセス全体をテストする目的でデベロッパー アカウントを使用できません。 これまでにテスト アカウントを設定したことがない場合は、テスト アカウントを設定するをご覧ください。

アイテムが公開されている場合のみ、商品リストのアイテムをテスト アカウントで購入できます。

アプリ内課金の実装を本購入のプロセスでテストするステップは次のとおりです。

  1. Developer Console でアルファ版配信チャンネルにアプリをアップロードします。

    注: 以前は、公開前のドラフト版をアップロードしてアプリをテストできました。 この機能は現在サポートされていないため、代わりにアルファまたはベータの配信チャンネルに公開する必要があります。 詳細については、ドラフト版アプリのサポート終了をご覧ください。

  2. アプリの商品リストにアイテムを追加します。

    アイテムを公開していることを確認してください(アプリ自体は非公開のままにすることができます)。方法については、商品リストを作成するをご覧ください。

  3. Android 搭載端末にアプリをインストールします。

    エミュレータではアプリ内課金のテストを実施できません。アプリ内課金をテストする端末上にアプリをインストールする必要があります。

    端末にアプリをインストールする方法については、実機で実行するをご覧ください。

  4. サポート対象バージョンの Google Play アプリ、または MyApps アプリが端末で実行されていることを確認します。

    Android 3.0 搭載の端末であれば、アプリ内課金にはバージョン 5.0.12 以降の MyApps アプリが必要です。 その他のバージョンの場合、アプリ内課金にはバージョン 2.3.4 以降の Google Play アプリが必要です。 Google Play アプリのバージョンを確認するには、Google Play をアップデートするをご覧ください。

  5. アプリでアプリ内購入を行います。

注: 端末上でプライマリ アカウントを変更するには、必ずファクトリー リセットを行い、最初にプライマリアカウントでログインする必要があります。

アプリ内課金の実装テストが終了すれば、Google Play でアプリを公開する準備は完了です。 準備署名Google Play への公開については、通常のステップで行ってください。

ドラフト版アプリのサポート終了

以前は、公開前のドラフト版をアップロードしてアプリをテストできました。この機能は今後サポートされません。 代わりに以下の 2 通りの方法で、Google Play ストア上でリリース前のアプリの機能をテストできます。

  • アルファ版またはベータ版配信チャンネルにアプリを公開できます。 これにより、自身が「ホワイトリスト」に登録したテスターのみ、Google Play ストアでアプリを入手できるようになります。
  • 一部のケースでは、未公開のアプリで Google Play の機能をテストできます。 たとえば、静的なレスポンスや特別な予約済み商品 ID(「purchased」や「refunded」などの特定の結果を常に返す)を使って、未公開アプリのアプリ内課金のサポートをテストできます。