アプリ内プロモーション

プロモーション コードは、限られたユーザーに無料でコンテンツや機能を提供できる機能です。 プロモーション コードを作成すると、サービス規約に則った配信ができます。 ユーザーはアプリ、または Google Play ストア アプリでプロモーション コードを入力し、アイテムを無料で受け取ります。 プロモーション コードを使うと、さまざまな形でユーザーに働きかけることができます。

  • ゲームの場合、イベントに参加したプレーヤーだけが入手できるキャラクターやデコレーションなど特別なアイテムを設けるケースが考えられます。 デベロッパーはイベントでプロモーション コード付きのカードを配信し、ユーザーはそのコードを入力してアイテムをロックを解除します。
  • また、デベロッパーは潜在的なユーザーにアプリを試用してもらえるよう、ローカル ビジネスでプロモーション コードを配信することもできます。
  • デベロッパーから従業員に「友人や家族用」コード を贈り、友人と共有してもらうことも可能です。

それぞれのプロモーション コードは特定の 商品 ID (別名 SKU)に関連づけられています。 プロモーション コードは既存のアプリ内アイテムに対して作成できます。 SKU を Play ストアで使用せずに、SKU のプロモーション コードを入力した場合に限りアイテムを入手可能にすることもできます。 ユーザーは Play ストアまたはアプリ内でプロモーション コードを入力すると、全額を支払った場合とまったく同じアイテムを入手できます。 アプリ内購入に対応するため、すでにアプリで In-app Billing Version 3 を使用している場合は、簡単にプロモーション コードのサポートを追加できます。

プロモーション コードを作成、精算する

Google Play Developer Console でプロモーション コードを作成します。 各プロモーション コードは、Developer Console に登録された商品一つ一つに関連づけられています。

ユーザーがプロモーション コードを精算する方法は、次の 2 通りあります。

  • 通常の購入フローの中でプロモーション コードを入力します。アプリ内課金を実装するをご覧ください。 アプリにおいては、お金の代わりにプロモーション コードで支払をする点を除いては、通常の購入と変わりはありません。
  • Google Play ストア アプリでコードを精算できます。ユーザーがコードを入力すると、Play ストアの確認画面が表示され、アプリを開く(最新バージョンがインストールされている場合)、ダウンロード、アップグレードのどの操作を行うかをユーザーに確認します。 Google では現在、Google Play ウェブストアでのプロモーション コードの精算をサポートしていません。

アプリでプロモーション コードをサポートする

プロモーション コードをサポートするには、アプリの起動時または再開時に getPurchases() メソッドを呼び出す必要があります。 このメソッドは現在の未消費購入情報を一括して返し、その中にはユーザーがプロモーション コードを精算して購入したものも含まれます。 コールバックはアクティビティの作成時と一時停止の解除時に呼び出されるされるため、一番単純なアプローチは getPurchases() をアクティビティの onResume() メソッドで呼び出す方法です。 起動時と再開時に getPurchases() を呼び出すことで、アプリが実行されていない間にユーザーが行ったすべての購入と精算を確実に調べることができます。 さらに、アプリの実行中にユーザーが購入し、何らかの理由でアプリがそれを見逃した場合でも、アクティビティが次に再開されたときに getPurchases() を呼び出せば、その購入を認識できます。

ユーザがアプリ内でプロモーション コードを精算できるようにしておく必要があります。 アプリがアプリ内購入のワークフローに対応している場合(アプリ内課金リクエストを行うに記載)、自動的にアプリ内でのプロモーション コードの精算もサポートします。 アプリ内購入 UI を起動した際には、ユーザーにはプロモーション コードで支払うオプションが表示されます。 アクティビティの onActivityResult() メソッドは、購入が完了したかどうかをアプリに伝えるレスポンス インテントを受け取ります。 ただし、購入と消費のワークフローが完了されていない場合には、アプリは起動時と再開時にひき続き getPurchases() を呼び出す必要があります。 たとえば、ユーザーが正常にプロモーションコードを精算した後、アイテムを消費する前にアプリがクラッシュした場合でも、次の起動時にアプリが getPurchases() を呼び出せば購入情報を受け取ることができます。

また、ユーザーがアプリの実行中に Play ストアでプロモーションコードを精算するケースもサポートする必要があります。 PURCHASES_UPDATED インテントに対するリスナーを登録をすると、ユーザーがコードを精算した際に、即座にアプリで検知できるようになります。 Play ストアは、ユーザーがプロモーションコードを精算するたびに必ずこのインテントを発行します。

