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

Androidアプリにアプリ内課金を実装するためのポイント

この記事では、itemstore を用いてAndroidアプリにアプリ内課金を実装するためのポイントを詳しく説明します。

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

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

GooglePlayConsole の設定

itemstore は GooglePlayConsole と連携してアプリ内課金を実現しています。
ここではアプリ内課金に必要な GooglePlayConsole の設定について説明します。

itemstore と GooglePlay のアイテムの関係について

itemstore のアイテム管理ではアイテムに販売個数やアイコンを設定できます。
これで、同じ課金アイテムでも単品販売やお得なセット販売などが簡単に実現できます。

ただし、価格は GooglePlayConsole のアプリ内サービスで作成するアイテムの中で設定します。

この GooglePlayConsole のアイテムの ID と itemestore のアイテムの ID を同じにすることで、 itemstore のストアを経由したアイテムの購入が可能になります。

教材で使っているアイテム ID は、1個売りが kakinitemx1 で、5個売りが kakinitemx5 です。

ID には使用できない文字もあるので、最初に GooglePlayConsole でアイテムを作成して、その ID を itemstore のアイテムに割り当てると良いでしょう。

itemstore の Android ストア情報の設定

パッケージ名には Unity プロジェクトで設定している Package Name を設定します。
Unity にインポートした itemstore SDK の Plugins/Android/AndroidManifest.xml 内の [パッケージ名] も 同じ Package Name に変更します。

参照:Unity itemstore課金機能|チュートリアル

Package Name は Unity のメニュー[File]→[Build&Settings]→[PlayerSettings] で開かれた Inspector の Android タブの Other Settings で確認できます。

ライセンスキーは、 GooglePlayConsole の「サービスと API」の「このアプリのライセンスキー」をコピーして貼り付けてください。

メディアキーは、ストア作成時に自動で発行されますので、 Unity のシーンに配置する AppC ゲームオブジェクトの AppC コンポーネントの Android Media Key に設定してください。

itemstore SDK を使ったプログラムの説明

itemstore SDK を使って、課金アイテムの購入や所持数の更新などを行う方法を説明します。
その前段階の itemstore Unity 用パッケージのインポートや AppC の配置・設定は、Unityを使ったAndroid向け課金ゲームアプリの開発環境を準備する – Qiita をご覧ください。

Inspector タブの4つの赤枠のうち、上の2つはすでに準備の段階で設定してあります。

今回の教材では、他に2つの独自の設定を AppC ゲームオブジェクトに行っています。

1つ目には、Callback Target Object に ItemstoreClient ゲームオブジェクトを割り当てています。
これは、 AppC からアプリ内課金のイベントを受け取り、ゲーム独自の処理をするためのゲームオブジェクトです。

2つ目の独自の設定は、AppCDontDestroy というスクリプトを AppC のコンポーネントに追加していることです。
これによりシーンが切り替わっても AppC ゲームオブジェクトは消されずに存在することができ、複数のシーンをまたいでスムーズにアプリ内課金の処理を行うことができます。
ItemstoreClient ゲームオブジェクトも同様に DontDestoryOnLoad を適用しています。

ItemstoreClient コンポーネントとゲームプログラムとの関係

次に、AppC コンポーネントと連携し、ゲーム内でアプリ内課金の処理を行う独自コンポーネント ItemstoreClient の主な機能についてイベント処理と課金処理にわけて説明します。

イベント処理

ItemstoreClient クラスでは、 AppC から次のイベントで呼び出してもらい常に課金アイテムの所持数を最新にしています。

FinishedSetupAppC

itemstore 機能の初期化イベント。
このタイミングで、itemstore のサーバから課金アイテムの所持数を取得します。

ClosedItemstoreView

ユーザが課金アイテムを購入した可能性があるので、 itemstore のサーバから課金アイテムの所持数を取得します。

画面を管理するコンポーネントは ItemstoreClient の各イベントに登録することで、所持数が変化したタイミングで画面に表示している課金アイテムの所持数などを更新しています。

課金アイテムの所持数に関する処理

ItemstoreClient クラスでは、課金アイテムの所持数の取得・変更を簡単に行う関数を提供しています。

UseKakinItem()

課金アイテムを1個消費させ、 itemstore のサーバに反映する。

UpdateKakinItemCount()

itemstore のサーバと通信し、現在の課金アイテムの所持数を取得しローカルに保持する。

