itemstore BLOG

アプリ内課金(IAP)の実装・運用にかかる時間を大幅に削減してアプリの収益性を高めるサービス「itemstore(アイテムストア)」が、アプリ内課金に関する様々な話題や企画をお届けする公式ブログです。

Unity IAP と itemstore での課金機能の実装(後編)


課金アイテムの売上でゲームを買いたいアイです!
前回は Unity IAP を実装してみて Unity Editor 上で動くところまでできました。着々と野望実現に近づいてきている気がします!

今回は Unity IAP の実装の続きで、アイテムの獲得と消費する機能の実装と、端末でのテスト購入をしてみようと思います。

ショップ画面の UI を作ってみました

課金アイテムを購入できるショップ画面をこんな感じにしてみました。

f:id:cayto_pr:20180928161150p:plain:w300

カタログには以下の ID のアイテムを登録済みで、それぞれの購入ボタンに設定してあります。(Google Play Console / App Store Connect に登録したアイテム ID も各アイテムに設定済みです)
kireinastone.1
kireinastone.4
kireinastone.12
kireinastone.25
kireinastone.42
kireinastone.86

購入時の処理を実装しよう

前回、Unity Editor で動作確認をした時は購入ボタンをクリックしたら FakeStore が表示されていました。今回はアイテム購入が成功したら(FakeStore の Buy を押したら)アイテムの所持数を増やすようにしたいと思います!

GameObject を作成して以下を記述したスクリプトファイルをアタッチします。

アイテムの所持数
private int itemCount; // アイテムの所持数

void Start()
{
    // アイテムの所持数を読み込む
    itemCount = PlayerPrefs.GetInt("kireinastone", 0);
}

PlayerPrefs を使用してアイテムの所持数を保存する前提で作ります。

購入成功時
public void OnPurchaseComplete(Product product)
{
    // 購入成功時の処理

    // 購入したアイテムの ID から個数を取得して所持数を増やす
    string[] item = product.definition.id.Split('.');
    if(item[0].Equals("kireinastone"))
    {
        int num = 0;
        if(int.TryParse(item[1], out num))
        {
            itemCount += num;
            PlayerPrefs.SetInt("kireinastone", itemCount);
            PlayerPrefs.Save();
        }
    }
}

購入が成功したらアイテムの所持数を増やしてあげます。アイテムの ID を「kireinastone.x」のように登録しておくことで、上記コードで ID から個数を取得することができます。

購入失敗時
public void OnPurchaseFaild(Product product, PurchaseFailureReason reason)
{
    // 購入失敗時の処理
    Debug.Log("アイテム購入失敗: " + product.definition.id + " 理由: " + reason);
}

購入が失敗した場合やキャンセルした場合の処理はこのように実装します。

購入ボタンに設定する

f:id:cayto_pr:20180928161147p:plain:w340

IAP Button の On Purchase Complete と On Purchase Failed にそれぞれ設定しましょう!

「アイテムを購入したら所持数が増える」という動作はこれだけで実装完了です!

アイテムを使用する

次に、アイテムを使用する動作を実装します!

f:id:cayto_pr:20180928161145p:plain:w340

こんな感じに、アイテムを使用するボタンと、所持数の表示、ショップ画面を開くボタンを設置しました。

public void UseItem(int num)
{
	if(itemCount >= num)
	{
		itemCount -= num;
		PlayerPrefs.SetInt("kireinastone", itemCount);
		PlayerPrefs.Save();
	}
	else
	{
		Debug.Log("アイテムが足りません");
	}
}

アイテムを使用するボタンに設定します。

実機でテスト購入をしてみよう

課金アイテムを実装したらきちんと購入ができるかの確認が必要です。プロジェクトをビルドして、実機端末にアプリをインストールしてテスト購入をしましょう。

f:id:cayto_pr:20180928165218g:plain:w350

やったー! 無事に Sandbox 購入(iOS)ができたよ♪

レシート検証とサーバーでの管理について

アイテムの購入だけならこれで OK だけど、実際にはユーザーサポートの面からアイテムや購入情報をサーバー側で管理することが一般的だそうです。また、不正購入を防ぐために「レシート検証」というものをしないといけないみたい!
今回の実装練習ではここまでです。レシート検証やサーバー側でのアイテム管理については興味があったら調べてみてね!

itemstore を使うと、サーバー側のことを考えなくていい

ちなみに itemstore を使うと管理画面からユーザーのアイテム所持数の確認やアイテム付与等のサポートもできちゃうからお手軽だよ♪ しかも itemstore のサーバー側でレシート検証をしてくれるから、アプリ内課金を導入する際の面倒な作業が不要になってとても楽になるね!
他にも、アイテムを購入した人や未購入の人に内容の違うプッシュ通知を送ったり、機種変更等で端末を変える際に引き継ぎ機能を使えば購入したアイテムデータも別端末に簡単に引き継ぐことができたり、アプリ開発に役立つ機能が満載! これらのお役立ち機能をうまく使えば開発にかかる時間を短縮できて、アプリの内容に注力できるのが嬉しいね♪


今回の勉強では、アプリ内課金の実装方法についてを学ぶことができました。
ゲームアプリを作るためにまだまだたくさんの勉強が必要だけど、ゲームを買うお小遣いを稼ぐために頑張りまーす!