PURCHASES_UPDATED インテントをリッスンするには、BroadcastReceiver オブジェクトを動的に作成し、それを com.android.vending.billing.PURCHASES_UPDATED を受信するように登録します。 アクティビティの onResume() メソッドに次のようなコードを追加してレシーバーを登録します。

IntentFilter promoFilter =
    new IntentFilter("com.android.vending.billing.PURCHASES_UPDATED");
registerReceiver(myPromoReceiver, promoFilter);

ユーザーが購入すると、システムがブロードキャストのレシーバー onReceive() メソッドを呼び出します。 ユーザーの購入内容を確認するには、このメソッドで getPurchases() を呼び出す必要があります。

アプリが実行中でないときのオーバーヘッドを減らすには、アクティビティの onPause() メソッドでブロードキャスト レシーバーの登録を解除する必要があります。

unRegisterReceiver(myPromoReceiver);

注: このブロードキャスト レシーバーはアプリ マニフェストには登録しないでください。 マニフェストにレシーバーを宣言すると、アプリが実行中でないときにユーザーが購入した場合、システムがインテントを処理しようとしてアプリを起動してしまいます。 この動作は不要なだけでなく、ユーザーを困惑させる可能性もあります。 ユーザーがアプリを実行していない間に何か購入したかどうかを調べるには、ユーザーがアプリを起動した際に getPurchases() を呼び出します。

アプリ内プロモーションをテストする

自身のアプリでアプリ内プロモーションをサポートしている場合、次のケースをテストします。

ユーザーがアプリ内でプロモーション コードを精算

アプリ内の購入フローに沿ってユーザーがプロモーションコードを精算した場合は、アプリ内課金をリクエストするに記載のとおり、システムがアクティビティの onActivityResult() メソッドを呼び出して購入を処理します。 ユーザーが代金、またはプロモーションコードで支払い、onActivityResult() が購入を正しく処理したことを確認してください。

Google Play ストアでユーザーがプロモーションコードを精算

Play ストアでプロモーションコードを精算した後のワークフローは、何通りか考えられます。 そのワークフローを一つずつ確認しましょう。

アプリがインストールされていない場合

ユーザーが、端末にインストールされていないアプリのプロモーションコードを精算しようとした場合、Play ストアはユーザーにアプリをインストールするよう要求します(アプリはインストールされているが、最新版では無い場合は、アプリのアップデートを要求します)。 アプリがインストールされていない端末で、次のシーケンスをテストします。

  1. ユーザーが Play ストアでアプリのプロモーションコードを精算します。Play ストアがユーザーにアプリをインストールするよう要求します。
  2. ユーザーがアプリをインストールし、起動します。起動時にアプリが getPurchases() を呼び出し、ユーザーによるプロモーションコードでの購入を正しく検知することを確認します。

アプリはインストール済みだが、実行中ではない場合

自身のアプリがインストールされた端末でプロモーションコードを精算する場合、Play ストアはユーザーにそのアプリに切り替えるよう要求します。 アプリはインストール済みだが実行中ではない端末で、次のシーケンスをテストします。

  1. ユーザーが Play ストアでアプリのプロモーションコードを精算します。Play ストアがユーザーにアプリを切り替えるよう要求します。
  2. ユーザーがそのアプリを起動します。起動時に、アプリが getPurchases() を呼び出し、ユーザーによるプロモーションコードでの購入を正しく検知することを確認します。

アプリはインストール済みで実行中の場合

アプリが実行中の端末でプロモーションコードを精算する場合、Play ストアは PURCHASES_UPDATED インテントでアプリに通知します。 次のシーケンスをテストします。

  1. ユーザーがアプリを起動します。PURCHASES_UPDATED インテントを受信できるよう、アプリが正しく登録されているかを確認します。
  2. ユーザーは Play ストア アプリを起動し、プロモーションコードを精算します。Play ストアが PURCHASES_UPDATED インテントを発行します。 アプリの BroadcastReceiver.onReceive() コールバックが呼び出され、インテントを処理します。
  3. getPurchases() を呼び出して、onReceive() メソッドでインテントに応答する必要があります。 自身のアプリがこのメソッドを呼び出し、ユーザーによるプロモーションコードでの購入を正しく検知することを確認してください。
  4. ユーザーはアプリに戻ります。ユーザーがアイテムを購入したことを確認します。