課金で広告を非表示にする

今回も、Androidのみです。iOSでもほぼ変わりないけど、Xcodeビルドの時の対応が必要のようです。

えーっと。実装は恐ろしく簡単でした。

ただ、初めてのテストにどこにハマったのか思い返せないけどどハマりして4日も無駄にしましたね。

たまにあるよね。しょうもないことにハマって気づいたらどうでもよかったということ。・・・はー。思い出すだけで悲しいです。

参考にしたのは、こちら。

◆記事名:UnityでPurchase(課金)を実装する
◆サイトリンク:http://qiita.com/KotaroInc/items/b13426216c92518bb189

◆記事名:新しいUnityIAPを触ってみた。その①~ボタンを作ってみる~
◆サイトリンク:http://blog.livedoor.jp/nyangostar/archives/67154370.html

前提

・実機テストが可能であること
・GooglePlay β版(またはα版)を登録していること

まずはUnity側の実装

GooglePlayから対応する人もいたけど、これはベータテスト版をGooglePlayに完全登録してから云々やらねばいけないから修正が発生したとき恐ろしく面倒臭いので、Unity側の対応から始めます。

1.Unity IAPをImport

ほんの数年前までは課金組み込むのがすごく大変だったようです。これまた個人の好意で公開してもらったものを使いまわしたりしていたよう(調べた感じだと)。

とりあえずプロジェクトを開いて、左の「Services」から「In-App Purchasing」を「On」にします。初期状態は「OFF」です。

インストールしていいか?って聞かれるので「Enable」します。

お子様向けかい?って聞かれます。私は「親の端末で子供(13歳未満)がゲームすることがある」と考えてアプリを作成しました。「端末は親のもの」つまり、課金を押すのは、端末の持ち主である「親」であると。

という建前。

子供向けアプリだと相当審査が厳しいです。その代わり、審査を通ると、いろんな承認マークをもらえますけどね。

子供用アプリページの一覧にも乗れるんじゃなかったけな?

次に進みます。Unity IAPで対応できるのは、Amazon AppsとかGooglePlayとかiOSAppStoreとかとからしいので、とりあえず「Import」。

インストールしてもらいましょう。

すると、Pluginsに「Unity Purchasing」フォルダが出来上がります。これでUnity IAPが使用できる状態になりました。

2.課金ボタンを作成する

まず、この課金は「GooglePlay」用であるとしておきましょう。

「window」の「Unity IAP」から「Android」の「Target Google Play」を選択。

そして、課金クリック用ボタンを作成します。方法は2つ。

普通のボタンに[Add Component]でIAP Buttonをつけてやるのか、最初から[IAP Button]作成するか。・・・差はないけどねー。ボタンじゃなくてテキストにクリックトーグル作ってやるのありですし。

わかりやすく、「Create IAP Button」にしました。

こんなボタンが(普通のボタンです)が出来上がるので、自分なりに調整。

こうなりました。

あとはボタンを押すことで行われる課金の情報を設定します。「課金のカタログ」を作ってその中の一つをボタンに設定してあげるようなイメージを持ちました。

今はなんのカタログもないので、IAP Catalogボタンで「Disable Ads」というカタログIDの課金情報を作成しました。

課金のタイプは「Non Consumable」で一回の課金でそれ以降は使えない状態にします。なんども課金できるのは「Consumable」。

ちなみに、こちらはGoogleアカウントに紐付いているので、一度だけ購入タイプはもう二度とテストができなかった(笑)。

アプリの内部で一度課金が入ったらボタンそのものを非表示にさせますので、このアプリに関してはあまり意味がないです。

英語と韓国語でローカライズ対応をしておきました。窓を消せばそれで終わり。セーブとかはいりません。

カタログを作成し終わると、IAP Buttonでカタログが選べるようになります。

Product IDを先ほど作成したカタログをつけてあげます。あとは、課金が成功したとき「On Purchase Complete」用の処理を作ります。

3.課金処理を実装する

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GoogleMobileAds.Api;
using UnityEngine.UI;

public class AdmobScript : MonoBehaviour {

	//UnitID情報
	string adUnitId;
	BannerView bannerView;
	AdRequest request;

	//広告非表示購入用ボタン
	public Button disableAdsButton;

	//課金有無確認用
	int AdsFalse;

	// Use this for initialization
	void Start () {

		//if UNITY_ANDROID
		adUnitId = "ca-app-pub-XXXXXXXXXXX";

		// Create a 320x50 banner at the top of the screen.
		bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Bottom);
		// Create an empty ad request.
		request = new AdRequest.Builder().Build();

		AdsFalse = PlayerPrefs.GetInt ("adsFalse", 0);

		if (AdsFalse == 0) {
			//広告表示
			bannerView.LoadAd(request);
			bannerView.Show();
		} else {
			//購入ボタン非表示
			bannerView.Destroy();
			disableAdsButton.gameObject.SetActive (false);
		}
	}
	
	// Update is called once per frame
	void Update () {
		
	}

	public void PurchaseOK (){
		//課金情報を記録
		PlayerPrefs.SetInt ("adsFalse", 1);
		PlayerPrefs.Save ();

		//Admod非表示
		bannerView.Hide();
		//購入ボタン非表示
		disableAdsButton.gameObject.SetActive (false);
	}
}

簡単に説明。未来の私のために。

まず、このスクリプトは、Admob表示用のスクリプト。

UnityでAdmobのバナー広告を表示する

この子に課金時の対応を入れました。
「adsFalse」というint型の変数は課金すると「1」になります。これはアプリが終了しても引き継がれる情報(アンインストールされると初期化される)。

そのadsFalseをgetしてAdsFalseに入れておいてから、課金がされたかの判定をします。このこが「0」の時は、課金されていないことになるので、広告と広告非表示用課金ボタンは表示されます。

課金が正常に行われた場合は、「PurchaseOK」メソッドを動かします。

それで、非表示になる。

//Admod非表示
		bannerView.Destroy();

Admodを非表示にするのは、Destroyする。

さらにボタンを非表示にするのはSetActive。

Unity ボタンを非表示にしたい

IAP ButtonのPurchasing Complete(購入完了)の所に、先ほどのスクリプトが付いているオブジェクトを設定して、メソッドを稼働させる。

4.Unityで動きを確認しよう

Debug.logを入れて動きを確認してみました。

AdsFalse は今のところ、「0」なので、課金ボタンが表示されます(Admobも表示されている)

課金用のボタン「Disable Ads」を押すと、この、Unity用の確認ボタン画面が表示されます。ちなみのこれはプラットフォームによって、表示が違うので、iPhoneなのかAndroid端末なのかによっても違います。

私のハマりポイント1でしたね。この見栄えで大丈夫かってなった。とりあえず、Buyを押します。

購入が正常完了しました。「AdsFalse」の値も「1」になり、課金用ボタンも非表示になりました。

これで、Unityの対応は完了。

このあと、ボタンが非表示になった時のボタンのバランスがイマイチだったので、そこだけ修正しました。

Unityに実装するよりこのページ書くほうが時間がかかります。

次の作業はこちら。長すぎて分割。

Unity IAPで簡単な課金を実装する(その2 – 完)