1

当 admob 代码在使用 localStorage 的 Phonegap/Cordova 应用程序中初始化时,localStorage 似乎被 admob 广告视图覆盖。

这是在 Cordova 2.2 应用程序中初始化 admob 代码(使用 SDK 的 v6.2.1)的代码:

public class Foo extends DroidGap
{
    private AdView adView;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        super.setIntegerProperty("splashscreen", R.drawable.splash);

        super.loadUrl("file:///android_asset/www/index.html", 3000);

        adView = new AdView(this, AdSize.SMART_BANNER, "AD_MOB_ID");
        root.addView(adView);
        AdRequest request = new AdRequest();
        request.setTesting(true);
        adView.loadAd(request);
    }

广告已加载,但我用来维护用户会话的 localStorage 似乎已被清除并显示登录页面。当我评论 admob 初始化代码时,localStorage 被恢复并且用户的会话又回来了。

根据 [1] 和 [2] 的说明,我添加了一个处理程序::

public class Foo extends DroidGap
{
    private AdView adView;
    private Handler mHandler = new Handler();

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        super.setIntegerProperty("splashscreen", R.drawable.splash);

        super.loadUrl("file:///android_asset/www/index.html", 3000);

        mHandler.postDelayed(new Runnable() {
            public void run() {
                loadAdmob();
            }
        }
    }

    private void loadAdmob()
    {
          adView = new AdView(this, AdSize.SMART_BANNER, "AD_MOB_ID");
          root.addView(adView);
          AdRequest request = new AdRequest();
          request.setTesting(true);
          adView.loadAd(request);
    }

这会在 10 秒后尝试加载广告,但我在 logcat:: 中收到以下消息

adRequestUrlHtml: <html>...
Received ad url: <url: ...
Request Scenario: Offline with no buffered ads.
Network is unavailable. Aborting ad request.
onFailedToReceiveAd(A network error occurred.)

我可以确认网络连接没有问题(因为应用程序中的其余数据已显示并通过网络获取)但广告没有显示。我做错了什么还是这是一个错误?解决此问题的方法将很有帮助。

[1] Android + HTML5(LocalStorage) + Admob:错误?
[2] https://github.com/phonegap/phonegap/wiki/In-App-Advertisements

4

1 回答 1

1

在引入延迟时,我在接收网络错误时遇到了同样的问题(可能是由于在另一个线程上运行,它失去了查询网络的必要权限。)

我解决这个问题的方法是覆盖 onAttachToWindow() 并从那里调用 adMob 初始化,并完全删除处理程序代码。它还具有接近即时且没有延迟的副作用。

@Override public void onAttachedToWindow() {
    super.onAttachedToWindow();

    doAdMob();
};

private void doAdMob() {
    adView = new AdView(this, AdSize.BANNER, "ID");

    LinearLayout layout = super.root;

    layout.addView(adView);
    AdRequest request = new AdRequest();

    request.addTestDevice("ID");

    adView.loadAd(request);
}

我正在使用 Cordova 2.5 顺便说一句。

更新:AdMod 仍然会破坏本地存储,但它在 AdMob 有机会清除它时加载。但是,在随后的重新加载时,它将被重置。我已经通过添加解决了这种行为

window.setTimeout(saveSettings, 5000);

在我加载了我的 localStorage 设置之后。这当然是非常骇人听闻的......但到目前为止似乎可以解决问题。另请注意,我只使用了 AdMob 的测试广告。

于 2013-06-06T07:51:46.690 回答