localStorageを利用するPhonegap/Cordovaアプリでadmobコードが初期化されると、localStorageがadmob広告ビューによってオーバーライドされるように見えます。
Cordova 2.2アプリで(SDKのv6.2.1を使用して)AdMobコードを初期化するためのコードは次のとおりです。
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