アプリ内アイテムの検出と配信

このトピックでは、プレーヤーが Google Play アプリで Play ポイントを使用してアプリ内アイテムを購入した後で、そのアプリ内アイテムを検出して配信する方法について説明します。

ユーザーが Google Play アプリでアプリ内アイテムに Play ポイントを利用すると、ゲームですぐにアイテムが配信される必要があります。ユーザーが Play ポイントでアイテムを購入する方法は次のとおりです。

1. [Play Points] をクリックします。 2. アイテムを選択して [使う] タブをクリックします。 3.アイテムを受け取ります。
未定のスクリーンショット 未定のスクリーンショット 未定のスクリーンショット

この例では、アイテムを購入する間、ゲームは実行されていません。ゲームがデバイスにインストールされていない場合に、Play ポイントをアイテムに交換することもできます。そのため、ゲーム内ストア以外からのアプリ内アイテムの配信を処理するようにゲームを設計する必要があります。

開始する前に

アプリ内アイテムを検出して配信する前に、アイテムと Play Points のキャンペーンを作成する必要があります。

配信の要件

Play Points のキャンペーンを使用してゲームでアプリ内アイテムを配信する場合は、このセクションの要件を満たす必要があります。

配信のタイミング

プレーヤーが Play ポイントをアプリ内アイテムに交換した場合、プレーヤーにゲームの再起動を求めることなく、アイテムをすぐに配信する必要があります。チュートリアルの完了など、ゲーム コンテンツを事前に完了させる必要がある場合は、その直後にアイテムを配信する必要があります。

配信メッセージ

ユーザーがゲーム外でアプリ内アイテムを購入してゲームに戻った場合、そのアイテムがゲーム内に正常に付与されたことの確認を表示する必要があります。メッセージは、ポップアップ ダイアログかゲーム内メッセージの形式で表示する必要があります。ユーザーが追加の手順を行わずにアイテムを受け取れるようにしてください。

必要なメッセージ形式は次のとおりです。

  • アイテムを受け取ったという明確なメッセージ。

  • アイテム名を明示し、「Play ポイント」に言及して、ユーザーが受け取った他のコンテンツと区別できるようにします。

  • 類似のアイテムが複数の金額で存在する場合、アイテム名にアイテムの正しい金額を記載する必要があります。

  • ポップアップ ダイアログ、メッセージ、ゲーム内通知は、ユーザーが [続行] や [OK] などの確認をクリックするまで表示されている必要があります。このメッセージは、あくまでもゲーム内でアイテムを受け取ったことをユーザーに伝えるためのものです。キャンセル ボタンは設けないでください。確認ボタンがない場合、メッセージは、アイテムを受け取ったことをユーザーに知らせるよう、3 秒間以上表示してから消えるようにする必要があります。

メッセージの例を次に示します。

「アイテムを受け取りました。Play ポイントで宝石を 100 個獲得しました。続行」

ゲーム内通貨の残高の増加を示すアニメーションや視覚的な確認がユーザーに表示されます。アプリ内アイテムが永続アイテムまたは消費アイテムの場合、ユーザーをゲーム内で、そのアイテムがロック解除された場所または入手可能な場所に誘導する必要があります。

ゲーム外で受け取ったアイテムを検出する

ゲームが Google Play Billing Library を使用している場合は、ゲーム外で受け取ったアプリ内アイテムを検出するために、次のとおり変更を加えます。

  1. ゲームの onResume() コールバックで、queryPurchases() メソッドを呼び出してアイテムのリストを取得し、確認されていないものを特定できるようにします。

  2. サーバーを使用するゲームの場合は、Subscriptions and In-App Purchases API を使用してサーバーから購入を確認することを強くおすすめします。

  3. 未確認の所有アイテムがある場合は、消費アイテムであれば consumeAsync()、非消費アイテムであれば acknowledgePurchase() を使用して購入を確認します。

  4. ゲーム内の購入済みアイテムに利用権を付与します。

分割画面モードで受け取ったアイテムを検出する

ゲームがマルチ ウィンドウ モードに対応している場合は、Play ストア アプリとゲームを同時に実行している状態で、Play ポイントを利用してアイテムを購入する可能性があります。たとえば、次のスクリーンショットのような状況です。

ゲームの実行中にポイント利用ボタンが表示されているスクリーンショット。