GetKakinItemCount()

ローカルに保持した課金アイテムの所持数を取得する。

課金アイテムの消費は、コンティニューを行ったときに呼び出されます。
所持数の更新は、コンティニュー時のほかに、前述の FinishedSetupAppC, ClosedItemstoreView イベントの直後に行われます。

具体的な使用例

タイトル画面のシーケンスの説明

教材では、AppC が提供するイベントや関数によって、次のように所持数を更新しています。
タイトル画面では、起動直後のほかに、ストア画面が閉じたときに登録したイベント関数を呼び出してもらって所持数を更新しています。

ステージ画面のシーケンスの説明

ステージ画面のコンティニュー処理では、所持数によってコンティニューできるかどうかを変更しています。
ストアで購入した結果はゲーム内の所持数にすぐに反映され、コンティニューが可能になります。
コンティニューをしたときは所持数が 1 減少します。

アプリのビルドとインストール

このブロック崩しを Android 端末で動作させるには apk を作成して、 Android 端末にインストールする必要があります。

Android端末へのインストール方法

Unity で作成したアプリを Android 端末にインストールする方法は 2 つあります。

1 つ目は、 GooglePlay でアプリを公開して、 GooglePlay サイトからインストールする方法です。
アップロードする apk は Unity で Android を選択して Build すると作成できます。
ベータ版として公開すれば、アプリを知っている一部の人たちだけがプレイできるように設定することもでき、複数の人にアプリをテストしてもらうときに便利です。

2 つ目は、 USB ケーブルで PC と Android 端末を接続し、 Unity の [Build & Run] でビルドした apk を直接 Android 端末にインストールする方法です。
ローカルでちょっとした確認をしたい場合はこちらのほうが手軽にできます。
デバッグの設定をしてビルドをすれば Development Build 版をインストールすることができ、 Android 端末での動作を PC の Visual Studio などでデバッグすることもできます。

ビルド前に行う設定

教材ではメディアキーなどの一部の設定が行われていません。
Unity エディタ上で実行するだけならば問題ありませんが、 Android 向けにビルドする際は設定してください。

itemstore のメディアキーの設定

Awake シーンに配置されている AppC オブジェクトのコンポーネントの設定をします。
itemstore のストア情報で表示されているメディアキーを設定してください。
これが設定されていないと itemstore のサービスにアクセスできません。

CompanyName, ProductName の設定

Build Settings で Player Settings ボタンをクリックすると表示される情報も一部設定する必要があります。
CompanyName には出版元や開発者の名前を設定します。
ProductName にはアプリの名前を設定します。

PackageName やバージョンの設定

アプリのパッケージ名です。
さきほど設定した Company Name と Product Name で置き換えた名前などを設定します。

AndroidManifest.xml の変更

itemstore のプラグインの中にある Plugins/Android/AndroidManifest.xml の [パッケージ名]と書かれている数箇所を、 Unity の PlayerSettings でさきほど設定した Package Name に変更してください。

keystore の設定

Android 用の apk ファイルをビルドする際は keystore を作成して設定する必要があります。
keystore は個別に作る必要がありますので、教材には含まれていません。

ここではビルドをするために keystore の作成と設定の方法を説明します。

Unity で keystore を作る際は、 [Build Settings] の [Player Settings] ボタンをクリックし、 [Inspector] で [Publishing Settings] を表示します。

Create a new keystore にチェックをいれて、 Browse keystore ボタンをクリックします。
ファイル選択ダイアログが表示されるので、keystore の作成先を指定します。

作成する keystore のファイルを選択したら、 Key の Alias の選択肢の [Create a new key] を選択します。

作成する keystore の設定ダイアログが表示されるので、設定して [Create key] ボタンをクリックします。
Alias は Package Name と同じ文字列を設定し、任意の Password と同じ Confirm を入力します。
Validity は既定の 50 で変更していません。
First and Last Name と Organization にハンドルネームを設定しました。
あとは Country Code に JP を設定して完了です。

作成した keystore は、 [Use Existing keystore] にチェックをいれて [Browse keystore] ボタンをクリックして選択できます。

あとは、 Key の Alias に先ほど keystore に設定した Alias を選択して、2箇所にさきほど作成した Password を設定します。

これで、 apk ファイルをビルドすることができます。
パスワードの入力は、 Unity を起動するたびに行う必要があるので、注意しましょう。