Android
Unity
アプリ内課金
ゲーム制作

Unityでの課金アプリ開発におけるテスト・デバッグの知識

この記事では

  • ローカルで行えるアイテム所持数のデバッグ方法
  • 課金処理を行う Android端末 と PC を接続したデバッグ方法
  • テスト購入時の注意点

といった、課金アプリ開発のテスト・デバッグで役立つ情報を紹介します。

itemstore BLOG で連載している
【いますぐ始めるアプリ内課金】第6回:Unityとitemstoreでアプリ内課金を実現する
の補足になりますので、併せてお読みください。

上記のブログ記事にて、教材となるプロジェクトファイルのダウンロードURLを案内していますので、興味のある方はダウンロードしてみてください。

Unity上でのアイテム所持数関係のデバッグ方法

Unity エディタ上でアイテム所持数を変化させたり、コンティニューを行いたい場合は次の 2 つの設定を変更してみてください。

アイテム所持数を変更して画面に表示させたい場合

Awakeシーンの ItemstoreClient の CntKakinItem の値を変更してください。
設定した数値がゲーム画面に表示できます。

アイテム所持数に関係なく、無制限にコンティニューをしたい場合

StageCommon シーンの StageCommon ゲームオブジェクトの FlgDebugContinueAlways にチェックをいれてください。
所持数が 0 個でもコンティニューができるようになります。

Android端末とPCを接続したデバッグ方法

もしもAndroid端末で試したときにうまく動作しなくても、Android端末と Unity を連動させたデバッグが簡単にできます。

ちょっとした確認なら、画面にメッセージを表示するだけでも良いかもしれませんが、 Visual Studio などでアタッチすれば、ブレークポイントで変数を確認したり、ステップ実行でより簡単にバグを修正できるでしょう。

Android端末でのデバッグ準備

スクリプトデバッギングに使う Android 端末は開発者向けオプションを有効にしておく必要があります。

機種によって異なるかもしれませんが、[設定]→[端末情報]→[ビルド情報]を表示し、そのビルド情報の項目を7回ほどタップすることで、開発者向けオプションが有効になります。

そうすると、設定のメニューの中に開発者向けオプションが表示されるので、USB デバッグも有効にしておきましょう。


USB 接続

はじめに、 USB でAndroid端末と PC を接続します。

Android Composite ADB Interface ドライバが正常にインストールされていれば、 Unity が Build & Run 時に Android 端末を認識して、apk をインストールしてくれます。

まだドライバがない場合は、Get the Google USB Driver | Android Studio や端末のメーカーサイトなどから取得しインストールしましょう。

ドライバはデバイスマネージャーから確認することができます。

USB 接続をすると表示されるAndroid 端末の USB 接続の設定で、写真やファイルは選ばないで、下の例では USB ドライブを選択してください。


USB 接続をしている間、USBデバッグの許可や、 Unity からのアプリのインストールの許可を求めるダイアログがたびたび表示されますので、見逃さないようにしましょう。

adb コマンドによるデバッグ用の接続設定

Android端末と PC を接続したデバッグは、 USB を接続していない状態で行えます。
そのために、事前に adb コマンドでデバッグ用 TCP/IP 接続の設定をスマホに行います。
具体的には、USB で接続中の PC からコマンドラインで adb コマンドを実行します。
詳しくは Android デバイスに MonoDevelop デバッガをアタッチする - Unity マニュアル をご覧ください。

adb コマンドの使用方法

コマンドプロンプトを開き、adb コマンドのある Android SDK をインストールしたフォルダの /platform-tools/ まで移動します。
Android SDK のパスは Unity に設定してあれば、メニューの「Edit > Preferences」の External Tools タブの Android SDK の部分で確認できます。

基本的には、次の2つのコマンドが成功すれば Unity デバッガーのアタッチができ、PC 上の Visual Studio などの IDE と連動してデバッグができます。

PC 上でのadb サーバの開始

最初に PC 上でポート番号を指定して adb を開始させます。

adb tcpip 5555

このコマンドで、次のようなエラーメッセージが表示されることがあります。

error: device unauthorized.
This adb server's $ADB_VENDOR_KEYS is not set
Try 'adb kill-server' if that seems wrong.
Otherwise check for a confirmation dialog on your device.

このときは指示に従い、次のコマンドを入力しましょう。

adb kill-server

再度 adb tcpip 5555 を入力すると、次のようなメッセージの後で制御が帰ってこなくなることがあります。

