web-dev-qa-db-ja.com

AdMob RewardedVideoAd.loadAdは常に「広告の読み込みに失敗しました、エラーコード:0」を返します

APIレベル24でfirebase-ads:9.2.0を使用しています。

そして、unity-ads aarモジュールは、compile(name: 'unity-ads'、ext: 'aar')をbuild.gradleに追加することでインポートされます。

UnityAds APIを直接使用することを選択した場合、すべてがうまくいきます。

しかし、Unity-adsをAdMobと統合しようとすると、次のようになります。

    mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance( this );

    mRewardedVideoAd.setRewardedVideoAdListener(new RewardedVideoAdListener() {
        @Override
        public void onRewardedVideoAdLoaded() {
            logger.debug("onRewardedVideoAdLoaded");
        }

        @Override
        public void onRewardedVideoAdOpened() {
            logger.debug("onRewardedVideoAdOpened");
        }

        @Override
        public void onRewardedVideoStarted() {
            logger.debug("onRewardedVideoStarted");
        }

        @Override
        public void onRewardedVideoAdClosed() {
            logger.debug("onRewardedVideoAdClosed");
        }

        @Override
        public void onRewarded(RewardItem rewardItem) {
            logger.debug("onRewarded");
        }

        @Override
        public void onRewardedVideoAdLeftApplication() {
            logger.debug("onRewardedVideoAdLeftApplication");
        }

        @Override
        public void onRewardedVideoAdFailedToLoad(int i) {
            Toast.makeText( 
                getApplicationContext(), 
                "onRewardedVideoAdFailedToLoad", 
                Toast.LENGTH_SHORT ).show();
        }
    });

    AdRequest adRewardRequest = new AdRequest.Builder()
        .addTestDevice("E921B48960E16DA3ABD13C4AFB7052A4")
        .build();

    mRewardedVideoAd.loadAd( 
        getResources().getString(R.string.reward_ad_unit_id), 
        adRewardRequest );

常に戻ります

広告応答の取得に問題がありました。 ErrorCode:0
広告の読み込みに失敗しました:0。

私が間違った方法でそれをしたことはありますか?

または私はちょうどいくつかのステップを逃しましたか?

これが私のAdMobページのスクリーンショットです:

AdMob page

8
Kimi Chiu

さて、私は解決策を見つけました。

まず、プロジェクトにアダプターを含めなかったということです。

ここからアダプタをダウンロードする必要があります: サードパーティのネットワークアダプタ

そしてそれをlibsフォルダーに入れます。これらのアダプターはSDKに含まれていません(githubからダウンロードした場合)。

次に、コードからこの行を削除する必要があります。

.addTestDevice("E921B48960E16DA3ABD13C4AFB7052A4")

AdMobがこのデバイスをテストデバイスとして扱う場合、ダウンロードされるビデオ広告はないようです(少なくとも私の場合)。

AVDを使用することを選択した場合も同じことが起こり、これらのエミュレーターにテスト広告を表示するように強制されます。

そこで、Genymotionに変更し、addTestDevice()を削除すると、機能します。

6
Kimi Chiu

通常、これは新しく作成された広告で発生するため、1時間待ってから再試行してください。

public static final int ERROR_CODE_INTERNAL_ERROR

内部で何かが発生しました。たとえば、広告サーバーから無効な応答を受信しました。

定数値:0

出典: Google Developers

4
PSN

インタースティシャル広告を使用していますが、同じ問題だと思います。グーグルは時々機能しないコードを与えます、それがなぜであるか私に尋ねないでください。

mRewardedVideoAd.loadAd()メソッドの後にこれを追加します。

mRewardedVideoAd.setAdListener(new AdListener() {
        @Override
        public void onAdLoaded() {
            //your code when Ad is loaded
            //you can show your ad immediately, but I don't suggest it
            if (mRewardedVideoAd.isLoaded()) {
                mRewardedVideoAd.show(); //this shows ad immediately
            }
        }

        @Override
        public void onAdClosed() {
        }
    });

または、AdListenerを設定して、すぐに表示せずに、新しいメソッドを作成することもできます。

public static void displayAd() {
    if (mRewardedVideoAd.isLoaded()) {
        mRewardedVideoAd.show();
    }
}

このようにして、このメソッドを任意のアクティビティから呼び出すことができます。このメソッドは、広告を再度ロードすることなく、ほぼ瞬時に(すでにロードされているため)広告を表示します。

1
leonz