Przeglądaj źródła

[修改]加入多进程,并修复多进程情况微信登录失败

zeki 5 lat temu
rodzic
commit
0640002902

+ 8 - 6
app/src/developSheeptest/java/com/sheep/jiuyan/samllsheep/wxapi/WXEntryActivity.java

@@ -2,9 +2,7 @@ package com.sheep.jiuyan.samllsheep.wxapi;
 
 import android.content.Intent;
 import android.os.Bundle;
-import android.util.Log;
 
-import com.alibaba.fastjson.JSONObject;
 import com.sheep.gamegroup.event.WXLoginAuthEvent;
 import com.sheep.gamegroup.model.entity.MiniPayResult;
 import com.sheep.gamegroup.util.*;
@@ -52,9 +50,11 @@ public class WXEntryActivity extends WXCallbackActivity {//implements IWXAPIEven
         if (resp instanceof SendAuth.Resp) {
             if (resp.errCode == BaseResp.ErrCode.ERR_OK) {
                 String code = ((SendAuth.Resp) resp).code;
-                  ProcessEventBusUtil.postEvent(this, new WXLoginAuthEvent(code));
+                EventBus.getDefault().post(new WXLoginAuthEvent(code));
+                ProcessEventUtil.sendProcessEvent(this,new WXLoginAuthEvent(code),ProcessEventUtil.EVENT_WX_LOGIN_AUTH);
             } else {
-                ProcessEventBusUtil.postEvent(this, new WXLoginAuthEvent(null));
+                EventBus.getDefault().post( new WXLoginAuthEvent(null));
+                ProcessEventUtil.sendProcessEvent(this,new WXLoginAuthEvent(null),ProcessEventUtil.EVENT_WX_LOGIN_AUTH);
             }
         } else if (resp instanceof WXLaunchMiniProgram.Resp) {
             WXLaunchMiniProgram.Resp miniResp = (WXLaunchMiniProgram.Resp) resp;
@@ -70,8 +70,10 @@ public class WXEntryActivity extends WXCallbackActivity {//implements IWXAPIEven
                 code = "9001";
                 pr.errCode = 1;
             }
-            ProcessEventBusUtil.postEvent(this, pr);
-            //EventBus.getDefault().post(pr);
+
+            EventBus.getDefault().post(pr);
+            ProcessEventUtil.sendProcessEvent(this,pr,ProcessEventUtil.EVENT_PAY_RESP);
+
             String frompackage = QQUtil.getWxPayFrom(SheepApp.getInstance(), result.prepayId);
             String outorderno = QQUtil.getWxPayOrderNo(SheepApp.getInstance(), result.prepayId);
             int fromorient = QQUtil.getWxPayOrient(SheepApp.getInstance(), result.prepayId);

+ 1 - 0
app/src/main/AndroidManifest.xml

@@ -475,6 +475,7 @@
                 android:name="com.sheep.gamegroup.view.activity.ActWebX5NewProcess"
                 android:configChanges="orientation|screenSize"
                 android:exported="true"
+                android:process=":newWeb"
                 android:screenOrientation="portrait"
                 android:theme="@style/AppActionTheme"/>
 

+ 3 - 2
app/src/main/java/com/sheep/gamegroup/module/pay/activity/SheepWXPayEntryActivity.java

@@ -3,6 +3,7 @@ package com.sheep.gamegroup.module.pay.activity;
 import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
+import com.sheep.gamegroup.event.WXLoginAuthEvent;
 import com.sheep.gamegroup.util.*;
 import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.tencent.mm.opensdk.constants.ConstantsAPI;
@@ -69,8 +70,8 @@ public abstract class SheepWXPayEntryActivity extends Activity implements IWXAPI
             }
             result = String.valueOf(resp.errCode + 9000);//"9000" 代表支付成功
         }
-        //ProcessEventBusUtil.postEvent(this,resp);
-        EventBus.getDefault().post(resp);
+        //EventBus.getDefault().post(resp);
+        ProcessEventUtil.sendProcessEvent(this,resp,ProcessEventUtil.EVENT_PAY_RESP);
 
         PayResp payResp = (PayResp) resp;
         String frompackage = QQUtil.getWxPayFrom(SheepApp.getInstance(), payResp.prepayId);

+ 1 - 0
app/src/main/java/com/sheep/gamegroup/module/task/fragments/FgtVideoTaskZK.java

@@ -6,6 +6,7 @@ import com.lygame.wrapper.interfaces.IRewardVideoLoadCallback;
 import com.lygame.wrapper.interfaces.IRewardVideoPlayCallback;
 import com.lygame.wrapper.sdk.LySdk;
 import com.sheep.gamegroup.util.LogUtil;