* daemon not running; starting now at tcp:5037
* daemon started successfully
restarting in TCP mode port: 5555

このときは Ctrl-C などでコマンドを強制終了すると制御が帰ってきます。
メッセージをみると tcp を 5555 番ではなく 5037 番で開始したようです。
そこで、今度はポート番号を変えて実行します。

adb tcpip 5037

成功すると次のようなメッセージが表示されて制御が戻ります。
このとき、端末でメッセージが出ていたら許可するようにしましょう。

* daemon not running; starting now at tcp:5037
* daemon started successfully
restarting in TCP mode port: 5037

Android端末への接続

次に、 USB 接続をしている端末に接続します。

adb connect 192.168.1.2

このとき、ポート番号を指定しないと 5555 番になります。
もしも違うポートを使用している場合は、エラーメッセージが表示されます。

unable to connect to 192.168.1.2:5555: cannot connect to 192.168.1.2:5555: 対象
のコンピューターによって拒否されたため、接続できませんでした。 (10061)

さきほどの 5037 番のように違うポートを使用している場合は、次のように入力します。

adb connect 192.168.1.2:5037

成功すると次のメッセージが表示されます。

connected to 192.168.1.3:5037

現在接続しているデバイスの一覧を見たければ、次のコマンドを入力します。

adb devices

そうすると、現在接続しているデバイスの一覧が次のように表示されます。

List of devices attached
192.168.1.2:5037 device
YYD7N15530001718 device

これで、 Visual Studio などからAndroid端末で実行中のアプリにアタッチしてデバッグすることができるようになりました。
ただし、通常のリリース版ではデバッグできません。

続いて、 Unity でデバッグ版をビルドして、 USB 経由でインストールしてみましょう。

Android 端末に Development Build 版をインストール

keystore のパスワード設定をすませたら、 [Development Build] と [Script Debugging] にチェックをいれてから [Build & Run] ボタンをクリックします。

Android端末が USB デバッグで正常に接続されている場合は、 Unity の [Build & Run] の工程で探して、その端末にあった apk をインストールしてくれます。
インストール直前、Android端末の画面に許可を求めるダイアログが表示されるので、許可するようにしましょう。

実行中のアプリにアタッチしてデバッグする

Android端末へのアプリのインストールが済んだら、 Visual Studio などでアタッチを行います。
Visual Studio の場合は、メニュー[デバッグ]→[Unityデバッガーのアタッチ]を選びます。

そうすると、[Unity インスタンスの選択]ダイアログが表示されます。
Android端末の Development Build 版のアプリを起動すると、 Android Player という新しい項目が自動的に表示されるので、選んで [OK] ボタンをクリックします。

ブレークポイントを事前に張っておくと、その処理でAndroid端末の動作も一時停止し、デバッグを行うことができます。

テスト購入ができないときの対処法

テスト購入やベータテストについては、 Android itemstore課金機能に必要な設定|チュートリアル に詳しい説明が掲載されていますのでご覧ください。

ここでは、ストアでテスト購入する直前に GooglePlay に購入を拒否された問題とその対処法について説明したいと思います。 

itemstore のストア画面までは簡単に表示できたのですが、いざ購入しようとすると Google の次のようなメッセージが表示され、購入を拒否されました。

これについて GooglePlayConsole のチャットで相談すると、アプリをリリースしている Google アカウントでは購入はできないという回答が得られました。

私は、 GooglePlayConsole で使っている Google アカウントを Android 端末でも使用していました。
当然、テストでも同じ Google アカウントでインストールし、アプリ内課金の購入をしようとしたのですが、それが問題だったようです。

対処法は簡単で、もうひとつ別のテスト用の Google アカウントを作って、追加することでした。

もしもアプリがクローズドベータだった場合、アプリをテストできる人は登録した Google アカウントのみになります。
その場合は、新しい Google アカウントをテスターのリストに追加します。

次に、 Android 端末にテスト用の新しい Google アカウントを追加し選択します。
GooglePlay や Chrome などのアカウントも全て新しいテスト用のアカウントに切り替えてください。

その状態で、アプリのテスト用のオプトインURLにアクセスし、「テスターになる」ボタンを押して、テスト プログラムを開始します。
テスターをやめる場合は、同じオプトイン URL にアクセスし、テストプログラムの終了を選びます。

アプリをリリースした Google アカウント以外のアカウントで、テスターになった状態でアプリをインストールし、 itemstore のストア画面を利用すると、きちんとテスト購入をすることができました。