BlogKLabは、多くのスマートフォン向けゲームを開発・提供しています。スマートフォン向けゲームの開発と運用は、Webソーシャルゲームと比べて格段に複雑で、またコンシューマゲーム開発とも異なったノウハウが求められる領域もあります。このブログでは、KLabのゲーム開発・運用の中で培われた様々な技術や挑戦とそのノウハウについて、広く紹介していきます。code)とは今年(2016年)の1月くらいから、Androidではプロモーションコードの機能が使えるようになりました。プロモーションコードとは利用者に対して無料でアプリそのものやアプリ内アイテム、機能のアンロック等を提供できるもので、開発者が作成したコードは利用規約の下で自由に配布が可能なため、強力なプロモーション効果が期待できます。Promotionsの翻訳をご紹介します。2016/5/17時点のものです。和訳)プロモーションコードを利用することで、開発者は配布数限定の無料コンテンツ・無料の追加機能をユーザに提供できるようになります。Storeアプリでコードを入力して無料でアイテムを入手することができます。プロモーションコードを様々な場面で活用することで、開発者はユーザとのふれあいの機会をさらに広げることができます。例として次のような利用法が考えられます。ゲームアプリであれば、とあるイベントへ招待された出席者向けの特典として、専用の特別アイテム(例としてキャラクターや装飾アイテムなど)を作ることができます。会場でプロモーションコードがプリントされた紙のカードを出席者に配布すれば、コードを入力したユーザだけにその特別アイテムをアンロックできます。プロモーションコードを地元の商店や企業で配布すれば、アプリの試用を促すことができます。これにより潜在的なユーザの獲得につなげることができます。「友人と家族」用の専用コードを開発者の社内で配り、友人たちにシェアするといったことができます。SKU)と関連づけられます。プロダクトからプロモーションコードを作成できます。Storeで販売しないようにすれば、プロモーションコードでのみ入手可能なアイテムとすることができます。Storeやアプリ内でプロモーションコードを入力すると、ユーザには通常通り決済した時と同じようにアイテムが付与されます。利用中であれば、プロモーションコード対応を追加するのは簡単です。Consoleで登録済みの商品ひとつに紐付きます。入手したプロモーションコードを商品引き替えに利用するには、次の二つの方法があります。説明されているとおり、アプリ内の通常の購入フローの中でプロモーションコードを入力します。これはアプリから見れば通常の購入と全く同様で、ユーザにとっては代金の代わりにプロモーションコードを利用することだけが異なることになります。Storeアプリ内からコードを入力します。Storeはそのユーザに対して対象アプリを起動するよう通知する(最新バージョンのアプリがインストール済みの場合)か、または対象アプリのダウンロード、もしくはアップデートを促します。とあるゲームでプロモーションコードを使ってライフ追加のアイテムを提供していたとします。ベティはそのアイテムのプロモーションコードを二つ持っており、プロモーションコードを一つ利用してからゲームを起動します。するとアイテムが消費されてベティの持つキャラクターには追加ライフが付与された状態になります。ここで初めて、もうひとつのプロモーションコードを利用してさらにライフを追加できるようになります。メソッドを呼び出す必要があります。このメソッドが返すものは現在未消費の購入商品全てであり、これにはプロモーションコードで引き替えられた購入内容も含まれます。することで、アクティビティが生成されるタイミングだけでなく復帰時にもコールバックが呼ばれるようになります。呼び出せば、ユーザが購入したもの、およびアプリが起動していない間にプロモーションコードで引き替えた内容も含めて全ての内容を取得することが保証できます。呼び出されば、アプリが購入に関する情報を再度見つけられるようになることです。上記に加えて、アプリ内でユーザがプロモーションコードを入力できるようにしておく必要があります。記載)に対応済みであれば、自動的にアプリ内でのプロモーションコードの引き替えにも対応できていることになります。メソッドは購入が完了したかどうかを示すインテントを受け取ります。呼び出す必要はあります。プロモーションコードでのアイテム引き替えには成功したものの、それを利用する前にアプリが強制終了したとします。呼び出すため、購入に関する情報を取得できることになります。Storeアプリ内でプロモーションコードが利用された場合についても想定しておかなくてはなりません。インテントのリスナを登録しておけば、ユーザがコードを利用したことはアプリから即座に検知することができます。Storeはユーザがプロモーションコードを利用するとこのインテントを送信します。処理するBroadcastReceiverオブジェクトを動的に生成して登録するようにしてください。メソッド内でレシーバーの登録を行います。メソッドを実行します。呼び出し、ユーザがどの購入を行ったかを精査する必要があります。メソッドでは、アプリ起動中でない時のシステム負荷を下げるため次のようにBroadcastReceiverを削除するようにしてください。unRegisterReceiver(myPromoReceiver);注意:アプリのマニフェストでのBroadcastReceiverの登録は行わないでください。マニフェストでreceiverを宣言してしまうと、アプリが起動していない状態でユーザが何らかの購入を行った際、システムはインテント処理のためにそのアプリを起動してしまうことになります。この動作は必要でないばかりか、むしろユーザを苛立たせることになりかねません。呼び出して、アプリ非起動時に作成された購入情報を取得するようにすると良いでしょう。アプリ内プロモーションのテストアプリ内プロモーションに対応した際は、次のユースケースをテストするようにして下さい。メソッドを起動します。購入結果が正しく処理されることを確認してください。Store内で利用された場合には、いくつか想定しておくべきケースがあります。それぞれのパターンについて検証を行うようにしてください。Storeはそのユーザに対してアプリのインストールを促します。対象アプリがインストールされていない場合のテストとして、次の手順をデバイスから実施するようにしてください。Store上でプロモーションコードを入力する。Storeはユーザに対して対象アプリのインストールを促すユーザが対象アプリをインストールして起動する。Storeはそのユーザに対象アプリに切り替わることを通知します。デバイスに対象アプリがインストール済みだが起動状態ではない場合のテストとして、次の手順を実施してください。Store上でプロモーションコードを入力する。Storeはユーザに対して対象アプリに切り替わることを通知するユーザが対象アプリを起動する。インテントで通知を行います。次の手順でテストを行ってください。ユーザが対象アプリを起動する。インテントを送信する。呼び出してインテントに応答する必要がある。ここでは上記のメソッドの呼び出し、およびユーザが入力したプロモーションコードにより作成された購入情報が正しく検出できていることを確認するユーザがタスクの切り替えを行い対象アプリに戻る。Promotions'の翻訳は以上ですが、最後に実際にプロモーションコードを利用する際のポイントを簡単に記載しておきます。Billingが利用できる地域全てで利用できるわけではありません。2016年5月現在ではアメリカや日本など16カ国となっており、プロモーション対象ユーザがこれらの地域に含まれているか確認しておく必要があります。いくつか注意すべき点があることが分かっています。Payloadで行っているような場合に影響するでしょう。Billing処理を改修して提供する場合にはこの点に注意が必要です。2.についてですが、購入情報の中には利用されたプロモーションコードの情報は含まれていない(と思われる)ため、コード毎の使用記録等の追跡は不可能ということになりそうです。Consoleでも少なくとも現時点では確認ができないようです。上記の資料ではWeb版のプレイストアではプロモーションコードに未対応の旨が記載されていますが、現在Web版TOPからプロモコードを入力するUIへの導線が存在する(TOP左下の「コードを利用」のリンク)ようで、ヘルプにもその記述があります。プロモーションコード利用に関するベストプラクティスは今後もこちらでご案内する予定です。Androidのプロモーションコードといった新しい機能にもいち早く対応し、ゲーム開発を最適化することを目指しています。