2012-01-13 5 views
2

javascript/HTML5 localStorage를 사용하는 Phonegap 앱 (Android)을 개발 중입니다. 앱이 정상적으로 작동하지만 앱에 에 AdMob을 추가하면 localStorage가 작동하지 않습니다. 의미 앱이 강제 종료되거나 휴대 전화 이 다시 시작되면 저장된 값이 삭제됩니다.Android + HTML5 (LocalStorage) + AdMob : 버그?

public class TestActivity extends DroidGap { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     super.loadUrl("file:///android_asset/www/index.html"); 

     // ADMOB: If comment, work. 
     /* 
     LinearLayout layout = super.root; 
     AdView adView = new AdView(this, AdSize.BANNER, **MY_CODE_ADMOB**); 
     layout.addView(adView); 
     AdRequest request = new AdRequest(); 
     adView.loadAd(request); 
     */ 
    } 
}   

감사합니다.

답변

10

광고를 시작하는 코드를 몇 초 지연시켜야합니다. 나를 위해 아래에서 일했습니다.

public class youActivity extends DroidGap { 
private Handler mHandler = new Handler(); 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    super.loadUrl("file:///android_asset/www/index.html"); 
    mHandler.postDelayed(new Runnable() { 
     public void run() { 
      doStuff(); 
     } 
    }, 5000); 
} 
private void doStuff() { 
    final String MY_AD_UNIT_ID = "yourAD_UNIT_ID"; 
    AdView adView; 
    // Create the adView 
    adView = new AdView(this, AdSize.BANNER, MY_AD_UNIT_ID); 
    LinearLayout layout = super.root; // this is the only change from the sample 
    // Add the adView to it 
    layout.addView(adView); 
    // Initiate a generic request to load it with an ad 
    adView.loadAd(new AdRequest()); 
} 
} 
+0

개인 처리기 mHandler = new Handler(); Eclipse에서 "처리기를 유형별로 해결할 수 없음"오류를 표시합니다. 제발 도와주세요 – siva565

+0

@ user1184211 충돌이 사라질 수 있도록 localstorage db 이름을 변경할 수 없습니까? 나는 당신이 제안한대로 SQL을 사용하려고했지만 그 asinchronous로 값을 얻을 수 없습니다 : ( –

0

나는 폰갭/코르도바 내 DB는 DB 위치에 APK에서 복사와 sqlite가 파일을 사용하여 스토리지 협력의 AdMob을 받고에서 같은 문제를 exeprienced했다. 여기에 언급 된 지연 해결 방법을 시도했습니다. 정확한 데이터로 데이터베이스에 액세스하려면 AdRequest를 만들기 전에 window.openDatabase("xxx", "1.0", "xxx", 1000000);을 수행해야합니다. 그것은 네드가있는 다른 페이지에서 다시 연결을 열면 데이터베이스가 비게 될 것이기 때문에 제 경우에는 해결책이 아닙니다.

이 문제를 해결 한 방법은 https://github.com/lite4cordova/Cordova-SQLitePlugin에있는 플러그인을 사용하는 것이 었습니다. 다른 방식으로 데이터베이스를 여는 것을 제외하고는 websql과 똑같이 작동합니다 (이미 쿼리를 작성한 경우 다시 작성하지 않아도됩니다).

var db = window.sqlitePlugin.openDatabase({name: "DB"}); 

0000000000000001.db 기본값 대신 DB.db 파일을 사용합니다. 이렇게하면 AdMob과의 충돌을 방지 할 수 있습니다. 조심하는 2 가지 :

  1. 플러그인은 ondeviceready 필요는 그냥 DB를 열고로드 할 수 에 문서화되지 trigerred합니다.

  2. 을 제공하는 sqlite 파일을 복사하는 경우 복사 할 위치를 조정해야합니다.

+0

그래서 우리는 localstorage db 이름을 변경할 수 없으므로 충돌이 사라질 것입니다? 나는 당신이 제안한대로 SQL을 사용하려고했지만 값을 얻을 수 없다. 그 asinchronous로 : ( –