うっかりミスでハマりました
わかってしまえば簡単に導入できるのだが、知識不足でハマってしまった。
自分への戒めと、同じ凡ミスでハマる人が居ないようにメモを残しておきます。
どのタイミングでインターステーシャル広告を表示する?
AppCを使っていた時にリコネクト広告ということで終了時に1枚表示してから終了するようにしていた。
同じような使い方をしてみたいのでAndriodのバックボタンをフックとする。
AndroidのバックボタンでUnityを終了させる
AndroidのバックボタンでUnityを終了させる方法を調べると以下のようなコードに行き着く。
void Update () {
if (Application.platform == RuntimePlatform.Android) {
if (Input.GetKey(KeyCode.Escape)) {
Application.Quit();
return;
}
}
}
|
公式でもAndroidチェックなどはやっていないが、
if (Input.GetKey(KeyCode.Escape)) |
の部分は変わらない。
終了部分をインターステーシャルに置き換える
終了処理の部分を、
nendのサンプルを元にインターステーシャル広告表示に置き換える。
広告が閉じられたら終了でいいのでFinish()を使う。
start時にロード処理を加え
void Start () {
#if UNITY_ANDROID
NendAdInterstitial.Instance.Load("apiKey", "spotId");
#endif
}
|
終了部分を置き換える
Application.Quit()とreturnを削除し以下の内容に置き換える。
NendAdInterstitial.Instance.Finish(); |
不具合発生
実機確認でバックボタンを押してみると一瞬だけインターステーシャル広告らしきダイアログが表示されるが消えてしまう。
フラグを立ててみたりしたが現象変わらずだった。
問い合わせてみた
インターステーシャル広告が使えないと今後困るのでnend側に問い合わせてみた。
解決
コードを送ってみると、Input.GetKeyではなくInput.GetKeyUpを使えば問題ないとのことだった。
そこで両者の違いを調べてみると
- Input.GetKeyUpはボタンが話された時に呼び出される
- Input.GetKeyはボタンが押されている間呼び出される
という違いがあった。
インターステーシャル広告はバックボタンで消すことが出来る仕様なので、
表示と非表示を繰り返したというわけだ。
単純にGetKeyとGetKeyUpの違いだったわけだが気をつけようと思う。