UnityでAndroid In App Billing Pluginを使ってアプリ内課金をためす方法

prime31Asset Store – Android In App Billing PluginがIABを使うときによさそうなので、このAssetの使い方をメモしていきます。

Google Play Developer Consoleにアプリを登録する

アプリをいったん仮に登録しないと、アイテム画面に行けないのでまずはこちらをアップします。

こちらからgmailアカウントをもとに登録していきます。
すべてのアプリ – Google Play Developer Console
$25かかってしまうのですが、これをしないとアプリ内課金の仕組みが使えません。

間違えやすいのですが、Google Developers Consoleではないよ。

ここでUnityからapkファイルを作成して、アップする必要があるのですが、公開用の署名が付いていないのとアップ時にエラーになってしまいます。
Unityではこの鍵を作るところもサポートしてくれています。

BuildSettings → AndroidのPlayerSettingsを開く。
Publushing SettingsでCreate New Keystoreにチェックを入れる。
BrowseKeystoreでKeystoreの保存場所を選択する。
Passwordを入力する。
AliasプルダウンからCreateNewKeyを選択する。
Aliasには仮にtestと入力しました。
Passwordを入力する。
CreateKeyで作成する。
作成したあとに、Aliasで今作成したAliasを選択する。

via 【Unity】keystoreの生成 Android – Litのプログラムとかアプリ開発とか。

では、Buildしてapkファイルを作成し、Consoleにアップしましょう!
ちなみに、製品版にアップしてもただちに公開されるわけではないので大丈夫です。

他にベータ版・アルファ版とアップ先がありますが、ここでは製品版にアップしてみました。

Google Play Developer Consoleに課金用のアイテムを登録する

アプリ内アイテムで新しいアイテムを追加をクリックすると、
以下から選ぶようにいわれます。

  1. 管理対象の商品
  2. 管理対象外の商品
  3. 定期購入

この違いは、以下のサイトから引用させていただきます。

1.はアカウント単位で1回購入できるアイテム(電子書籍とか)。appleでいうNon-consumable
2.は同一アカウントで何回も購入できるアイテム(回復系アイテムとか)。appleでいうConsumable
3.これはappleのAuto-renewable subscriptionsかな?

via: エンジニアブログはじめました: アンドロイドでアプリ内課金(v3)のテスト環境

今回は魔法石のように何度でも買えるようにするために、管理対象外の商品を選択します。

アイテムを作成したら、プルダウンから有効にしておきます。
これを忘れると、いっこうにアイテム課金ができません。(ぼくはこれで結構ハマった!)

UnityでAndroid In App Billing Pluginを使ってみる

Android In App Billing Pluginをimportするとdemoがあるので、そのシーンに移動する。

以下、[Unity][Android] (In App Billing ver3版) prime31 Android IAB Pluginを使用したアプリ内課金の実装 : West Hill 開発メモこちらの記事を参考に、必要そうな処理も追記しています。

GoogleIABEventListener.cs

そもそもHierarchyに追加したgameObjectが破棄されることがあるのか調査できていないのですが、これを追加。

void Start ()
{
    // このオブジェクトが破棄されないようにする
    DontDestroyOnLoad (gameObject);
}

IABUIManager.cs

ConsoleのサービスとAPIから、ライセンスキーをinitの中に記述します。
アプリケーションが終了した場合にunbindされるようにしておきます。

void OnApplicationQuit() {
    Debug.Log("OnApplicationQuit");
    GoogleIAB.unbindService();
}

以下のボタンのところを追加したアイテムIDに変更しておきます。
注意:消費系のアイテムの場合、GoogleIAB.purchaseProductしたあとにGoogleIAB.consumeProductをしないと再度買うことができません。

if( GUILayout.Button( "Purchase Test Product" ) )
{
    GoogleIAB.purchaseProduct( "magic_stone" );
}


if( GUILayout.Button( "Consume Test Purchase" ) )
{
    GoogleIAB.consumeProduct( "magic_stone" );
}

ただ、IAB側の問題なのか調査できていないのですが、このボタンを順番に押した時に、GoogleIAB.consumeProductが失敗する場合がありました。
ログを見ながら押していったのですが、GoogleIAB.consumeProductするのが速すぎたのかな。

なので、GoogleIABEventListener.csの購入が成功したイベントハンドラでGoogleIAB.consumeProductするようにしてみました。
実際にはこうゆうコードでやることになるのかな。

// 購入が正常に終わると呼ばれる
void purchaseSucceededEvent( GooglePurchase purchase )
{
    Debug.Log( "purchaseSucceededEvent: " + purchase );
    GoogleIAB.consumeProduct(purchase.productId);
}

引数のGooglePurchaseに購入レシート情報が入っています。こちらを見て、何を買ったのかをアプリケーション・サーバーに通知するのかな。

テスト課金って書いてあってもなんか怖いねw

参考リンク

AndroidBilling – 開発資料
Google Play In-App Billing テスト方法 | Androidアプリ開発の紆余曲折
android/アプリ内課金 – 初心者エンジニアの簡易メモ
エンジニアブログはじめました: アンドロイドでアプリ内課金(v3)のテスト環境

見れていないのですが、
In-App Purchasing Unity Plugin for Android Tutorial – YouTube
こちらの動画も参考になるかも。
自前でやっているっぽいですが。

iPhone&Androidアプリ内課金プログラミング完全ガイド (Smart Mobile Developer)
佐藤 航陽 加藤 勝也 瀬戸 健二 日高 正博
翔泳社
売り上げランキング: 182,508

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>