Localstorage用Cordova和admob覆盖

时间:2012-11-21 16:38:11

标签: android cordova admob

当在使用localStorage的Phonegap / Cordova应用程序中初始化admob代码时,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: Bug?
[2] https://github.com/phonegap/phonegap/wiki/In-App-Advertisements

1 个答案:

答案 0 :(得分: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 btw。

更新:AdMod仍会破坏本地存储,但是在AdMob有机会将其删除时,它就会被加载。但是,在后续重新加载时,它将被重置。我已经通过添加

解决了这个问题
window.setTimeout(saveSettings, 5000);

我加载了localStorage设置后。这当然是非常hackish ..但似乎到目前为止做的伎俩。另请注意,我只使用AdMob的测试广告。