当在使用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
答案 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的测试广告。