Браузер Localstorage заблокирован StartApp/adMob/mobileCore
Мне наконец удалось внедрить StartApp в мой проект Cordova, и когда все выглядело хорошо, появилась самая большая проблема. StartApp как-то портит мою базу данных localalstorage. Это также происходит с adMob, как я видел в Интернете. Когда я удерживаю среднюю кнопку, чтобы войти в последние приложения, и принудительно закрываю свое приложение, в следующий раз, когда я открываю его, все из локального хранилища, похоже, вылетает. Я не уверен, как, но если я войду и закрою его несколько раз, локальное хранилище получит свои старые значения, чем снова потеряет их.
Я уверен, что это Startapp, потому что если я прокомментирую:StartAppSDK.init(this, "xxx", "xxx", true);
все снова работает нормально. Я прочитал в Интернете, что это может быть конфликт между StartApp (а также случается с adMob) и localalstorage. Одним из способов является задержка инициализации StartApp, как я делал в своем коде. Кажется, это работает, но у меня возникает другая проблема: после загрузки баннера с помощью этого метода: он обновляется каждую секунду, а не 5-6 секунд, как раньше, и это действительно расстраивает (баннер почти не катится неограниченно, и я не могу действительно читать объявление). И еще одна проблема этого обходного пути заключается в том, что баннер пропускает несколько пикселей слева и справа от него. Таким образом, ширина немного сузилась и выглядит не очень хорошо.
Обратите внимание: я заметил, что безразлично, какой метод я использую для инициализации StartApp, когда устройство включено. Пауза. Я получаю СБОЙ БИНДЕРА В logcat. Но все работает отлично. Код в onPuse и onResume запускается. Я предполагаю, что, возможно, это является причиной того, что StartApp испортил локальное хранилище (потому что это происходит только тогда, когда я принудительно закрываю приложение, и до того, как инициируется событие принудительного закрытия onPause).
И иногда в onResume или при запуске приложения я получаю: E/Web Console: ключ аргумента Viewport "" не распознается и игнорируется. на http://www.startappexchange.com/:20
Также без какого-либо влияния на мое приложение, но, возможно, это может повлиять на местное хранилище..
Основной файл Java:
package com.Snap.What;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.JavascriptInterface;
import android.widget.RelativeLayout;
import org.apache.cordova.*;
import com.startapp.android.publish.StartAppAd;
import com.startapp.android.publish.StartAppSDK;
import com.startapp.android.publish.banner.Banner;
public class WhatSnap extends CordovaActivity
{
private StartAppAd startAppAd = new StartAppAd(this);
private ViewGroup layout;
private Handler mHandler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
super.init();
// Set by <content src="index.html" /> in config.xml
JavaScriptInterface jsInterface = new JavaScriptInterface(this);
appView.getSettings().setJavaScriptEnabled(true);
appView.addJavascriptInterface(jsInterface, "JSInterface");
super.loadUrl(Config.getStartUrl());
//super.loadUrl("file:///android_asset/www/index.html");
mHandler.postDelayed(new Runnable() {
public void run() {
doStuff();
}
}, 5000);
setLayout();
// showBanner();
}
public void doStuff(){
StartAppSDK.init(this, "xxx", "xxx", true);
startAppAd.loadAd(); // load the next ad
}
public class JavaScriptInterface {
private Activity activity;
public JavaScriptInterface(Activity activiy) {
this.activity = activiy;
}
@JavascriptInterface
public void displayBanner()
{
activity.runOnUiThread(new Runnable() {
public void run() {
//Code that interact with UI
initBanner();
}
});
}
@JavascriptInterface
public void displayexitAd()
{
activity.runOnUiThread(new Runnable() {
public void run() {
//Code that interact with UI
exitAd();
}
});
}
@JavascriptInterface
public void displayAd()
{
activity.runOnUiThread(new Runnable() {
public void run() {
//Code that interact with UI
showAd();
}
});
}
}
public void setLayout(){
root.removeView((View) appView);
layout = new RelativeLayout(this);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
layout.setLayoutParams(lp);
appView.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT));
appView.setVisibility(View.INVISIBLE);
layout.addView((View) appView);
setContentView(layout);
Log.e("setLayout", "setLayout");
}
public void initBanner(){
Banner startAppBanner = new Banner(this);
RelativeLayout.LayoutParams bannerParameters =
new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
bannerParameters.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
bannerParameters.addRule(RelativeLayout.CENTER_HORIZONTAL);
// Add to main Layout
layout.addView(startAppBanner, bannerParameters);
Log.e("showBanner", "showBanner");
}
public void exitAd(){
startAppAd.onBackPressed();
}
public void showAd(){
startAppAd.showAd(); // show the ad
startAppAd.loadAd(); // load the next ad
}
}
AndroidManifest.xml:
<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="10000" android:versionName="1.0.0" android:windowSoftInputMode="adjustPan" package="com.Snap.What" xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="preferExternal">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/app_name" android:launchMode="singleTop" android:name="WhatSnap" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.startapp.android.publish.list3d.List3DActivity"
android:theme="@android:style/Theme" />
<activity android:name="com.startapp.android.publish.AppWallActivity"
android:theme="@android:style/Theme.Translucent"
android:configChanges="orientation|keyboardHidden|screenSize" />
</application>
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
</manifest>
Я также видел другой возможный обходной путь для удаления кода mHandler и переопределения onAttachedToWindow, например:
@Override public void onAttachedToWindow() {
super.onAttachedToWindow();
doStuff();
};
Но иногда, когда я принудительно закрываю приложение, местное хранилище остается иногда нет.
Пожалуйста, помогите мне, я остался 3 дня, чтобы решить эту проблему, и ничего хорошего не случилось.