読者です 読者をやめる 読者になる 読者になる

まりもらぼ

会社から帰っては、一人でコツコツとスマホ用ゲームアプリを作ってます。開発tipsや、雑記、宣伝などなど。teeqaceは開発者、まりもらぼはプロジェクトって感じです。

【tips】nendのインタースティシャル広告表示で地味にハマる

お、このブログで初のtipsかも

 

地味にハマったので、今後のメモ用に。

 

nendのインタースティシャルを使おうと思いまして。(以前のまりもシリーズでも使ってましたが)

久々に実装するとハマりましたので手順。

2016/04/10現在

 

  1. nendで広告枠の作成
  2. nendのサイトよりUnityプラグイン(iOS/Android)をダウンロード
  3. Google Play Servicesライブラリのインストール (Androidのみ)
  4. Unityのプロジェクトに2をインポート
  5. ソースコード作成

 

1. nendで広告枠の作成

これは特に説明不要。ゲームプロジェクト毎に作りましょう。

 

2. nendのサイトよりUnityプラグイン(iOS/Android)をダウンロード

nendのサイトよりSDKタブ押下、Unityプラグイン(iOS/Android)をダウンロードして適当な場所へ解答

これは他のゲームプロジェクトでも使用できるので1回やればOK(最新バージョンの有無はチェック必要だけど)

 

3. Google Play Servicesライブラリのインストール (Androidのみ)

Android Sdk ManagerでGoogle Play servicesをインストール

これも1回でOK

ここで地味なハマりポイントAndroid Sdk Managerは「右クリック⇒管理者として実行」で実行すること。そうしないと

-----------------------------------------------------------------------------------

Preparing to install archives
Downloading *****, revision **
URL not found: C:\Program Files (x86)\Android\android-sdk\temp\*****.zip (アクセスが拒否されました。)
Done. Nothing was installed.

-----------------------------------------------------------------------------------

と表示されてインストールできません。

 

4. Unityのプロジェクトに2をインポート

Assets -> Import Package -> Custom Package...

で、2でダウンロードしたnend_unity_plugin-1.3.5.unitypackageをインポート(バージョンはその時によって異なります)

NendSDK -> Android Setup で開いた画面でConfigureボタン押下(よくわからんけどマニュアルに書いてあったからそうしましょうw)

これはゲームプロジェクト毎にね。

 

5. ソースコード作成

4.のインポート後、広告を表示したいシーンに
プレハブのAssets/Plugins/Nend/AD/NendAdInterstitialをドラッグ&ドロップ

んでコード書くときにハマったところ

最初はStart()内で

NendAdInterstitial.Instance.Load("apiKey", "spotID");

NendAdInterstitial.Instance.Show();

って書いてたけど広告が表示されない・・・

 

どうやらLoadが完了していない状態でShow()を実行していて表示されていないようだ。

 

ってことでマニュアルを参考に広告ロード完了イベントをハンドリングして、

広告ロード完了時にShow()する。

using UnityEngine;
using NendUnityPlugin.AD;
using NendUnityPlugin.Common;
public class HOGECLASS : MonoBehaviour {
  NendAdInterstitial NendAdInterstitial;
  void Start () {
    NendAdInterstitial.Instance.Load("apiKey", "spotID");
    NendAdInterstitial.Instance.AdLoaded += loadAd;
  }
  // 広告のロード完了イベント
  void loadAd(object sender, NendAdInterstitialLoadEventArgs args) {
    NendAdInterstitial.Instance.Show();
  }
}

よっしゃ表示された!

と思ったら、該当シーンに遷移後、インタースティシャル表示、広告閉じる、広告表示、閉じる、表示・・・と何度も繰り返されて広告が表示され続ける・・・こりゃイカン。

結局以下で該当シーン遷移時に1回のみ広告表示されるようになった!

広告ロード完了イベントを

NendAdInterstitial.Instance.AdLoaded -= loadAd;

で外してあげるってだけ。

using UnityEngine;
using NendUnityPlugin.AD;
using NendUnityPlugin.Common;

public class HOGECLASS : MonoBehaviour {
    NendAdInterstitial NendAdInterstitial;
    void Start () {
        NendAdInterstitial.Instance.Load("apiKey", "spotID");
        NendAdInterstitial.Instance.AdLoaded += loadAd;
    }
    // 広告のロード完了イベント
    void loadAd(object sender, NendAdInterstitialLoadEventArgs args) {
        NendAdInterstitial.Instance.Show();
        NendAdInterstitial.Instance.AdLoaded -= loadAd;
    }
}

 

ふぅ地味にハマったぜ・・・

さて、この処理正しいんでしょうか?もっとスマートな書き方あるんだろうか。

まりもシリーズの時は、ゲーム起動時にLoadのみ行っておいて、

別シーンでShowのみ行うっていう風に分けてたみたいだけど(「みたい」って他人事みたいに・・・w)

==========2016/04/27追記==========

結局、ロードされて表示されるまで結構待ちが発生してしまうので、

上記の以前のまりもシリーズのように、ゲーム開始時にロードだけしておいて、

表示させたい画面でShow()って感じにしました。

過去にやったことだけど、なぜそうしたかを忘れちゃってたから同じことを繰り返しちゃったんだなぁ。

こうしてブログに備忘録として残しておいたら今後は忘れないはず!

================================

今回はバナー広告なしで。なんか見た目の世界観が壊れるし。(インタースティシャルも変わらないけど、表示され続けないって点でね)

よーし、もう一息だ!