问题描述
我想将Facebook Audience Network用于我的Android应用程序,我已经集成了interstitialAd应用程序内的应用程序,并且运行正常,但显示为Activity启动。我想在30秒后显示广告。这是我的代码
interstitialAd = new InterstitialAd(this,"1555910157949688_1556058954601475");
interstitialAd.setAdListener(new InterstitialAdListener() {
@Override
public void onAdLoaded(Ad ad) {
// Interstitial ad is loaded and ready to be displayed
Log.d(TAG,"Interstitial ad is loaded and ready to be displayed!");
// Show the ad
interstitialAd.show();
}
});
interstitialAd.loadAd();
并且我已经尝试过以此来安排我的广告,但是它没有用。
private void showAdWithDelay() {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
// Check if interstitialAd has been loaded successfully
if(interstitialAd == null || !interstitialAd.isAdLoaded()) {
return;
}
// Check if the ad is already expired or invalidated,and do not show ad if that is the case. You will not get paid to show an invalidated ad.
if(interstitialAd.isAdInvalidated()) {
return;
}
// Show the ad
interstitialAd.show();
}
},3000);
}
解决方法
我更喜欢这样做:
Handler handler = new Handler();
interstitialAd = new InterstitialAd(this,"XXX");
interstitialAd.setAdListener(new InterstitialAdListener() {
@Override
public void onAdLoaded(Ad ad) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
interstitialAd.show();
}
},YOUR_TIME);
}
});
interstitialAd.loadAd();
如果您想更加精确,请执行以下操作:
final long lastTime = System.currentTimeMillis();
Handler handler = new Handler();
interstitialAd = new InterstitialAd(this,"XXX");
interstitialAd.setAdListener(new InterstitialAdListener() {
@Override
public void onAdLoaded(Ad ad) {
long now = System.currentTimeMillis();
long timeWait;
if (now - lastTime >= YOUR_TIME){
timeWait = 0;
}else {
timeWait = YOUR_TIME-(now-lastTime);
}
handler.postDelayed(new Runnable() {
@Override
public void run() {
interstitialAd.show();
}
},timeWait);
}
});
interstitialAd.loadAd();
,
我认为您的实施违反了AdMob政策,可能会给您带来一些麻烦。
请检查此页面以获取有关正确/错误插页式广告实施的帮助(特别是“意外启动的插页式广告”指向):https://support.google.com/admob/answer/6201362?hl=en&ref_topic=2936214
要遵守AdMob政策,建议您仅在活动/应用自然转换中显示插页式广告,不同的实现方式可能会导致您被Admob禁止使用。
为此,您可以更改代码以首先仅加载广告并跟踪其加载状态,如下所示:
boolean isAdLoaded = false;
interstitialAd = new InterstitialAd(this,"1555910157949688_1556058954601475");
interstitialAd.setAdListener(new InterstitialAdListener()
{
@Override
public void onAdLoaded(Ad ad)
{
// Interstitial ad is loaded and ready to be displayed
Log.d(TAG,"Interstitial ad is loaded and ready to be displayed!");
// The ad has been loaded
isAdLoaded = true;
}
});
interstitialAd.loadAd();
然后在应用的自然转换中显示它,例如,当用户点击按钮以转到其他活动时:
shareButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
//Show interstitial if it is loaded
if(isAdLoaded)
interstitialAd.show();
//Open Activity
startActivity(new Intent(this,OtherActivity.class));
}
});