質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.60%

  • Android

    6409questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Unity

    3813questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • AdMob

    32questions

Unity : AndroidアプリでGoogleAdmobのリワード広告が表示されない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 215

BloodX

score 1

 前提・実現したいこと

Unityで開発中のAndroidアプリ内にリワード広告を実装したいと考えています。

ユーザーに動画視聴の有無確認 → YESなら動画視聴 → 視聴後に体力回復のアイテム支給
といった流れを作成しています。

テスト用の UnitIDを使用して確認する分には問題なく表示され、問題なくアイテムも支給出来ます。
テスト用のID( ca-app-pub-3940256099942544/5224354917 )

この状態で上記テストID から AdMobで取得したUnitIDのみ変更してビルド→確認すると
動画が表示されなくなります。

ADMOBサポートに問い合わせてみた所、
広告リクエストが出てから、広告が反映されるまでに十分な時間がない

1.広告リクエストのタイミング
2.プレキャッシング導入
3.広告の配置場所

の見直しを検討してくれとの回答をいただきました。

こちらについて、リクエストタイミング(動画のロード)
AdMobReward.instance.RequestRewardBasedVideo();
は、タイトル画面、最初にゲームプレイ画面に入った時、動画視聴後にあらかじめしています。

さっぱり原因がわからず途方に暮れております。
よろしくお願いします。

 発生している問題・エラーメッセージ

エラーメッセージ

 該当のソースコード

using UnityEngine;
using System.Collections;
using GoogleMobileAds.Api;
using DG.Tweening;

public class AdMobReward : MonoBehaviour
{
    static public AdMobReward instance;
    public string ios_Reward;
    public string Android_Reward;
    private RewardBasedVideoAd rewardBasedVideo;
    bool rewardBasedEventHandlersSet = false;
    bool IsReworded;
    bool IsClosed;

    void Awake()
    {
        if (instance == null)
        {
            instance = this;
            DontDestroyOnLoad(this.gameObject);
        }
        else
        {
            Destroy(this.gameObject);
        }

#if UNITY_ANDROID
        AppLovin.SetSdkKey("********************");
        AppLovin.InitializeSdk();
#elif UNITY_IPHONE
        AppLovin.SetSdkKey("*************************");
        AppLovin.InitializeSdk();
#endif
        RequestRewardBasedVideo();
    }

    void Start()
    {
    }

    void Update()
    {
        if (IsReworded && IsClosed)
        {
            IsReworded = false;
            IsClosed = false;

            //報酬支給
            Instantiate(Resources.Load<GameObject>("Prefabs/Item/Item_Power2"), new Vector3(14.02f, 0.16f, -6.4f), Quaternion.Euler(0, 0, 0));
            SoundManager.Instance.PlaySE(10);
        }
    }


    public void RequestRewardBasedVideo()
    {
        string adUnitId;
#if UNITY_EDITOR
        adUnitId = "unused";
#elif UNITY_ANDROID
        adUnitId = Android_Reward;
#elif UNITY_IPHONE
        adUnitId = ios_Reward;
#else
        adUnitId = "unexpected_platform";
#endif
        rewardBasedVideo = RewardBasedVideoAd.Instance;

        AdRequest request = new AdRequest.Builder().Build();
        rewardBasedVideo.LoadAd(request, adUnitId);

        if (rewardBasedEventHandlersSet == false)
        {
            // has rewarded the user.
            rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
            rewardBasedVideo.OnAdClosed += HandleRewardBasedVideoRewardedClosed;
            rewardBasedVideo.OnAdFailedToLoad += HandleRewardBasedVideoRewardedFailed;
            rewardBasedEventHandlersSet = true;
        }
    }

    // 動画再生
    public void pushAds()
    {
        if ( rewardBasedVideo.IsLoaded() )
        {
            rewardBasedVideo.Show();
        }
        else
        {
            GameManager.Instance._reward = false;
        }
    }

    //void HandleRewardBasedVideoOpened(object sender, EventArgs args)
    //{
    //    Time.timeScale = 0;
    //}

    public void HandleRewardBasedVideoRewarded(object sender, Reward args)
    {
        IsReworded = true;
    }

    public void HandleRewardBasedVideoRewardedClosed(object sender, System.EventArgs args)
    {
        RequestRewardBasedVideo();
        IsClosed = true;
        //Time.timeScale = 1;
    }


    public void HandleRewardBasedVideoRewardedFailed(object sender, AdFailedToLoadEventArgs args)
    {
        StartCoroutine(_waitConnectReward());
    }

    IEnumerator _waitConnectReward()
    {
        while (true)
        {
            yield return new WaitForSeconds(30.0f);

            if (Application.internetReachability != NetworkReachability.NotReachable)
            {
                RequestRewardBasedVideo();
                break;
            }
        }
    }

}

 試したこと

ここに問題に対して試したことを記載してください。

 補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

 AppLovin ?

テスト用の UnitIDを使用して確認する分には問題なく表示され、問題なくアイテムも支給出来ます。(略)この状態で上記テストID から AdMobで取得したUnitIDのみ変更してビルド→確認すると
動画が表示されなくなります。 

