【问题标题】:Localstorage overwritten with Cordova plus admob用 Cordova 和 admob 覆盖本地存储
【发布时间】:2013-07-14 01:37:32
【问题描述】:

当在使用 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

【问题讨论】:

  • 为什么 3000 值是 loadUrl 的一部分,而不是处理程序的一部分?你试过改变吗?

标签: android cordova admob


【解决方案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 的测试广告。

【讨论】:

  • 嗨,伙计。我面临同样的问题,我从 3 天开始就尝试让它工作。我真的不明白你的意思。你能再举例说明一下吗?您是否覆盖 onAttachedToWindow 并通过 window.setTimeout(saveSettings, 5000); 保存 adMob 设置?在你加载本地存储数据之后?非常感谢您的回答!
猜你喜欢
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
  • 2021-10-22
相关资源
最近更新 更多