2

我正在开发一个 android 应用程序,并希望在用户按下返回按钮退出应用程序时显示一个 mopub 插页式全屏广告。

我已经尝试过创建插页式广告并在 onDestroy 方法中显示它。像这样的东西:

@Override
public void onDestroy(){
    this.interstitial = new MoPubInterstitial(this, MY_INTERSTITIAL_AD_UNIT_ID_HERE);
    this.interstitial.setInterstitialAdListener(this);
    this.interstitial.load();

    super.onDestroy();
}

// InterstitialAdListener method
@Override
public void onInterstitialLoaded(MoPubInterstitial interstitial) {
    if (interstitial.isReady()) {
        mInterstitial.show();
    } else {
        // Other code
    }
}

但是,我不会在任何地方销毁插页式广告 (mInterstitial.destroy();),因为我不知道在哪里可以这样做,因此我收到此错误:

Activity com.myActivity has leaked IntentReceiver com.mopub.mobileads.MoPubView$1@41baffc0 that was originally registered here. Are you missing a call to unregisterReceiver()?
android.app.IntentReceiverLeaked: Activity com.myActivity has leaked IntentReceiver com.mopub.mobileads.MoPubView$1@41baffc0 that was originally registered here. Are you missing a call to unregisterReceiver()?

虽然我收到了这个错误,但显示了添加(我已经在许多设备上测试过它),它似乎在除索尼之外的所有设备中都运行良好。

如何改进此代码以在退出时显示插页式广告?

谢谢!!

4

6 回答 6

2

您在 ondestroy 时加载插页式广告。当您的活动在您泄漏的间隙加载后被破坏时。在 ondestroy 中调用 interstitial.destroy()。

您可能想要做的是处理 onbackpressed。加载插页式 oncreate,在 onbackpressed 上显示它并在 ondestroy 上销毁它。

于 2013-09-10T17:57:52.247 回答
2

最后,我发现了一种名为 Postitial 的新广告技术,它可以让我在用户以自然方式退出应用程序时展示 mopub 全屏广告。您可以在此处查看更多信息:http: //iqzone.com/mobile-advertising-solutions/case-studies/

于 2013-09-12T15:35:55.483 回答
1

旧帖子,但我现在正在寻找这个问题并找到了这个帖子。

现在,如果您收到有关“活动已泄漏窗口”的错误,请记住将 finish() 放在 onAdClosed 上,不要放在其他地方

mInterstitialAd.setAdListener(new AdListener() {
            @Override
            public void onAdClosed() {
                finish();
                requestNewInterstitial();

            }
        });

如果您想要关闭活动并显示插页式广告,请使用此选项。

于 2016-10-24T13:08:02.800 回答
0

在 onDestroy() 确保你销毁 mopubview

    if (mMoPubView!=null) {
        mMoPubView.destroy();
    }
于 2015-01-28T20:17:24.987 回答
0

您可以尝试重载 onBackPressed 方法。这样,onDestroy 仍然可以用于清理插页式广告。

在您的活动中

@Override
public void onBackPressed(){
    if (interstitial.isReady()) {
        interstitial.show(); //this will show the interstitial if it's ready
    } else {
        super.onBackPressed(); //this will exit the program
    } 
}

然后在返回插页式广告时(失败或关闭时)在您的侦听器中调用 finish()

@Override
public void onInterstitialFailed(MoPubInterstitial interstitial, MoPubErrorCode errorCode) {
    finish(); //this will exit the program if interstitial fail to load.
} 

@Override
public void onInterstitialDismissed(MoPubInterstitial interstitial) {
    finish(); //this will exit the program if interstitial is closed
}

当然,您仍然需要照常调用销毁。

@Override
protected void onDestroy() {
    interstitial.destroy();
    super.onDestroy();
}
于 2015-11-18T15:53:41.803 回答
0

100% 可行的解决方案,我们需要为插页式广告和横幅广告调用销毁函数。

 @Override
    protected void onDestroy() {

        if(mopubInterstitial != null){
            mopubInterstitial.destroy();
        }
        if (mopubBannerPubView != null){
            mopubBannerPubView.destroy();
        }
        super.onDestroy();
    }
于 2017-01-18T12:24:46.543 回答