1

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

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);
}

私はCordova2.5btwを使用しています。

更新:AdModは引き続きローカルストレージを破損しますが、AdMobがそれを消去する機会があるまでにロードされます。ただし、その後のリロード時にリセットされます。それ以来、この動作を追加することで解決しました

window.setTimeout(saveSettings, 5000);

localStorage設定をロードした後。もちろん、これは非常にハックです。しかし、これまでのところうまくいくようです。また、AdMobのテスト広告のみを使用していることにも注意してください。

于 2013-06-06T07:51:46.690 に答える