【问题标题】:Admob Interstitial loads but shows empty screenAdmob 插页式广告加载但显示空白屏幕
【发布时间】:2014-07-24 06:08:09
【问题描述】:

我试图将 Admob 插页式广告添加到我的 Android 应用程序中,当有人离开 Activity 时会显示该应用程序。

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;

public class Banner extends Activity {

/**
 * Your ad unit id, you must replace it with your actual ad unit id Which
 * you can generate from Admob website
 * 
 */
private static final String AD_UNIT_ID = "MY ADD UNIT ID";
private static final String TAG = "ExampleActivity";
private InterstitialAd iAd;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.banner);

    iAd = new InterstitialAd(this);
    iAd.setAdUnitId(AD_UNIT_ID);

    iAd.setAdListener(new AdListener() {
        @Override
        public void onAdLoaded() {
            Log.d(TAG, "onAdLoaded");
            Toast.makeText(Banner.this, "Ad loaded successfully",
                    Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onAdFailedToLoad(int errorCode) {
            String errorMessage = String.format("Failed to load add : "
                    + getErrorReason(errorCode));
            Log.d(TAG, errorMessage);
            Toast.makeText(Banner.this, errorMessage,
                    Toast.LENGTH_SHORT).show();
        }
    });

    loadInterstitial();
}

public void loadInterstitial() {
    AdRequest adRequest = new AdRequest.Builder()
            .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
            .addTestDevice(
                    "You can add you device id here, run code once and get id from logs")
            .build();

    iAd.loadAd(adRequest);
}

public void showInterstitial() {
    if (iAd.isLoaded()) {
        iAd.show();
    } else {
        Log.d(TAG, "Interstitial ad is not loaded yet");
    }
}

/**
 * Gets a string error reason from an error code
 * 
 * @param errorCode
 * @return
 */
private String getErrorReason(int errorCode) {

    String errorReason = "unknown error";

    switch (errorCode) {
    case AdRequest.ERROR_CODE_INTERNAL_ERROR:
        errorReason = "internal error";
        break;
    case AdRequest.ERROR_CODE_INVALID_REQUEST:
        errorReason = "invalid request";
        break;
    case AdRequest.ERROR_CODE_NETWORK_ERROR:
        errorReason = "network Error";
        break;
    case AdRequest.ERROR_CODE_NO_FILL:
        errorReason = "no fill";
        break;
    }
    return errorReason;
}

@Override
protected void onDestroy() {
    showInterstitial();
    super.onDestroy();
}

}

插页式广告加载成功,但我得到一个像这样的空白屏幕(我等了 1-2 分钟,但仍然没有广告显示):

我仔细检查了我的 AD_UNIT_ID。可能是什么问题呢?这是正常的吗?我仍处于开发阶段,所以当我将我的应用上传到 Play 商店时会纠正这个问题吗?

【问题讨论】:

  • 如果我错了,请纠正我,当用户尝试退出活动时,您正在尝试显示广告。在这种情况下,您应该使用 onBackPressed 而不是 onDestroy,并且应该将 super.onBackPressed() 放在 AdListener 中的 onAdClosed() 中。

标签: android-activity admob android interstitial


【解决方案1】:

你永远不会让它工作。

在您的 Activity 被销毁时,插页式广告没有上下文。而是在您的应用中找到一个自然断点,然后显示插页式广告。

【讨论】:

  • 你是对的 admob 在活动关闭或应用关闭或应用启动时显示广告时显示空白广告
【解决方案2】:

@Rushil 如果 Banner 不是您的基本活动,那么您可以使用 startActivityForResult() 方法启动 Banner Activity,如下所示

Intent intent = new Intent(MainActivity.this, Banner.class);
startActivityForResult(intent,0);

然后在 OnActivityResult 函数中展示广告

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode==0||resultCode==Activity.RESULT_OK)
    {
        if (iAd.isLoaded()) 
        {
         iAd.show();
        }
    }
    super.onActivityResult(requestCode, resultCode, data);

}

希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    相关资源
    最近更新 更多