+
 import java.util.concurrent.atomic.AtomicReference;
 
 /**

+ 13 - 2
app/src/main/java/com/sheep/gamegroup/module/webview/fragment/BaseFgtWeb.java

@@ -147,14 +147,25 @@ public abstract class BaseFgtWeb extends BaseFragment implements UMShareListener
         return true;
     }
 
-    @Subscribe
-    public void onEventMainThread(PayResp resp) {
+
+    private void handlePayResp(PayResp resp){
         String result = "";
         if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
             result = String.valueOf(resp.errCode + 9000);//微信支付 0 为支付成功;支付宝为 "9000" 代表支付成功
         }
         loadJs(String.format(Locale.CHINA, "onAlipayResult('%s')", result));
     }
+    @Subscribe
+    public void onEventMainThread(PayResp resp) {
+        handlePayResp(resp);
+    }
+
+    @Override
+    protected void onProcessEvent(Object event) {
+        if(event instanceof PayResp){
+            handlePayResp((PayResp) event);
+        }
+    }
 
     protected TaskEty taskEty;
 

+ 12 - 3
app/src/main/java/com/sheep/gamegroup/module/webview/fragment/BaseFgtWebX5.java

@@ -20,7 +20,6 @@ import com.sheep.gamegroup.util.LogUtil;
 import com.sheep.gamegroup.util.SysAppUtil;
 import com.sheep.gamegroup.util.TestUtil;
 import com.sheep.gamegroup.util.UMConfigUtils;
-import com.sheep.gamegroup.view.activity.TaskDetailAct;
 import com.sheep.jiuyan.samllsheep.BuildConfig;
 import com.sheep.jiuyan.samllsheep.R;
 import com.sheep.jiuyan.samllsheep.SheepApp;
@@ -138,14 +137,24 @@ public abstract class BaseFgtWebX5 extends BaseFragment implements UMShareListen
         return true;
     }
 
-    @Subscribe
-    public void onEventMainThread(PayResp resp) {
+    private void handlePayResp(PayResp resp){
         String result = "";
         if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
             result = String.valueOf(resp.errCode + 9000);//微信支付 0 为支付成功;支付宝为 "9000" 代表支付成功
         }
         loadJs(String.format(Locale.CHINA, "onAlipayResult('%s')", result));
     }
+    @Subscribe
+    public void onEventMainThread(PayResp resp) {
+        handlePayResp(resp);
+    }
+
+    @Override
+    protected void onProcessEvent(Object event) {
+        if(event instanceof PayResp){
+            handlePayResp((PayResp) event);
+        }
+    }
 
     protected TaskEty taskEty;
 

+ 71 - 41
app/src/main/java/com/sheep/gamegroup/module/webview/fragment/FgtWebX5.java

@@ -24,8 +24,11 @@ import android.widget.ImageView;
 import android.widget.ProgressBar;
 import com.sheep.gamegroup.absBase.BaseActivity;
 import com.sheep.gamegroup.dateview.DateUtil;
+import com.sheep.gamegroup.event.WXLoginAuthEvent;
+import com.sheep.gamegroup.model.api.IWeb;
 import com.sheep.gamegroup.model.entity.WebParams;
 import com.sheep.gamegroup.util.*;
+import com.sheep.gamegroup.util.h5game.H5GameUtil;
 import com.sheep.gamegroup.util.js.KFZSJs;
 import com.sheep.gamegroup.view.activity.ActMain;
 import com.sheep.gamegroup.view.activity.MiddleSchemeAct;
@@ -36,6 +39,7 @@ import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.sheep.jiuyan.samllsheep.utils.G;
 import com.sheep.jiuyan.samllsheep.utils.SpUtils;
 import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
+import com.sheep.jiuyan.samllsheep.wxutil.WXAPIUtil;
 import com.tencent.smtt.export.external.interfaces.WebResourceError;
 import com.tencent.smtt.export.external.interfaces.WebResourceRequest;
 import com.tencent.smtt.export.external.interfaces.WebResourceResponse;
@@ -59,6 +63,7 @@ import java.util.Map;
 import butterknife.BindView;
 import cn.finalteam.rxgalleryfinal.utils.CameraUtil;
 import okhttp3.Call;
+import org.greenrobot.eventbus.EventBus;
 
 import static android.app.Activity.RESULT_OK;
 
@@ -81,6 +86,9 @@ public class FgtWebX5 extends BaseFgtWebX5 {
     private boolean needWxLogin = false;
     private KFZSJs kfzsJs;
 
+    //消消乐游戏关键字
+    private static final String KEYWORD_XXL = "block_puzzle";
+
     public String getFirstUrl() {
         return finallyUrl;
     }
@@ -97,11 +105,11 @@ public class FgtWebX5 extends BaseFgtWebX5 {
     }
 
     public void initView() {
-//        mWebView = new WebView(SheepApp.getInstance());
+        //mWebView = new WebView(SheepApp.getInstance());
         mWebView = new WebView(getActivity());
         //getSavedCookies();
         webContainer.addView(mWebView, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
-//        ViewUtil.setImage(act_web_loading_iv, R.drawable.gif_sheep_loading);
+        //ViewUtil.setImage(act_web_loading_iv, R.drawable.gif_sheep_loading);
         ViewUtil.setGif(act_web_loading_iv, R.drawable.gif_sheep_loading);
 
         if (webParams == null) {
@@ -138,6 +146,31 @@ public class FgtWebX5 extends BaseFgtWebX5 {
     public FgtWebX5() {
     }
 
+    /**
+     * 跨进程事件
+     */
+    @Override
+    protected void onProcessEvent(Object ev) {
+        if (ev instanceof WXLoginAuthEvent) {
+            Log.d("######","···广播 回调登录"+getWebUrl());
+            EventBus.getDefault().unregister(this);
+            if (!TextUtils.isEmpty(((WXLoginAuthEvent) ev).code)) {
+                WXAPIUtil.loadWXUserToken(((WXLoginAuthEvent) ev).code, (ret, openid, accessToken, refreshToken) -> {
+                    Map<String, String> params = new HashMap<>();
+                    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);
+                    H5GameUtil.loadThirdPartUserInfo(this, getActivity(), "wx", params);
+                });
+            } else {
+                G.shortToast("微信授权失败");
+                ((IWeb) getActivity()).loadJs("handleLogin(2)");
+            }
+        }
+    }
+
     //初始化js代码数据
     private void initJsData(final String url, String jsUrl) {
         OkHttpUtils.get()
@@ -224,26 +257,11 @@ public class FgtWebX5 extends BaseFgtWebX5 {
         webSetting.setUserAgentString(getSheepUserAgent());
     }
 
-    @Override
-    public void onDestroy() {
-        if (act_web_loading_iv != null) {
-            try {
-                act_web_loading_iv.clearAnimation();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        super.onDestroy();
-    }
-
-    //消消乐游戏关键字
-    private static final String KEYWORD_XXL = "block_puzzle";
-
     public void onDetach() {
         if (mWebView != null) {
             try {
                 if (getWebUrl() != null && getWebUrl().contains(KEYWORD_XXL)) {
-                    getGameUserInfo(false);
+                    getXXLGameUserInfo(false);
                 }
                 if (mWebView.getParent() != null) {
                     ((ViewGroup) mWebView.getParent()).removeView(mWebView);
@@ -261,9 +279,27 @@ public class FgtWebX5 extends BaseFgtWebX5 {
         super.onDetach();
     }
 
-    /**
-     *
-     */
+    @Override
+    public void onResume() {
+        super.onResume();
+        if (onResumeCount > 0 && mWebView != null && webParams != null && webParams.isRefreshClick()) {
+            loadJs("refreshClick()");
+        }
+        onResumeCount++;
+    }
+
+    @Override
+    public void onDestroy() {
+        if (act_web_loading_iv != null) {
+            try {
+                act_web_loading_iv.clearAnimation();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        super.onDestroy();
+    }
+
     public static final int INPUT_FILE_REQUEST_CODE = 1;
     private ValueCallback<Uri> mUploadMessage;
     private final static int FILECHOOSER_RESULTCODE = 2;
@@ -272,6 +308,8 @@ public class FgtWebX5 extends BaseFgtWebX5 {
 
     private String mCameraPhotoPath;
 
+
+
     private void loadUrl(final String url) {
 
         mWebView.setWebChromeClient(new WebChromeClient() {
@@ -414,10 +452,11 @@ public class FgtWebX5 extends BaseFgtWebX5 {
 //                return WebResourceResponseAdapter.adapter(WebViewCacheInterceptorInst.getInstance().interceptRequest(WebResourceRequestAdapter.adapter(webResourceRequest)));
 //            }
 
+
             @Override
             public WebResourceResponse shouldInterceptRequest(WebView webView, String s) {
                 if (url.contains("h5.qzone.qq.com")) {
-                    if (s.equals("https://qzonestyle.gtimg.cn/qz-proj/qz-common/img/m-error/pic-error.png") || s.equals("https://qzonestyle.gtimg.cn/qz-proj/qz-common/page-error.css")) {
+                    if (s.equals("https://qzonestyle.gtimg.cn/qz-proj/qz-common/img/m-error/pic-error.png")) {
                         //鱼死网破
                         needWxLogin = true;
                         kfzsJs.loginThirdPartApp("wx");
@@ -499,7 +538,7 @@ public class FgtWebX5 extends BaseFgtWebX5 {
                     CookieSyncManager.getInstance().sync();
                 }
                 if (getWebUrl().contains(KEYWORD_XXL)) {
-                    getGameUserInfo(true);
+                    getXXLGameUserInfo(true);
                 }
                 loadJs();
             }
@@ -584,15 +623,6 @@ public class FgtWebX5 extends BaseFgtWebX5 {
     private int onResumeCount = 0;
 
     @Override
-    public void onResume() {
-        super.onResume();
-        if (onResumeCount > 0 && mWebView != null && webParams != null && webParams.isRefreshClick()) {
-            loadJs("refreshClick()");
-        }
-        onResumeCount++;
-    }
-
-    @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (requestCode == FILECHOOSER_RESULTCODE) {
             if (null == mUploadMessage) return;
@@ -652,14 +682,6 @@ public class FgtWebX5 extends BaseFgtWebX5 {
         }
     }
 
-    // 注入js函数监听
-    public void loadJs() {
-
-        if (TextUtils.isEmpty(js)) return;
-        ViewUtil.loadJs(mWebView, getJs());
-        LogUtil.println("ActWebX5", "loadJs", js);
-    }
-
     private String js;
 
     private String getJs() {
@@ -668,9 +690,17 @@ public class FgtWebX5 extends BaseFgtWebX5 {
         return BuildConfig.DEBUG ? testJsStart + "\n" + js : releaseJsStart + "\n" + js;
     }
 
+    // 注入js函数监听
+    public void loadJs() {
+        if (TextUtils.isEmpty(js)) return;
+        ViewUtil.loadJs(mWebView, getJs());
+        LogUtil.println("ActWebX5", "loadJs", js);
+    }
+
     private static final String KEY_GAME_USER_INFO = "key_game_user_info";
 
-    private void getGameUserInfo(boolean shouldLoad) {
+    //获取方块消消乐的本地用户信息
+    private void getXXLGameUserInfo(boolean shouldLoad) {
         String js = "window.localStorage.getItem('userInfo');";
         mWebView.evaluateJavascript(js, new ValueCallback<String>() {
             @Override

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

@@ -93,7 +93,7 @@ public class AppUtil {
     }
 
     public static boolean isWebProcess(Context context){
-        return getCurProcessName(context).contains("webProcess");
+        return getCurProcessName(context).contains("newWeb");
     }
 
     public static String getCurProcessName(Context context){

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

@@ -7,6 +7,7 @@ import android.content.pm.PackageManager;
 import android.net.Uri;
 import android.os.Bundle;
 import android.text.TextUtils;
+import android.util.Log;
 import android.view.View;
 import cn.finalteam.rxgalleryfinal.utils.CameraUtil;
 import com.kfzs.cfyl.share_library.util.CallBackAPI;
@@ -70,10 +71,12 @@ import com.youmi.android.offer.BaseActYmPermissionCheck;
 import com.youmi.android.offer.YmConfig;
 import com.zhy.http.okhttp.OkHttpUtils;
 import com.zhy.http.okhttp.callback.FileCallBack;
+import io.reactivex.Completable;
 import io.reactivex.Observable;
 import io.reactivex.ObservableOnSubscribe;
 import io.reactivex.ObservableSource;
 import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.functions.Action;
 import io.reactivex.functions.Function;
 import io.reactivex.schedulers.Schedulers;
 import me.iwf.photopicker.PhotoPicker;
@@ -83,11 +86,14 @@ import org.afinal.simplecache.DataKey;
 import org.greenrobot.eventbus.EventBus;
 import org.xutils.ex.DbException;
 import rx.functions.Action1;
+
 import java.io.File;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
+import java.util.concurrent.TimeUnit;
+
 import static com.sheep.gamegroup.model.entity.TaskEty.*;
 import static com.sheep.gamegroup.module.game.activity.ActGameGroupOrGameDetail.AUTO_DOWNLOAD;
 import static com.sheep.gamegroup.module.game.activity.ActGameGroupOrGameDetail.KEY_HAS_WELFARE;
@@ -1057,7 +1063,7 @@ public class Jump2View {
         } else {
             refreshToken = FgtWebX5.getWXRefreshToken(context, host);
         }
-        if (TextUtils.isEmpty(refreshToken)) {
+        if (TextUtils.isEmpty(refreshToken) || refreshToken == null) {
             Jump2View.getInstance().goWeb(context, wp, true);
         } else {
             WXAPIUtil.refreshWXUserToken(refreshToken, (ret, openid, aToken, rToken) -> {

+ 0 - 25
app/src/main/java/com/sheep/gamegroup/util/ProcessEventBusUtil.java

@@ -1,25 +0,0 @@
-package com.sheep.gamegroup.util;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.util.Log;
-
-/**
- * 使用广播解决EventBus不能跨进程通讯的问题
- */
-public class ProcessEventBusUtil {
-    public static void postEvent(Context context, Object event) {
-        Log.d("!!!", "开始发送事件");
-        /*//是主进程,直接发送EventBus事件
-        EventBus.getDefault().post(event);*/
-
-        //不是在主进程,使用跨进程广播
-        Intent intent = new Intent();
-        intent.putExtra("eventJson", GsonUtils.getGlobalGson().toJson(event));
-        intent.setAction("flag");
-        intent.setComponent(new ComponentName(context.getPackageName(), ProcessEventBroadCastReceiver.class.getName()));
-        context.sendBroadcast(intent);
-
-    }
-}

+ 40 - 0
app/src/main/java/com/sheep/gamegroup/util/ProcessEventUtil.java

@@ -0,0 +1,40 @@
+package com.sheep.gamegroup.util;
+
+import android.content.Context;
+import android.content.Intent;
+import org.greenrobot.eventbus.EventBus;
+
+/**
+ * 跨进程广播事件辅助类
+ */
+public class ProcessEventUtil {
+    public static final String ACTION_BROADCAST_RECEIVER_PROCESS_EVENT = "action_broadcast_receiver_process_event";
+
+    //广播类型的key
+    public static final String KEY_BROADCAST_TYPE = "broadcast_type";
+
+    //跨进程事件的json的key
+    public static final String KEY_PROCESS_EVENT_JSON = "key_process_event_json";
+
+    //跨进程事件的类型的key
+    public static final String KEY_PROCESS_EVENT_TYPE = "key_process_event_type";
+
+    //广播类型-跨进程事件
+    public static final String TYPE_BROADCAST_PROCESS_EVENT = "broadcast_type_process_event";
+
+    //微信登录验证回调事件
+    public static final String EVENT_WX_LOGIN_AUTH = "event_wx_login_auth";
+
+    //支付回调事件
+    public static final String EVENT_PAY_RESP = "event_pay_resp";
+
+    public static void sendProcessEvent(Context context, Object event, String processEventType) {
+        EventBus.getDefault().post(event);
+        Intent intent = new Intent();
+        intent.setAction(ProcessEventUtil.ACTION_BROADCAST_RECEIVER_PROCESS_EVENT);
+        intent.putExtra(ProcessEventUtil.KEY_BROADCAST_TYPE, ProcessEventUtil.TYPE_BROADCAST_PROCESS_EVENT);
+        intent.putExtra(ProcessEventUtil.KEY_PROCESS_EVENT_TYPE, processEventType);
+        intent.putExtra(ProcessEventUtil.KEY_PROCESS_EVENT_JSON, GsonUtils.getGlobalGson().toJson(event));
+        context.sendBroadcast(intent);
+    }
+}

+ 102 - 0
app/src/main/java/com/sheep/gamegroup/util/h5game/H5GameUtil.java

@@ -0,0 +1,102 @@
+package com.sheep.gamegroup.util.h5game;
+
+import android.app.Activity;
+import android.net.Uri;
+import com.alibaba.fastjson.JSONObject;
+import com.sheep.gamegroup.model.api.IWeb;
+import com.sheep.gamegroup.model.entity.BaseMessage;
+import com.sheep.gamegroup.model.util.SheepSubscriber;
+import com.sheep.gamegroup.util.LogUtil;
+import com.sheep.jiuyan.samllsheep.SheepApp;
+import com.sheep.jiuyan.samllsheep.wxutil.WXAPIUtil;
+import com.umeng.socialize.UMAuthListener;
+import com.umeng.socialize.UMShareAPI;
+import com.umeng.socialize.bean.SHARE_MEDIA;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+
+import java.util.Map;
+
+public class H5GameUtil {
+
+    public static void loadThirdPartUserInfo(final IWeb iWeb,final Activity activity, final String platform, Map<String, String> cookies) {
+        if ("wx".equals(platform)) {
+            WXAPIUtil.loadWXUserInfo(cookies.get("openid"), cookies.get("access_token"), (ret, info) -> {
+                if (ret) {
+                    onH5GameFinally(iWeb,info.get("screen_name"), platform, cookies);
+                } else {
+                    onH5GameFinally(iWeb,"", platform, cookies);
+                }
+            });
+        } else {
+            UMShareAPI.get(SheepApp.getInstance()).getPlatformInfo(activity, "wx".equals(platform) ? SHARE_MEDIA.WEIXIN : SHARE_MEDIA.QQ,
+                    new UMAuthListener() {
+
+                        @Override
+                        public void onStart(SHARE_MEDIA share_media) {
+
+                        }
+
+                        @Override
+                        public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
+                            onH5GameFinally(iWeb,map.get("screen_name"), platform, cookies);
+                        }
+
+                        @Override
+                        public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
+                            throwable.printStackTrace();
+                            onH5GameFinally(iWeb,"", platform, cookies);
+                        }
+
+                        @Override
+                        public void onCancel(SHARE_MEDIA share_media, int i) {
+
+                        }
+                    });
+        }
+    }
+
+    public static void onH5GameFinally(IWeb iWeb,String nickName, String platform, Map<String, String> cookies) {
+        cookies.put("nickname", nickName);
+        Uri uri = Uri.parse(iWeb.getWebUrl());
+        String host = uri.getHost();
+        iWeb.setCookies(host, cookies);
+        iWeb.loadJs("handleLogin(1)");
+        iWeb.loadJs("window.location.reload()");
+        H5GameUtil.submitH5GameRecord(
+                2,
+                cookies.get("openid"),
+                nickName,
+                iWeb.getWebTitle(),
+                iWeb.getWebUrl(),
+                "wx".equals(platform) ? 1 : 2,
+                -1
+        );
+    }
+
+    public static void submitH5GameRecord(int type, String openId, String nickname, String gameName, String gameUrl, int accountPlatform, int actionPlatform) {
+        JSONObject json = new JSONObject();
+        json.put("openid", openId);
+        json.put("nickname", nickname);
+        json.put("type", type);
+        json.put("game_name", gameName);
+        json.put("game_url", gameUrl);
+        json.put("account_platform", accountPlatform);
+        json.put("action_platform", actionPlatform);
+        SheepApp.getInstance().getNetComponent().getApiService().recordH5GameAction(json)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
+                    @Override
+                    public void onError(BaseMessage baseMessage) {
+                        LogUtil.logE(baseMessage != null ? baseMessage.getErrorMsg() + "" : "api错误");
+                    }
+
+                    @Override
+                    public void onNext(BaseMessage baseMessage) {
+                        LogUtil.logI("记录完成");
+                    }
+                });
+    }
+
+}

+ 10 - 108
app/src/main/java/com/sheep/gamegroup/util/js/KFZSJs.java

@@ -12,9 +12,7 @@ import android.support.v4.content.ContextCompat;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.View;
-import android.webkit.CookieSyncManager;
 import android.webkit.JavascriptInterface;
-
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.sheep.gamegroup.absBase.AbsObserver;
@@ -38,24 +36,9 @@ import com.sheep.gamegroup.module.qrcode.ScanQRCodeActivity;
 import com.sheep.gamegroup.module.user.activity.ActVip;
 import com.sheep.gamegroup.module.user.model.BuyVipReq;
 import com.sheep.gamegroup.module.user.model.TempUserResp;
-import com.sheep.gamegroup.util.ApiJSONUtil;
-import com.sheep.gamegroup.util.ApiUtil;
-import com.sheep.gamegroup.util.CommonUtil;
-import com.sheep.gamegroup.util.Constant;
-import com.sheep.gamegroup.util.ContactUtil;
-import com.sheep.gamegroup.util.DataKey;
-import com.sheep.gamegroup.util.DataUtil;
-import com.sheep.gamegroup.util.DeviceUtil;
-import com.sheep.gamegroup.util.Jump2View;
-import com.sheep.gamegroup.util.ListUtil;
-import com.sheep.gamegroup.util.LocationUtils;
-import com.sheep.gamegroup.util.LogUtil;
-import com.sheep.gamegroup.util.MainTab;
-import com.sheep.gamegroup.util.QQUtil;
-import com.sheep.gamegroup.util.SMSUtil;
-import com.sheep.gamegroup.util.StringUtils;
-import com.sheep.gamegroup.util.SysAppUtil;
-import com.sheep.gamegroup.util.ViewUtil;
+import com.sheep.gamegroup.module.webview.fragment.FgtWebX5;
+import com.sheep.gamegroup.util.*;
+import com.sheep.gamegroup.util.h5game.H5GameUtil;
 import com.sheep.gamegroup.util.share.ShareLinkConfig;
 import com.sheep.gamegroup.view.activity.ActInvitation;
 import com.sheep.gamegroup.view.activity.ActMain;
@@ -73,16 +56,13 @@ import com.sheep.jiuyan.samllsheep.utils.SpUtils;
 import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
 import com.sheep.jiuyan.samllsheep.wxutil.WXAPIUtil;
 import com.tencent.smtt.sdk.CookieManager;
-import com.umeng.socialize.ShareAction;
 import com.umeng.socialize.UMAuthListener;
 import com.umeng.socialize.UMShareAPI;
 import com.umeng.socialize.UMShareListener;
 import com.umeng.socialize.bean.SHARE_MEDIA;
-
 import org.greenrobot.eventbus.EventBus;
 import org.greenrobot.eventbus.Subscribe;
 
-import java.net.URI;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
@@ -832,7 +812,7 @@ public class KFZSJs {
                 String cookies = CookieManager.getInstance().getCookie(host);
                 Map<String, String> cookieMap = StringUtils.string2Map(cookies, ";", "=");
 
-                submitH5GameRecord(
+                H5GameUtil.submitH5GameRecord(
                         3,
                         cookieMap.get("openid"),
                         cookieMap.get("nickname"),
@@ -889,7 +869,7 @@ public class KFZSJs {
                 String cookies = CookieManager.getInstance().getCookie(host);
                 Map<String, String> cookieMap = StringUtils.string2Map(cookies, ";", "=");
 
-                submitH5GameRecord(
+                H5GameUtil.submitH5GameRecord(
                         3,
                         cookieMap.get("openid"),
                         cookieMap.get("nickname"),
@@ -919,6 +899,7 @@ public class KFZSJs {
 
     @Subscribe
     public void whenWXAuth(WXLoginAuthEvent ev) {
+        Log.d("######","···EVENTBUS 回调登录");
         EventBus.getDefault().unregister(this);
         if (!TextUtils.isEmpty(ev.code)) {
             WXAPIUtil.loadWXUserToken(ev.code, (ret, openid, accessToken, refreshToken) -> {
@@ -928,7 +909,7 @@ public class KFZSJs {
                 params.put("openid", openid);
                 params.put("account_type", "wx");
                 params.put("app_id", Config.WX_AUTH_APP_ID);
-                loadThirdPartUserInfo("wx", params);
+                H5GameUtil.loadThirdPartUserInfo(iWeb, activity, "wx", params);
             });
         } else {
             G.shortToast("微信授权失败");
@@ -938,6 +919,7 @@ public class KFZSJs {
 
     @JavascriptInterface
     public void loginThirdPartApp(String type) {
+        Log.d("######","···三方登录中···");
         if ("wx".equals(type)) {
             WXAPIUtil.launchAuth(activity);
             if (!EventBus.getDefault().isRegistered(this)) {
@@ -959,8 +941,8 @@ public class KFZSJs {
                             params.put("openid", map.get("openid"));
                             params.put("account_type", type);
                             params.put("app_id", "wx".equals(type) ? Config.WX_AUTH_APP_ID : Config.QQ_APP_ID);
-                            loadThirdPartUserInfo(type, params);
-//                        onFinally("", type, params);
+                            H5GameUtil.loadThirdPartUserInfo(iWeb, activity, type, params);
+                            //onFinally("", type, params);
                         }
 
                         @Override
@@ -977,86 +959,6 @@ public class KFZSJs {
         }
     }
 
-    private void loadThirdPartUserInfo(final String platform, Map<String, String> cookies) {
-        if ("wx".equals(platform)) {
-            WXAPIUtil.loadWXUserInfo(cookies.get("openid"), cookies.get("access_token"), (ret, info) -> {
-                if (ret) {
-                    onFinally(info.get("screen_name"), platform, cookies);
-                } else {
-                    onFinally("", platform, cookies);
-                }
-            });
-        } else {
-            UMShareAPI.get(SheepApp.getInstance()).getPlatformInfo(activity, "wx".equals(platform) ? SHARE_MEDIA.WEIXIN : SHARE_MEDIA.QQ,
-                    new UMAuthListener() {
-
-                        @Override
-                        public void onStart(SHARE_MEDIA share_media) {
-
-                        }
-
-                        @Override
-                        public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
-                            onFinally(map.get("screen_name"), platform, cookies);
-                        }
-
-                        @Override
-                        public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
-                            throwable.printStackTrace();
-                            onFinally("", platform, cookies);
-                        }
-
-                        @Override
-                        public void onCancel(SHARE_MEDIA share_media, int i) {
-
-                        }
-                    });
-        }
-    }
-
-    private void onFinally(String nickName, String platform, Map<String, String> cookies) {
-        cookies.put("nickname", nickName);
-        Uri uri = Uri.parse(iWeb.getWebUrl());
-        String host = uri.getHost();
-        iWeb.setCookies(host, cookies);
-        iWeb.loadJs("handleLogin(1)");
-
-        submitH5GameRecord(
-                2,
-                cookies.get("openid"),
-                nickName,
-                iWeb.getWebTitle(),
-                iWeb.getWebUrl(),
-                "wx".equals(platform) ? 1 : 2,
-                -1
-        );
-    }
-
-    private void submitH5GameRecord(int type, String openId, String nickname, String gameName, String gameUrl, int accountPlatform, int actionPlatform) {
-        JSONObject json = new JSONObject();
-        json.put("openid", openId);
-        json.put("nickname", nickname);
-        json.put("type", type);
-        json.put("game_name", gameName);
-        json.put("game_url", gameUrl);
-        json.put("account_platform", accountPlatform);
-        json.put("action_platform", actionPlatform);
-        SheepApp.getInstance().getNetComponent().getApiService().recordH5GameAction(json)
-                .subscribeOn(Schedulers.io())
-                .observeOn(AndroidSchedulers.mainThread())
-                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
-                    @Override
-                    public void onError(BaseMessage baseMessage) {
-                        LogUtil.logE(baseMessage != null ? baseMessage.getErrorMsg() + "" : "api错误");
-                    }
-
-                    @Override
-                    public void onNext(BaseMessage baseMessage) {
-                        LogUtil.logI("记录完成");
-                    }
-                });
-    }
-
     @JavascriptInterface
     public void discountRechargeBack(String packageName) {
         ComponentName appName = new ComponentName(packageName, "com.yog.kothoth.view.activity.SSRechargeActivity");

+ 2 - 1
app/src/main/java/com/sheep/gamegroup/view/activity/SplashAct.java

@@ -312,7 +312,8 @@ public class SplashAct extends BaseActivity {
                 controllerRef.set(iSplashAdController);
                 ISplashAdController controller;
                 if ((controller = controllerRef.getAndSet(null)) != null) {
-                    zk_root.setVisibility(View.VISIBLE);
+                    if (zk_root != null)
+                        zk_root.setVisibility(View.VISIBLE);
                     controller.show(new ISplashAdCallback() {
                         @Override
                         public void onLoadFail(int i, String s) {

+ 56 - 2
app/src/main/java/com/sheep/jiuyan/samllsheep/base/BaseFragment.java

@@ -1,5 +1,9 @@
 package com.sheep.jiuyan.samllsheep.base;
 
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.pm.ActivityInfo;
 import android.os.Bundle;
 import android.support.annotation.IdRes;
@@ -12,10 +16,11 @@ import android.widget.FrameLayout;
 
 import com.sheep.gamegroup.absBase.AbsObserver;
 import com.sheep.gamegroup.absBase.BaseActivity;
+import com.sheep.gamegroup.event.WXLoginAuthEvent;
 import com.sheep.gamegroup.model.api.BackHandleInterface;
-import com.sheep.gamegroup.util.ActionUtil;
-import com.sheep.gamegroup.util.TestUtil;
+import com.sheep.gamegroup.util.*;
 import com.sheep.gamegroup.view.dialog.DialogLoading;
+import com.tencent.mm.opensdk.modelpay.PayResp;
 import com.trello.rxlifecycle2.components.support.RxFragment;
 
 import java.util.concurrent.TimeUnit;
@@ -124,6 +129,7 @@ public abstract class BaseFragment extends RxFragment {
         super.onViewCreated(view, savedInstanceState);
         butterKnifeBindView();
         onViewCreated();
+        initBroadcastReceiver();
     }
 
     protected boolean firstVisibleToUser = true;
@@ -149,6 +155,48 @@ public abstract class BaseFragment extends RxFragment {
     }
 
     /**
+     * 注册广播接收器
+     */
+    private void initBroadcastReceiver() {
+        IntentFilter intentFilter = new IntentFilter(ProcessEventUtil.ACTION_BROADCAST_RECEIVER_PROCESS_EVENT);
+        getContext().registerReceiver(getBroadcastReceiver(), intentFilter);
+    }
+
+    BroadcastReceiver broadcastReceiver;
+
+    protected BroadcastReceiver getBroadcastReceiver() {
+        if (broadcastReceiver == null) {
+            broadcastReceiver = new BroadcastReceiver() {
+                @Override
+                public void onReceive(Context context, Intent intent) {
+                    if(AppUtil.isWebProcess(context)){
+                        String broadcast_type = intent.getStringExtra(ProcessEventUtil.KEY_BROADCAST_TYPE);
+                        if (broadcast_type.equals(ProcessEventUtil.TYPE_BROADCAST_PROCESS_EVENT)) {
+                            switch (intent.getStringExtra(ProcessEventUtil.KEY_PROCESS_EVENT_TYPE)) {
+                                case ProcessEventUtil.EVENT_WX_LOGIN_AUTH:
+                                    Log.d("######","···收到微信登录广播");
+                                    onProcessEvent(GsonUtils.getGlobalGson().fromJson(intent.getStringExtra(ProcessEventUtil.KEY_PROCESS_EVENT_JSON), WXLoginAuthEvent.class));
+                                    break;
+                                case ProcessEventUtil.EVENT_PAY_RESP:
+                                    Log.d("######","···收到支付广播");
+                                    onProcessEvent(GsonUtils.getGlobalGson().fromJson(intent.getStringExtra(ProcessEventUtil.KEY_PROCESS_EVENT_JSON), PayResp.class));
+                                    break;
+                            }
+                        }
+                    }
+                }
+            };
+        }
+        return broadcastReceiver;
+    }
+
+    /**
+     * 处理广播来的跨进程事件
+     */
+    protected void onProcessEvent(Object event) {
+    }
+
+    /**
      * 万能的找View类
      *
      * @param id
@@ -221,6 +269,12 @@ public abstract class BaseFragment extends RxFragment {
         backHandleInterface.onSelectedFragment(this);
     }
 
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        getContext().unregisterReceiver(getBroadcastReceiver());
+    }
+
     public void setLandscape() {
         getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
     }

+ 21 - 9
app/src/sheep/java/com/sheep/jiuyan/samllsheep/wxapi/WXEntryActivity.java

@@ -2,6 +2,7 @@ package com.sheep.jiuyan.samllsheep.wxapi;
 
 import android.content.Intent;
 import android.os.Bundle;
+import android.util.Log;
 import com.sheep.gamegroup.event.WXLoginAuthEvent;
 import com.sheep.gamegroup.model.entity.MiniPayResult;
 import com.sheep.gamegroup.util.*;
@@ -15,21 +16,27 @@ import com.tencent.mm.opensdk.modelpay.PayResp;
 import com.tencent.mm.opensdk.openapi.IWXAPI;
 import com.tencent.mm.opensdk.openapi.WXAPIFactory;
 import com.umeng.socialize.weixin.view.WXCallbackActivity;
-import org.greenrobot.eventbus.EventBus;
 
 public class WXEntryActivity extends WXCallbackActivity {//implements IWXAPIEventHandler
 
+    static boolean hasCreate = false;
+
     @Override
     public void onCreate(Bundle bundle) {
         super.onCreate(bundle);
-        IWXAPI wxapi = WXAPIFactory.createWXAPI(this, Config.WX_AUTH_APP_ID, true);
-        wxapi.registerApp(Config.WX_AUTH_APP_ID);
-        wxapi.handleIntent(getIntent(), this);
+        if(!hasCreate){
+            Log.d("###WXEntryAct: ","onCreate");
+            IWXAPI wxapi = WXAPIFactory.createWXAPI(this, Config.WX_AUTH_APP_ID, true);
+            wxapi.registerApp(Config.WX_AUTH_APP_ID);
+            wxapi.handleIntent(getIntent(), this);
+            hasCreate = true;
+        }
         finish();
     }
 
     @Override
     public void onNewIntent(Intent newIntent) {
+        Log.d("###WXEntryAct: ","onNewIntent");
         IWXAPI wxapi = WXAPIFactory.createWXAPI(this, Config.WX_AUTH_APP_ID, true);
         wxapi.registerApp(Config.WX_AUTH_APP_ID);
         wxapi.handleIntent(getIntent(), this);
@@ -46,13 +53,16 @@ public class WXEntryActivity extends WXCallbackActivity {//implements IWXAPIEven
     @Override
     public void onResp(BaseResp resp) {
         if (resp instanceof SendAuth.Resp) {
+            Log.d("######","···收到微信登录成功的onResp");
             if (resp.errCode == BaseResp.ErrCode.ERR_OK) {
                 String code = ((SendAuth.Resp) resp).code;
-                //ProcessEventBusUtil.postEvent(this,new WXLoginAuthEvent(code));
-                EventBus.getDefault().post(new WXLoginAuthEvent(code));
+                WXLoginAuthEvent wxLoginAuthEvent = new WXLoginAuthEvent(code);
+                ProcessEventUtil.sendProcessEvent(this, wxLoginAuthEvent, ProcessEventUtil.EVENT_WX_LOGIN_AUTH);
+                //EventBus.getDefault().post(wxLoginAuthEvent);
             } else {
-                //ProcessEventBusUtil.postEvent(this,new WXLoginAuthEvent(null));
-                EventBus.getDefault().post(new WXLoginAuthEvent(null));
+                WXLoginAuthEvent wxLoginAuthEvent = new WXLoginAuthEvent(null);
+                ProcessEventUtil.sendProcessEvent(this, wxLoginAuthEvent, ProcessEventUtil.EVENT_WX_LOGIN_AUTH);
+                //EventBus.getDefault().post(wxLoginAuthEvent);
             }
         } else if (resp instanceof WXLaunchMiniProgram.Resp) {
             WXLaunchMiniProgram.Resp miniResp = (WXLaunchMiniProgram.Resp) resp;
@@ -68,7 +78,8 @@ public class WXEntryActivity extends WXCallbackActivity {//implements IWXAPIEven
                 code = "9001";
                 pr.errCode = 1;
             }
-            EventBus.getDefault().post(pr);
+            //EventBus.getDefault().post(pr);
+            ProcessEventUtil.sendProcessEvent(this, pr, ProcessEventUtil.EVENT_PAY_RESP);
             String frompackage = QQUtil.getWxPayFrom(SheepApp.getInstance(), result.prepayId);
             String outorderno = QQUtil.getWxPayOrderNo(SheepApp.getInstance(), result.prepayId);
             int fromorient = QQUtil.getWxPayOrient(SheepApp.getInstance(), result.prepayId);
@@ -79,5 +90,6 @@ public class WXEntryActivity extends WXCallbackActivity {//implements IWXAPIEven
         } else {
             super.onResp(resp);
         }
+        finish();
     }
 }