hanjing vor 6 Jahren
Ursprung
Commit
fce267ce35

+ 3 - 3
app/src/main/java/com/sheep/gamegroup/module/login/LoginAct.java

@@ -308,10 +308,10 @@ public class LoginAct extends BaseUMActivity implements LoginController {
             G.showToast("微信授权失败");
             Log.i("wx auth", "wx auth result failed");
         } else {
-            WXAPIUtil.loadWXUserToken(ev.code, (ret, openId, token) -> {
+            WXAPIUtil.loadWXUserToken(ev.code, (ret, openId, accessToken, refreshToken) -> {
                 if (ret) {
                     JSONObject j = new JSONObject();
-                    j.put("code", token);
+                    j.put("code", accessToken);
                     j.put("username", openId);
                     j.put("scope", ChannelContent.getInstance().getChannel_name());
                     PreferenceUtils.setPrefString(SheepApp.getInstance(), UMConfigUtils.LOGIN_TYPE, UMConfigUtils.Source.WECHAT);
@@ -332,7 +332,7 @@ public class LoginAct extends BaseUMActivity implements LoginController {
                                     if (baseMessage != null) {
                                         LoginEntity loginEty = FastJsonUtils.toBean(JSONObject.toJSONString(baseMessage.getData()), LoginEntity.class);
                                         loginEty.setOpenid(openId);
-                                        loginEty.setAccesstoken(token);
+                                        loginEty.setAccesstoken(accessToken);
                                         if (TextUtils.isEmpty(SheepApp.getInstance().getGameCode())) {
                                             SpUtils.saveToken(SheepApp.getInstance(), loginEty.getToken());
                                             DataUtil.getInstance().initUserEntity(loginEty.getUser());

+ 40 - 2
app/src/main/java/com/sheep/gamegroup/module/webview/fragment/FgtWeb.java

@@ -1,6 +1,7 @@
 package com.sheep.gamegroup.module.webview.fragment;
 
 import android.annotation.SuppressLint;
+import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.graphics.Bitmap;
@@ -670,8 +671,8 @@ public class FgtWeb extends BaseFgtWeb {
         StringUtils.mergeMap(cookieMap, params);
         cookieMap.put("Domain", host);
         cookieMap.put("Path", "/");
-        cookieMap.put("Expires", DateUtil.getTimeEn(System.currentTimeMillis() + 15 * 86_400_000, "EEE, dd MMM yyyy HH:mm:ss") + " GMT");
-        cookieMap.put("MaxAge", "" + (15 * 86_400_000));
+        cookieMap.put("Expires", DateUtil.getTimeEn(System.currentTimeMillis() + 30 * 86_400_000, "EEE, dd MMM yyyy HH:mm:ss") + " GMT");
+        cookieMap.put("MaxAge", "" + (30 * 86_400_000));
         for (String key : cookieMap.keySet()) {
             cookieManager.setCookie(host, key + "=" + cookieMap.get(key));
         }
@@ -683,6 +684,43 @@ public class FgtWeb extends BaseFgtWeb {
         }
     }
 
+    public static String getWXRefreshToken(Context context, String host) {
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
+            CookieSyncManager.createInstance(context);
+        }
+        CookieManager cookieManager = CookieManager.getInstance();
+        cookieManager.setAcceptCookie(true);
+        String cookies = cookieManager.getCookie(host);
+        Map<String, String> cookieMap = StringUtils.string2Map(cookies, ";", "=");
+        if (cookieMap.containsKey("refresh_token")) {
+            return cookieMap.get("refresh_token");
+        } else {
+            return null;
+        }
+    }
+
+    public static void saveWXToken(Context context, String host, String accessToken, String refreshToken) {
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
+            CookieSyncManager.createInstance(context);
+        }
+        CookieManager cookieManager = CookieManager.getInstance();
+        cookieManager.setAcceptCookie(true);
+        String cookies = cookieManager.getCookie(host);
+        Map<String, String> cookieMap = StringUtils.string2Map(cookies, ";", "=");
+        cookieMap.put("access_token", accessToken);
+        cookieMap.put("refresh_token", refreshToken);
+        cookieMap.put("Expires", DateUtil.getTimeEn(System.currentTimeMillis() + 30 * 86_400_000, "EEE, dd MMM yyyy HH:mm:ss") + " GMT");
+        for (String key : cookieMap.keySet()) {
+            cookieManager.setCookie(host, key + "=" + cookieMap.get(key));
+        }
+        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
+            cookieManager.flush();
+        }
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
+            CookieSyncManager.createInstance(context).sync();
+        }
+    }
+
     public void initDataOnVisibleToUser() {
         if (onResumeCount > 0 && mWebView != null && webParams != null && webParams.isRefreshClick()) {
             loadJs("refreshClick()");

+ 32 - 2
app/src/main/java/com/sheep/gamegroup/module/webview/fragment/FgtWebX5.java

@@ -1,6 +1,7 @@
 package com.sheep.gamegroup.module.webview.fragment;
 
 import android.annotation.SuppressLint;
+import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.graphics.Bitmap;
@@ -669,8 +670,8 @@ public class FgtWebX5 extends BaseFgtWebX5 {
         StringUtils.mergeMap(cookieMap, params);
         cookieMap.put("Domain", host);
         cookieMap.put("Path", "/");
-        cookieMap.put("Expires", DateUtil.getTimeEn(System.currentTimeMillis() + 3000_000, "EEE, dd MMM yyyy HH:mm:ss") + " GMT");
-        cookieMap.put("MaxAge", "3000");
+        cookieMap.put("Expires", DateUtil.getTimeEn(System.currentTimeMillis() + (30 * 86_400_000), "EEE, dd MMM yyyy HH:mm:ss") + " GMT");
+        cookieMap.put("MaxAge", "" + (30 * 86_400_000));
         for (String key : cookieMap.keySet()) {
             cookieManager.setCookie(host, key + "=" + cookieMap.get(key));
         }
@@ -678,6 +679,35 @@ public class FgtWebX5 extends BaseFgtWebX5 {
         CookieSyncManager.createInstance(getContext()).sync();
     }
 
+    public static String getWXRefreshToken(Context context, String host) {
+        CookieSyncManager.createInstance(context);
+        CookieManager cookieManager = CookieManager.getInstance();
+        cookieManager.setAcceptCookie(true);
+        String cookies = cookieManager.getCookie(host);
+        Map<String, String> cookieMap = StringUtils.string2Map(cookies, ";", "=");
+        if (cookieMap.containsKey("refresh_token")) {
+            return cookieMap.get("refresh_token");
+        } else {
+            return null;
+        }
+    }
+
+    public static void saveWXToken(Context context, String host, String accessToken, String refreshToken) {
+        CookieSyncManager.createInstance(context);
+        CookieManager cookieManager = CookieManager.getInstance();
+        cookieManager.setAcceptCookie(true);
+        String cookies = cookieManager.getCookie(host);
+        Map<String, String> cookieMap = StringUtils.string2Map(cookies, ";", "=");
+        cookieMap.put("access_token", accessToken);
+        cookieMap.put("refresh_token", refreshToken);
+        cookieMap.put("Expires", DateUtil.getTimeEn(System.currentTimeMillis() + (30 * 86_400_000), "EEE, dd MMM yyyy HH:mm:ss") + " GMT");
+        for (String key : cookieMap.keySet()) {
+            cookieManager.setCookie(host, key + "=" + cookieMap.get(key));
+        }
+        cookieManager.flush();
+        CookieSyncManager.createInstance(context).sync();
+    }
+
     public void initDataOnVisibleToUser() {
         if (onResumeCount > 0 && mWebView != null && webParams != null && webParams.isRefreshClick()) {
             loadJs("refreshClick()");

+ 3 - 0
app/src/main/java/com/sheep/gamegroup/util/CommonUtil.java

@@ -569,6 +569,9 @@ public class CommonUtil {
             case IDConstant.JUMP_YF_SHOP://商城
                 Jump2View.getInstance().gotoYfShop(activity);
                 break;
+            case IDConstant.JUMP_H5_GAME://腾讯H5小游戏
+                Jump2View.getInstance().goH5Game(activity, jump.getUrl());
+                break;
             default:
                 String url = jump.getUrl();
                 if (TextUtils.isEmpty(url))

+ 1 - 0
app/src/main/java/com/sheep/gamegroup/util/IDConstant.java

@@ -53,6 +53,7 @@ public class IDConstant {
     public static final int JUMP_VIP = 310;//跳转vip
     public static final int JUMP_LONG_MAO = 311;//跳转龙猫
     public static final int JUMP_YF_SHOP = 312;//跳转优惠购物
+    public static final int JUMP_H5_GAME = 313;//跳转腾讯h5小游戏
 
     //TODO 这里移动积分兑换的id需要替换
     public static final int JUMP_EXCHANGE_CMCC = 1000025;//移动积分兑换

+ 26 - 1
app/src/main/java/com/sheep/gamegroup/util/Jump2View.java

@@ -75,6 +75,8 @@ import com.sheep.gamegroup.module.plugin.util.SheepPluginUtil;
 import com.sheep.gamegroup.module.skin.util.SkinUtil;
 import com.sheep.gamegroup.module.user.activity.ActVip;
 import com.sheep.gamegroup.module.user.model.UserAddressInfo;
+import com.sheep.gamegroup.module.webview.fragment.FgtWeb;
+import com.sheep.gamegroup.module.webview.fragment.FgtWebX5;
 import com.sheep.gamegroup.module.yf_shop.model.ReceiveCouponsCheckResq;
 import com.sheep.gamegroup.module.yf_shop.model.ReceiveCouponsResp;
 import com.sheep.gamegroup.util.share.ShareLinkConfig;
@@ -181,6 +183,8 @@ import com.sheep.jiuyan.samllsheep.utils.G;
 import com.sheep.jiuyan.samllsheep.utils.PackageUtil;
 import com.sheep.jiuyan.samllsheep.utils.SpUtils;
 import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
+import com.sheep.jiuyan.samllsheep.wxutil.WXAPIUtil;
+import com.snail.antifake.jni.EmulatorDetectUtil;
 import com.youmi.android.offer.BaseActYmPermissionCheck;
 import com.youmi.android.offer.YmConfig;
 import com.zhy.http.okhttp.OkHttpUtils;
@@ -1084,10 +1088,31 @@ public class Jump2View {
     }
 
     public void goH5Game(Context context, String url) {
+        Uri uri = Uri.parse(url);
+        String host = uri.getHost();
         WebParams wp = new WebParams(url, "游戏");
         wp.setNeedJsInteract(true);
 //        wp.setJsUrl(Config.SMALL_STATION_URL + Config.STATION_SMALL_SHEEP_H5GAME + "/bridge.js");
-        Jump2View.getInstance().goWeb(context, wp, true);
+        String refreshToken = null;
+        if (EmulatorDetectUtil.isEmulator()) {
+            refreshToken = FgtWeb.getWXRefreshToken(context, host);
+        } else {
+            refreshToken = FgtWebX5.getWXRefreshToken(context, host);
+        }
+        if (TextUtils.isEmpty(refreshToken)) {
+            Jump2View.getInstance().goWeb(context, wp, true);
+        } else {
+            WXAPIUtil.refreshWXUserToken(refreshToken, (ret, openid, aToken, rToken) -> {
+                if (ret) {
+                    if (EmulatorDetectUtil.isEmulator()) {
+                        FgtWeb.saveWXToken(context, host, aToken, rToken);
+                    } else {
+                        FgtWebX5.saveWXToken(context, host, aToken, rToken);
+                    }
+                }
+                Jump2View.getInstance().goWeb(context, wp, true);
+            });
+        }
     }
 
     /**

+ 3 - 2
app/src/main/java/com/sheep/gamegroup/util/js/KFZSJs.java

@@ -794,9 +794,10 @@ public class KFZSJs {
     public void whenWXAuth(WXLoginAuthEvent ev) {
         EventBus.getDefault().unregister(this);
         if (!TextUtils.isEmpty(ev.code)) {
-            WXAPIUtil.loadWXUserToken(ev.code, (ret, openid, token) -> {
+            WXAPIUtil.loadWXUserToken(ev.code, (ret, openid, accessToken, refreshToken) -> {
                 Map<String, String> params = new HashMap<>();
-                params.put("access_token", token);
+                params.put("access_token", accessToken);
+                params.put("refresh_token", refreshToken);
                 params.put("openid", openid);
                 params.put("account_type", "wx");
                 params.put("app_id", Config.WX_AUTH_APP_ID);

+ 4 - 3
app/src/main/java/com/sheep/gamegroup/view/activity/PersonalInfoAct.java

@@ -326,13 +326,14 @@ public class PersonalInfoAct extends AbsChooseImageActivity {
     @Subscribe
     public void whenWXAuth(WXLoginAuthEvent ev) {
         if (!TextUtils.isEmpty(ev.code)) {
-            WXAPIUtil.loadWXUserToken(ev.code, (ret, openid, token) -> {
+            WXAPIUtil.loadWXUserToken(ev.code, (ret, openid, accessToken, refreshToken) -> {
                 Map<String, String> params = new HashMap<>();
-                params.put("access_token", token);
+                params.put("access_token", accessToken);
+                params.put("refresh_token", refreshToken);
                 params.put("openid", openid);
                 params.put("account_type", "wx");
                 params.put("app_id", Config.WX_AUTH_APP_ID);
-                bindThird("wechat", token, openid);
+                bindThird("wechat", accessToken, openid);
             });
         } else {
             G.shortToast("微信授权失败");

+ 11 - 9
app/src/main/java/com/sheep/jiuyan/samllsheep/wxutil/WXAPIUtil.java

@@ -61,7 +61,7 @@ public class WXAPIUtil {
 
                     @Override
                     public void onResponse(String response, int id) {
-                        Log.i("wx auth", "wx auth "+response);
+                        LogUtil.logI("wx auth access token:" + response);
                         JSONObject resp = JSONObject.parseObject(response);
 //                        callback.callback(true, resp.getString("openid"), resp.getString("access_token"));
                         refreshWXUserToken(resp.getString("refresh_token"), callback);
@@ -69,11 +69,11 @@ public class WXAPIUtil {
                 });
     }
 
-    public static void refreshWXUserToken(String token, WXUserTokenCallback callback) {
+    public static void refreshWXUserToken(String refreshToken, WXUserTokenCallback callback) {
         OkHttpUtils.get()
-                .url("https://api.weixin.qq.com/sns/oauth2/refresh_token?" +
-                        "appid=" + Config.WX_AUTH_APP_ID +
-                        "&refresh_token=" + token +
+                .url("https://api.weixin.qq.com/sns/oauth2/refresh_token?tmp=" + System.currentTimeMillis() +
+                        "&appid=" + Config.WX_AUTH_APP_ID +
+                        "&refresh_token=" + refreshToken +
                         "&grant_type=refresh_token")
                 .build()
                 .execute(new StringCallback() {
@@ -85,9 +85,11 @@ public class WXAPIUtil {
 
                     @Override
                     public void onResponse(String response, int id) {
-                        Log.i("wx auth", "wx auth "+response);
+                        LogUtil.logI("wx auth refresh:" + response);
                         JSONObject resp = JSONObject.parseObject(response);
-                        callback.callback(true, resp.getString("openid"), resp.getString("access_token"));
+                        String refreshToken = resp.getString("refresh_token");
+
+                        callback.callback(true, resp.getString("openid"), resp.getString("access_token"), refreshToken);
                     }
                 });
     }
@@ -106,7 +108,7 @@ public class WXAPIUtil {
 
                     @Override
                     public void onResponse(String response, int id) {
-                        Log.i("wx auth", "wx user info: " + response);
+                        LogUtil.logI("wx auth user info: " + response);
                         JSONObject resultJson = JSONObject.parseObject(response);
                         if (resultJson.containsKey("errcode")) {
                             callback.callback(false, null);
@@ -126,7 +128,7 @@ public class WXAPIUtil {
     }
 
     public static interface WXUserTokenCallback {
-        void callback(boolean ret, String openid, String token);
+        void callback(boolean ret, String openid, String accessToken, String refreshToken);
     }
 
 }