AppLovinに問題あるかもしれませんね。一度AppLovinのコードをコメントアウトして実機で確認してみてください。もしAdmobの管理画面でApplovinを設定している場合は、一時停止し30分程度待って実機で確認してみてください。

 プラグインの初期化してますか?

初期化にはアプリIDが必要です。
[アプリIDの確認方法] https://support.google.com/admob/answer/6232340?hl=ja

...
using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    public void Start()
    {
        #if UNITY_ANDROID
            string appId = "ca-app-pub-3940256099942544~3347511713";
        #elif UNITY_IPHONE
            string appId = "ca-app-pub-3940256099942544~1458002511";
        #else
            string appId = "unexpected_platform";
        #endif

        // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize(appId);
    }
}

[参考] https://developers.google.com/admob/unity/start#initialize_mobileads

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/13 22:26

    お返事ありがとうございます。

    ご指摘いただいた通り、

    ①Applovinに関するコードの削除。
    ※AndroidManifest.xml 内と 上記添付したコードのApplovin部分のコメントアウト です。

    ②上記スクリプトのRequestRewardBasedVideo() 内に下記追加とIDの確認
    MobileAds.Initialize("**-***-***-****************~**********");

    ③admob内のメディエーション/メディエーショングループに登録してあるものを
    admobだけに。

    。。。を設定して確認してみましたが、やはり動画は表示されませんでした。

    キャンセル

  • 2018/06/14 04:26 編集

    大変お手数おかけしました。

    1度RequestRewardBasedVideo()の呼び出しをゲームプレイ画面に入った時だけにしてみていただいても良いですか?そして、広告が再生されるまでに30秒ほど時間をおいて再生してみていただいてもよろしいでしょうか?

    キャンセル

  • 2018/06/17 17:43

    ありがとうございます!
    RequestRewardBasedVideo()の呼び出しをゲームスタート時だけ。
    他は、動画を閉じた時とかにも設定してましたが、念のためコメントアウト。

    上記のビルドを、更に念のため、テストIDと正式なUnitIDの2つのビルドをしてそれぞれ確認
    してみました。

    テストID→OK
    UnitID→無反応

    。。。残念です。

    ここ2日間だけの確認なので真意はわからないのですが、何故か朝方に1回だけ
    再生されることに気が付きました。
    facebookの広告動画なのですが、その後はまた無反応になります。

    キャンセル

  • 2018/06/17 17:55

    Unityで開発しているのですが、
    AndroidManifest が

    Assets/Plugins
    /Androidフォルダ内 以外に

    /com.google.android.gms.play-services-ads-license-11.8.0
    /com.google.android.gms.play-services-ads-lite-license-11.8.0
    /com.google.android.gms.play-services-basement-license-11.8.0
    /com.google.android.gms.play-services-gass-license-11.8.0
    /GoogleMobileAdsPlugin

    。。フォルダにも入っています。これは削除した方が良いのでしょうか?

    キャンセル

  • 2018/06/23 14:28 編集

    >ここ2日間だけの確認なので真意はわからないのですが、。。。facebookの広告動画なのですが、その後はまた無反応になります。

    やっぱりIDの問題な気がしますね。Unityのバージョンを教えていただいてもよろしいでしょうか?

    >com.google.android
    再インストールの為に一旦削除するってことですかね?
    でしたら、GoogleMobileAdsPluginは削除して大丈夫です。com.google.androidで始まるファイルはAdmobで必要なファイルですが、他にネイティブにアクセスするプラグインは利用していませんか?別のプラグインで利用している可能性もあります。無ければ破棄して大丈夫です。少し具体的に説明しますと

    com.googleなどのファイルは
    「GoogleMobileAds/Editor/Google*****.xml」に記述した内容を
    PlayServicesResolverが取得しています。.xmlに記述がないファイルもあると思いますが、依存関係がある場合自動的に取得してくれます。逆にPlayServicesResolverのフォルダから先に削除しないと即座に復元するのでPlayServicesResolverから削除してください。

    キャンセル

0

イメージ説明
イメージ説明

IShikawan様

その後、ロードを失敗した時にアプリ側にアラートメッセージを表示させてみた所
見事にアラートメッセージが表示されていました。
何度やっても、何分待っても、うまく広告がロードされていないようなのです。
朝方、たまに表示されていたのはちゃんとロードされた結果ということなのしょうか・・。

AdMobの設定画面→広告ユニット→自分で作成した動画リワードの広告ユニットID を確認&組み込み                            
メディエーショングループはAdMobNetWork、Applovin、UnityAds を設定しています。

添付の設定を見る限り、やはりご指摘いただいた通り、Applovinの設定がうまくいって
ないのかなと思いました。(その後付け加えたunityAdsも)
ただ、admobネットワークもほとんど表示されていないのがよくわかりません。

1度、全て捨てて、1から設定し直してみます。

アドバイスいただき本当にありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/21 21:07

    できませんでしたか。。。。お役に立てず申し訳ありません。

    キャンセル

  • 2018/06/21 22:29

    いえいえ、とんでもないです。
    レスをいただき色々と参考になり大変感謝しています。
    結局、AdMobはバナーとインタースティシャル、リワードはUnityAdsを使うことにしました。
    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Android

    6409questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Unity

    3813questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • AdMob

    32questions