Google Play Billing Library を使用してこのシナリオに対応する方法は次のとおりです。

  1. Google Play によって onPurchasesUpdated() メソッドが呼び出され、保留中の新しいアイテムがあるということがゲームに通知されます。

  2. サーバーを使用するゲームの場合は、Subscriptions and In-App Purchases API を使用してサーバーから購入を確認することを強くおすすめします。

  3. 消費アイテムの場合は consumeAsync()、非消費アイテムの場合は acknowledgePurchase() を使用して購入を確認します。

  4. ゲーム内の購入済みアイテムに利用権を付与します。

配信確認を表示する

Play ポイントを利用して交換アイテムを受け取ったユーザーは、アイテムがゲームに正しく配信され処理されたことを知らせるゲーム内メッセージや通知を期待します。配信確認の方法としては次のようなものが挙げられます。

  • ゲーム内ポップアップを表示する。

  • アプリ内メッセージ ボックスにメッセージを配信し、アプリ内メッセージ ボックスに新着メッセージがあることを明示する。

  • OS の通知メッセージを使用する。

デバイスにインストールされていない状態も含め、ゲームがどのような状態にあっても、プロモーション アイテムの受け取りは発生します。アイテムを受け取ったときのゲームの状態に関係なく、プロモーション アイテムを検出する必要があります。ただし、アイテムの受け取りをすぐにユーザーに通知しなくてもよい場合があります。次に例を示します。

  • ゲームのアクション中にメッセージを表示すると、ユーザーの気が散るおそれがあります。この場合は、アクションの終了後にユーザーに通知する必要があります。

  • カットシーンでメッセージを表示すると、ユーザーの気が散るおそれがあります。この場合は、カットシーンの終了後に通知する必要があります。

  • ゲームの冒頭のチュートリアルとユーザー設定パート。新規ユーザーに特典を通知するタイミングとしては、ゲームを開始した直後またはユーザーによる初期設定時をおすすめします。ただし、メインのゲーム シーケンスをプレイできる状態になるまで、ユーザーへの通知を遅らせてもかまいません。

アプリに複数のキャラクターやアカウントがある場合は、プロモーション アイテムを受け取るアカウントを選択するよう、ユーザーに求めることをおすすめします。

プロモーション アイテムについて通知するタイミングや方法を決定する際は、ユーザーに配慮してください。通知がすぐに届かないとユーザーが不信感を抱き、ゲームのプレイをやめたり、ユーザー サポートに問い合わせたり、ソーシャル メディアに不満を漏らしたりする可能性があります。

特定のゲームエンジンのアップデート

特定のゲームエンジンでの考慮事項は次のとおりです。

  • Unity で開発されたゲームの場合、使用している IAP 実装が Play Points のキャンペーンをサポート済みかどうかを確認することをおすすめします。

  • Cocos2d-x または Unreal Engine(C / C++)で開発されたゲームでは、ほとんどの場合、C / C++ コードから Java API を呼び出すための JNI コードを記述する必要があります。

サーバーサイドのベスト プラクティス

このセクションでは、Play Points のキャンペーンに関するサーバーサイドのベスト プラクティスについて説明します。

  • サーバーで Purchases.products: get を呼び出す場合、Play ポイント交換アイテムなどのアプリ内アイテムを productId 値に基づいて個別に処理する必要があるかどうかを検証します。

  • サーバーで Inappproducts: list を使用する場合、Play ポイント交換アイテムなどのアプリ内アイテムを productId 値によって分ける必要があるかどうかを検証します。

  • 次に示すベスト プラクティスを確認し、追加の変更が必要かどうかを検証します。

トラブルシューティング

このセクションでは、お客様から問い合わせを受ける可能性があるシナリオでの推奨事項について説明します。

複数のユーザー アカウント

ユーザーがデバイスで複数の Google アカウントを持っており、間違ったアカウントで Play ポイントを利用した場合、Google はアイテムを別のアカウントに転送できません。同様に、アプリは getPurchases() メソッドを呼び出してアイテムを転送することができません。このような場合は、カスタマー サポートで対応してアプリ内アイテムを手動でユーザーに提供することを検討してください。

アイテムの遅延または欠落

ポイント交換アイテムの遅延または欠落が発生している場合は、Google Play ヘルプ ドキュメントのアプリ内購入に関するトラブルシューティング ガイドをご覧ください。