diff --git a/platforms/android/app/src/main/AndroidManifest.xml b/platforms/android/app/src/main/AndroidManifest.xml
index 556e0db..3238e12 100644
--- a/platforms/android/app/src/main/AndroidManifest.xml
+++ b/platforms/android/app/src/main/AndroidManifest.xml
@@ -1,7 +1,7 @@
 <?xml version='1.0' encoding='utf-8'?>
 <manifest android:hardwareAccelerated="true" android:versionCode="10006" android:versionName="1.0.6" package="com.dalicitycard.app" xmlns:android="http://schemas.android.com/apk/res/android">
     <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
-    <application android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher" android:label="@string/launcher_name" android:supportsRtl="true">
+    <application android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher" android:label="@string/launcher_name" android:supportsRtl="true" android:usesCleartextTraffic="true">
         <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
             <intent-filter android:label="@string/launcher_name">
                 <action android:name="android.intent.action.MAIN" />
diff --git a/platforms/android/app/src/main/assets/www/js/main.js b/platforms/android/app/src/main/assets/www/js/main.js
index 8c211e9..78b896f 100644
--- a/platforms/android/app/src/main/assets/www/js/main.js
+++ b/platforms/android/app/src/main/assets/www/js/main.js
@@ -173,14 +173,14 @@
         $("#nodata").hide();
         var param = {
             "pageno": 1,
-            "platform":"android"
+            "platform":device.platform
         }
         V1Bills(param, function(ok, ret) {
             if (ok) {
                 console.log(ret)
                 if (ret.code == 200) {
-                    //app.checkVersion(ret.version,ret.minversion,ret.versionmsg,ret.versionurl);
-                    app.checkVersion("1.3.9","1","new func","https://shouji.baidu.com/software/26706357.html");
+                    app.checkVersion(ret.version,ret.minversion,ret.versionmsg,ret.versionurl);
+                    //app.checkVersion("1.3.9","1","new func","https://shouji.baidu.com/software/26706357.html");
                     $("#maingt").text(ret.t + "！")
                     $("#user-amount").text(ret.amount)
                     $("#user-point").text(ret.point)
@@ -220,7 +220,7 @@
     checkVersion:function(ver,minver,m,url){
         cordova.getAppVersion.getVersionNumber(function (version) {
             //alert(version);
-            alert(version);
+            //alert(version);
             if(ver>version){
                 var cum = new auiDialog({});
                 var confirm = cum.alert({
diff --git a/platforms/android/app/src/main/assets/www/js/scan.js b/platforms/android/app/src/main/assets/www/js/scan.js
index cc50c0b..3b50ed7 100644
--- a/platforms/android/app/src/main/assets/www/js/scan.js
+++ b/platforms/android/app/src/main/assets/www/js/scan.js
@@ -83,7 +83,7 @@
         url=url+'?userid='+userid;
     }
   }
-  var ref = cordova.InAppBrowser.open(url, '_blank',"location=yes,beforeload=yes");
+  var ref = cordova.InAppBrowser.open(url, '_blank',"location=yes,beforeload=yes,clearcache=yes");
   ref.addEventListener('loadstart', function(params){
      if (params.url.indexOf("yy.dlsmk.cn")>=0) {
        if (params.url.indexOf("userid")<0) {
@@ -98,10 +98,10 @@
                ref.close();
                window.location = "main.html"
            });
+           return;
        }
      }
-  });
-  //ref.show();
+  })
 }
 
 function showRet1(url) {
@@ -151,7 +151,7 @@
     }).addEventListener(cordova.ThemeableBrowser.EVT_WRN, function(e) {
         console.log(e.message);
     }).addEventListener('loadstart', function(params,e){
-      console.log("11111111"+JSON.stringify(params));
+
       if (params.url.indexOf("yy.dlsmk.cn")>=0) {
         if (params.url.indexOf("userid")<0) {
             if(params.url.indexOf("?")>0){
diff --git a/www/js/scan.js b/www/js/scan.js
index cc50c0b..3b50ed7 100644
--- a/www/js/scan.js
+++ b/www/js/scan.js
@@ -83,7 +83,7 @@
         url=url+'?userid='+userid;
     }
   }
-  var ref = cordova.InAppBrowser.open(url, '_blank',"location=yes,beforeload=yes");
+  var ref = cordova.InAppBrowser.open(url, '_blank',"location=yes,beforeload=yes,clearcache=yes");
   ref.addEventListener('loadstart', function(params){
      if (params.url.indexOf("yy.dlsmk.cn")>=0) {
        if (params.url.indexOf("userid")<0) {
@@ -98,10 +98,10 @@
                ref.close();
                window.location = "main.html"
            });
+           return;
        }
      }
-  });
-  //ref.show();
+  })
 }
 
 function showRet1(url) {
@@ -151,7 +151,7 @@
     }).addEventListener(cordova.ThemeableBrowser.EVT_WRN, function(e) {
         console.log(e.message);
     }).addEventListener('loadstart', function(params,e){
-      console.log("11111111"+JSON.stringify(params));
+
       if (params.url.indexOf("yy.dlsmk.cn")>=0) {
         if (params.url.indexOf("userid")<0) {
             if(params.url.indexOf("?")>0){
