2

上下文:使用最新的 Google Play admob... 我在活动中有一个插页式广告,带有一个 adListener。

我要完成的工作:当广告无法加载时(因为设备正在使用 adblock,或者设备无法访问网络),我希望启动自定义活动(我已将其设置为自定义广告)。

我目前用作代码来完成此操作:

interstitial.setAdListener(new AdListener()
    {
        @Override
        public void onAdLoaded()
        {
            displayInterstitial();
            super.onAdLoaded();
        }

        @Override
        public void onAdFailedToLoad(int errorCode)
        {
            Intent intent = new Intent(getApplicationContext(),
                    FailToLoadActivity.class);
            startActivity(intent);
            super.onAdFailedToLoad(errorCode);
        }

    });

我还尝试将这些 Intent... 行添加到 displayInterstitial() 方法中:

public void displayInterstitial()
{
    if (interstitial.isLoaded())
    {

        interstitial.show();
    }
    else
    {
        Intent intent = new Intent(getApplicationContext(),
                FailToLoadActivity.class);
        startActivity(intent);
    }
}

现在,当请求失败时,我的自定义广告不会立即显示,而是在大约 30 秒后出现。即使活动被破坏,它也会这样做。

我怎样才能让这个自定义广告在请求第一次失败时立即显示,而在活动被破坏时根本不这样做?

/e 我注意到 logcat 中有一个条目:从现在开始安排广告刷新 60000 毫秒,我想将其更改为 5000 毫秒将解决我的问题(再次,这是一个理论)......这是我可以改变的吗?

另外,我想保证在用户退出活动时不会显示任何广告(我的自定义广告或网络投放的广告)(以防止任何应用外侵入性弹出窗口攻击我的用户)

4

2 回答 2

2

摆脱您的 AdListener。

永远不想在收到插页式广告后立即显示,也不想在插页式广告无法投放时立即展示您的自定义广告。

而是在应用程序的自然断点处调用#displayInterstitial。这将确保您展示插页式广告或展示您的自定义广告。当您的 Activity 被销毁时,您将不会显示它。

您可以采取的另一种方法是设置内部广告并将其设置为中介流程中的后备选项。但我从未尝试过实现这一目标。此外,您希望即使在用户离线时也能正常工作,所以最好的方法是最好的。

于 2014-03-20T03:34:23.470 回答
2

根据威廉的建议:

注意:我希望当用户单击我的主菜单(动态壁纸配置活动)中的特定按钮时弹出插页式广告

1 - 我在 onCreate() 中为插页式广告创建并请求加载,但没有实例化 AdListener。

2 - 将 displayInterstitial() 更改为:

public void displayInterstitial()
{
    if (interstitial.isLoaded())
    {
        interstitial.show();
    }
    else
    {
        Intent intent = new Intent(getApplicationContext(),
                FailToLoadActivity.class);
        startActivity(intent);
    }
}

3 - 将我的 onClick 方法从直接启动新活动更改为:

public void onClickFX(View v)
{
    displayInterstitial();
    boolFX = true;
}

4 - 覆盖 onResume() 如下:

@Override
protected void onResume()
{
    if (boolFX)
    {
        boolFX = false;
        Intent intent = new Intent(getApplicationContext(),
                SpecialEffects.class);
        startActivity(intent);
    }
    super.onResume();
}

这完美!

所以,感谢威廉为我指明了正确的方向!

于 2014-03-20T13:40:28.270 回答