Commit eca4a56e3a55fb3e28f70e8e74e5552548b9d199

Authored by 韩亚云
1 parent ba42588e

三方登录修改集成测试

Showing 22 changed files with 537 additions and 258 deletions
cloud/third_tool/build.gradle
... ... @@ -68,5 +68,5 @@ dependencies {
68 68  
69 69 implementation project(':core:network')
70 70 implementation project(':core:base')
71   - implementation project (':cloud:user')
  71 +// implementation project (':cloud:user')
72 72 }
... ...
cloud/third_tool/src/debug/java/com/cnlive/strike/debug/wxapi/WXEntryActivity.java
... ... @@ -7,8 +7,9 @@ import android.os.Bundle;
7 7 import android.text.TextUtils;
8 8 import android.widget.Toast;
9 9  
10   -import com.cnlive.cloud.user.auth.UserService;
  10 +import com.alibaba.android.arouter.launcher.ARouter;
11 11 import com.cnlive.core.libs.base.application.AppConfig;
  12 +import com.cnlive.core.libs.base.arouter.user.CNLiveUserService;
12 13 import com.cnlive.core.libs.base.util.AlertUtil;
13 14 import com.cnlive.share.BuildConfig;
14 15 import com.cnlive.share.arouter.ARouterUtil;
... ... @@ -172,12 +173,13 @@ public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
172 173 try {
173 174 Gson gson = new Gson();
174 175 ShareIntegralTypeInfo integralTypeInfo = gson.fromJson(shareType, ShareIntegralTypeInfo.class);
175   -
  176 + CNLiveUserService service = (CNLiveUserService) ARouter.getInstance().navigation(CNLiveUserService.class);
  177 + String userId = service.getUid(this);
176 178 if ("witnessVideo".equals(integralTypeInfo.getShareType())) {
177 179 SharedPreferences preferences = this.getSharedPreferences("sharevideo", MODE_PRIVATE);
178   - boolean status = preferences.getBoolean(UserService.getUid(this), false);
  180 + boolean status = preferences.getBoolean(userId, false);
179 181 String newTime = DateTimeUtil.getCurrentTime();
180   - String oldtime = preferences.getString(UserService.getUid(this) + "time", "2019-04-10");
  182 + String oldtime = preferences.getString(userId + "time", "2019-04-10");
181 183 boolean sameDay = DateTimeUtil.isSameDay(newTime, oldtime);
182 184 if (!status) {
183 185 ARouterUtil.addIntegrationPic(this, "share_video", integralTypeInfo.getContentId(), "sharevideo");
... ... @@ -188,9 +190,9 @@ public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
188 190  
189 191 } else if (integralTypeInfo.getShareType() != null) {
190 192 SharedPreferences preferences = this.getSharedPreferences("sharearticle", MODE_PRIVATE);
191   - boolean status = preferences.getBoolean(UserService.getUid(this), false);
  193 + boolean status = preferences.getBoolean(userId, false);
192 194 String newTime = DateTimeUtil.getCurrentTime();
193   - String oldtime = preferences.getString(UserService.getUid(this) + "time", "2019-04-10");
  195 + String oldtime = preferences.getString(userId + "time", "2019-04-10");
194 196 boolean sameDay = DateTimeUtil.isSameDay(newTime, oldtime);
195 197 if (!status) {
196 198 ARouterUtil.addIntegrationPic(this, "share_article", integralTypeInfo.getContentId(), "sharearticle");
... ...
cloud/third_tool/src/main/AndroidManifest.xml
... ... @@ -14,7 +14,8 @@
14 14 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
15 15  
16 16 <application android:largeHeap="true">
17   -
  17 + <uses-library android:name="org.apache.http.legacy"
  18 + android:required="false" />
18 19 <meta-data
19 20 android:name="WEIBO_APPKEY"
20 21 android:value="3884700821" />
... ...
cloud/third_tool/src/main/java/com/cnlive/login/action/UserThirdAction.java deleted 100644 → 0
1   -package com.cnlive.login.action;
2   -
3   -import android.accounts.Account;
4   -import android.content.Context;
5   -import android.text.TextUtils;
6   -
7   -import com.cnlive.cloud.user.auth.UserService;
8   -import com.cnlive.cloud.user.model.CNLiveUserInfo;
9   -import com.cnlive.core.network.HttpConn;
10   -import com.cnlive.core.network.NetCallBack;
11   -import com.cnlive.core.network.model.BaseResult;
12   -import com.cnlive.core.network.model.UserData;
13   -
14   -import io.reactivex.Observable;
15   -
16   -//import com.cnlive.strike.user.model.CNLiveUserInfo;
17   -
18   -/**
19   - * created by hanyayun
20   - * on 2019/12/4
21   - */
22   -public class UserThirdAction {
23   -
24   -
25   - private static final int MAX_USER_COUNT = 1;
26   -
27   - public static void otherLogin(Context context, String thirdPartyPlat, String thirdPartyId, CallBack callBack) {
28   -
29   - HttpConn.action(UserThirdUtilAction.otherLogin(context, thirdPartyPlat, thirdPartyId), new NetCallBack<BaseResult<UserData>>() {
30   - @Override
31   - public void onRequestState(int state) {
32   - if (null != callBack) {
33   - callBack.callback(state, "", null);
34   - }
35   - }
36   -
37   - @Override
38   - public void onSuccess(BaseResult<UserData> data) {
39   - loginAppAction(data, context, "", "", true, callBack);
40   - }
41   -
42   - @Override
43   - public void onFailure(String errCode, String errMsg, Exception e) {
44   - if (null != callBack) {
45   - callBack.callback(Integer.parseInt(errCode), errMsg, null);
46   - }
47   - }
48   - });
49   - }
50   -
51   -
52   - public static void otherLoginBindMobile(Context context, String phone, String countryCode, String ems,
53   - String thirdPartyPlat, String thirdPartyId, String nickName, String gender,
54   - String location, String faceUrl, CallBack callBack) {
55   -
56   - HttpConn.action(UserThirdUtilAction.otherLoginBindMobile(context, phone, countryCode, ems,
57   - thirdPartyPlat, thirdPartyId, nickName, gender, location, faceUrl), new NetCallBack<BaseResult<UserData>>() {
58   - @Override
59   - public void onRequestState(int state) {
60   - if (null != callBack) {
61   - callBack.callback(state, "", null);
62   - }
63   - }
64   -
65   - @Override
66   - public void onSuccess(BaseResult<UserData> data) {
67   - loginAppAction(data,context, "", "", true, callBack);
68   - }
69   -
70   - @Override
71   - public void onFailure(String errCode, String errMsg, Exception e) {
72   -
73   - }
74   - });
75   - }
76   -
77   -
78   - private static Observable<CNLiveUserInfo> loginAppAction(BaseResult<UserData> data, Context context, String userName, String userPassword, boolean otherLogin, CallBack callBack) {
79   - CNLiveUserInfo userinfo = null;
80   - if (null == data || null == data.getData()) {
81   - if (null != callBack) {
82   - callBack.callback(-5, "获取账户信息失败 请重试.", null);
83   - }
84   - } else if (TextUtils.isEmpty(data.getData().getMobile())) {
85   - callBack.callback(-5, "绑定手机号已失效..", null);
86   - } else {
87   - //更新登录用户信息
88   - UserService userService = UserService.getInstance(context);
89   - userService.loginAppAccount(
90   - otherLogin ? data.getData().getMobile() : userName,
91   - otherLogin ? data.getData().getMobile() : userPassword,
92   - data.getData());
93   - //保留近期登录用户
94   - Account[] accounts = userService.getUserList();
95   - userinfo = userService.getAppAccount();
96   - if (accounts.length <= MAX_USER_COUNT) {
97   - callBack.callback(0, "", userinfo);
98   - } else {
99   - CNLiveUserInfo finalUserinfo = userinfo;
100   - userService.removeUser(accounts[0], future -> callBack.callback(0, "", finalUserinfo));
101   - }
102   - }
103   - return Observable.just(userinfo);
104   - }
105   -
106   -
107   - public interface CallBack {
108   - void callback(int state, String msg, Object object);
109   - }
110   -}
cloud/third_tool/src/main/java/com/cnlive/login/action/UserThirdUtilAction.java deleted 100644 → 0
1   -package com.cnlive.login.action;
2   -
3   -import android.content.Context;
4   -
5   -import com.cnlive.core.libs.base.application.AppConfig;
6   -import com.cnlive.core.network.api.ApiBaseServiceOpen;
7   -import com.cnlive.core.network.model.BaseResult;
8   -import com.cnlive.core.network.model.UserData;
9   -import com.cnlive.core.network.request.BaseRequest;
10   -
11   -import java.util.HashMap;
12   -import java.util.Map;
13   -
14   -import io.reactivex.Observable;
15   -
16   -/**
17   - * created by hanyayun
18   - * on 2019/12/4
19   - */
20   -public class UserThirdUtilAction {
21   -
22   - /**
23   - * 其他平台账户登录
24   - *
25   - * @param context
26   - * @param thirdPartyPlat 平台类型 1:sina 2:qq 3:weixin 4:renren
27   - * @param thirdPartyId 第三方用户ID
28   - * [qq: 建议使用openid, wx: 建议使用unionid, sina: 建议使用idstr];
29   - * 注意:同一用户在登录Sp下不同app时,thirdPartyId必须相同
30   - */
31   - public static Observable<BaseResult<UserData>> otherLogin(Context context, String thirdPartyPlat, String thirdPartyId) {
32   -
33   - Map<String, String> requestMap = new HashMap<>();
34   - requestMap.put("appId", AppConfig.getAppId());
35   - requestMap.put("thirdPartyPlat", thirdPartyPlat);
36   - requestMap.put("thirdPartyId", thirdPartyId);
37   - requestMap.put("frmId", AppConfig.getAppChannel());
38   - requestMap.put("clientPlat", "a");
39   - return BaseRequest.init().service(ApiBaseServiceOpen.class).loginIn3rdForWJJ(requestMap);
40   - }
41   -
42   - /**
43   - * 其他平台账户版定手机号并登录
44   - *
45   - * @param context
46   - * @param thirdPartyPlat 平台类型 1:sina 2:qq 3:weixin 4:renren
47   - * @param thirdPartyId 第三方用户ID
48   - * [qq: 建议使用openid, wx: 建议使用unionid, sina: 建议使用idstr];
49   - * 注意:同一用户在登录Sp下不同app时,thirdPartyId必须相同
50   - */
51   -
52   -
53   - public static Observable<BaseResult<UserData>> otherLoginBindMobile(Context context,
54   - String phone,
55   - String countryCode,
56   - String ems,
57   - String thirdPartyPlat,
58   - String thirdPartyId,
59   - String nickName,
60   - String gender,
61   - String location,
62   - String faceUrl) {
63   - Map<String, String> requestMap = new HashMap<>();
64   -
65   - requestMap.put("frmId", AppConfig.getAppChannel());
66   - requestMap.put("clientPlat", "a");
67   - requestMap.put("uuid", AppConfig.getAppUUID());
68   -
69   - requestMap.put("appId", AppConfig.getAppId());
70   - requestMap.put("mobile", phone);
71   - requestMap.put("countryCode", countryCode);
72   - requestMap.put("verificationCode", ems);
73   -
74   - requestMap.put("thirdPartyPlat", thirdPartyPlat);
75   - requestMap.put("thirdPartyId", thirdPartyId);
76   - requestMap.put("nickName", nickName);
77   - requestMap.put("gender", gender);
78   - requestMap.put("location", location);
79   - requestMap.put("faceUrl", faceUrl);
80   -
81   - return BaseRequest.init().service(ApiBaseServiceOpen.class).loginIn3rdAndMobileForWJJ(requestMap);
82   - }
83   -}
cloud/user/src/main/java/com/cnlive/cloud/user/frame/data/OtherUserInfo.java renamed to cloud/third_tool/src/main/java/com/cnlive/login/model/OtherUserInfo.java
1   -package com.cnlive.cloud.user.frame.data;
  1 +package com.cnlive.login.model;
2 2  
3 3 import java.io.Serializable;
4 4  
... ...
cloud/third_tool/src/main/java/com/cnlive/login/model/ThirdLoginInfo.java
1 1 package com.cnlive.login.model;
2 2  
3 3  
4   -import com.cnlive.cloud.user.frame.data.OtherUserInfo;
5 4  
6 5 /**
7 6 * 作者: 吴奎庆
... ...
cloud/third_tool/src/main/java/com/cnlive/login/utils/ThirdLoginUtil.java
1 1 package com.cnlive.login.utils;
2 2  
  3 +import android.app.Activity;
3 4 import android.content.Context;
  5 +import android.content.Intent;
4 6 import android.text.TextUtils;
  7 +import android.util.Log;
5 8  
6   -import com.cnlive.cloud.user.frame.data.OtherUserInfo;
  9 +import com.cnlive.core.libs.base.application.AppConfig;
  10 +import com.cnlive.core.libs.base.util.AlertUtil;
  11 +import com.cnlive.login.model.OtherUserInfo;
7 12 import com.cnlive.login.model.ThirdLoginInfo;
8 13 import com.cnlive.login.observer.ThirdLoginObservable;
  14 +import com.cnlive.share.BuildConfig;
9 15 import com.sina.weibo.sdk.auth.Oauth2AccessToken;
  16 +import com.sina.weibo.sdk.auth.WbAuthListener;
  17 +import com.sina.weibo.sdk.auth.WbConnectErrorMessage;
  18 +import com.sina.weibo.sdk.auth.sso.SsoHandler;
10 19 import com.sina.weibo.sdk.net.HttpManager;
11 20 import com.sina.weibo.sdk.net.WeiboParameters;
12 21 import com.tencent.connect.UserInfo;
  22 +import com.tencent.mm.opensdk.modelmsg.SendAuth;
  23 +import com.tencent.mm.opensdk.openapi.IWXAPI;
  24 +import com.tencent.mm.opensdk.openapi.WXAPIFactory;
13 25 import com.tencent.tauth.IUiListener;
14 26 import com.tencent.tauth.Tencent;
15 27 import com.tencent.tauth.UiError;
... ... @@ -37,6 +49,101 @@ import static com.tencent.open.SocialConstants.PARAM_OPEN_ID;
37 49 * 简介: 三方登陆的工具类
38 50 */
39 51 public class ThirdLoginUtil {
  52 +
  53 + //qq登录
  54 + private static Tencent mTencent;
  55 + public static final String ACOPE_ALL = "all";
  56 + private static Activity mContext;
  57 +
  58 + private static SsoHandler mSsoHandler;
  59 +
  60 + public static void init(Context context) {
  61 + synchronized (Tencent.class) {
  62 + if (mTencent == null) {
  63 + mTencent = Tencent.createInstance(BuildConfig.QQ_SHARE, context);
  64 + }
  65 + }
  66 + }
  67 +
  68 +
  69 + /**
  70 + * 是否安装qq
  71 + * @param context
  72 + * @return
  73 + */
  74 + public static boolean isQQInstalled(Activity context){
  75 + boolean isInstall = false;
  76 + mContext = context;
  77 + isInstall = mTencent.isQQInstalled(context);
  78 + if(isInstall) mTencent.login(context, ACOPE_ALL, listener);
  79 + return isInstall;
  80 + }
  81 +
  82 + /**
  83 + * 回调处理
  84 + * @param requestCode
  85 + * @param resultCode
  86 + * @param data
  87 + */
  88 + public static void getQQResult(int requestCode, int resultCode, Intent data){
  89 + Tencent.onActivityResultData(requestCode, resultCode, data, listener);
  90 + }
  91 +
  92 +
  93 + /**
  94 + * 微博登录
  95 + * @param activity
  96 + */
  97 + public static void loginWeibo(Activity activity){
  98 + if(mSsoHandler == null)mSsoHandler = new SsoHandler(activity);
  99 + mSsoHandler.authorize(new WbAuthListener() {
  100 + @Override
  101 + public void onSuccess(Oauth2AccessToken oauth2AccessToken) {
  102 + getWeiBoInfo(activity, oauth2AccessToken);
  103 + }
  104 +
  105 + @Override
  106 + public void cancel() {
  107 + AlertUtil.showDeftToast(activity, "取消登录");
  108 + }
  109 +
  110 + @Override
  111 + public void onFailure(WbConnectErrorMessage wbConnectErrorMessage) {
  112 + AlertUtil.showDeftToast(activity, "登录失败");
  113 + }
  114 + });
  115 + }
  116 +
  117 + /**
  118 + * 微博回调处理
  119 + * @param requestCode
  120 + * @param resultCode
  121 + * @param data
  122 + */
  123 + public static void getWeiboResult(int requestCode, int resultCode, Intent data){
  124 + if (mSsoHandler != null) {
  125 + try {
  126 + mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
  127 + } catch (Exception e) {
  128 + Log.e("新浪异常:", "", e);
  129 + }
  130 + }
  131 + }
  132 +
  133 + /**
  134 + * 微信登录
  135 + * @param activity
  136 + * @param wechatAppId
  137 + */
  138 + public static void loginWechat(Activity activity,String wechatAppId){
  139 + SendAuth.Req req = new SendAuth.Req();
  140 + req.scope = "snsapi_userinfo";
  141 + req.state = BuildConfig.SEND_AUTH_REQ_STATE;
  142 +
  143 + IWXAPI iwxapi = WXAPIFactory.createWXAPI(activity, AppConfig.getWechatAppid(), true);
  144 + iwxapi.registerApp(wechatAppId);
  145 + iwxapi.sendReq(req);
  146 + }
40 147 /**
41 148 * 获取微博信息
42 149 *
... ... @@ -206,4 +313,20 @@ public class ThirdLoginUtil {
206 313 });
207 314 }
208 315  
  316 + static IUiListener listener = new IUiListener() {
  317 + @Override
  318 + public void onComplete(Object o) {
  319 + getQQInfo(mContext, mTencent, o);
  320 + }
  321 +
  322 + @Override
  323 + public void onError(UiError uiError) {
  324 + AlertUtil.showDeftToast(mContext, "登录失败");
  325 + }
  326 +
  327 + @Override
  328 + public void onCancel() {
  329 + AlertUtil.showDeftToast(mContext, "取消登录");
  330 + }
  331 + };
209 332 }
... ...
cloud/third_tool/src/main/java/com/cnlive/share/arouter/ARouterUtil.java
... ... @@ -3,9 +3,9 @@ package com.cnlive.share.arouter;
3 3 import android.content.Context;
4 4  
5 5 import com.alibaba.android.arouter.launcher.ARouter;
  6 +import com.cnlive.core.libs.base.arouter.user.CNLiveUserService;
6 7 import com.cnlive.core.libs.base.util.SharedPreferencesHelper;
7 8 import com.cnlive.core.network.action.CoinRainAction;
8   -import com.cnlive.cloud.user.auth.UserService;
9 9  
10 10 public class ARouterUtil {
11 11 /**
... ... @@ -14,7 +14,9 @@ public class ARouterUtil {
14 14 public static void addIntegrationPic(Context context, String taskId, String contentId, String addtype) {
15 15 Boolean app_is_show_integral = SharedPreferencesHelper.getInstance(context).getBoolValue("APP_IS_SHOW_INTEGRAL");
16 16 if (app_is_show_integral) {
17   - CoinRainAction.code(context, UserService.getUid(context), taskId, contentId, addtype,false);
  17 + CNLiveUserService service = (CNLiveUserService) ARouter.getInstance().navigation(CNLiveUserService.class);
  18 + String sid = service.getUid(context);
  19 + CoinRainAction.code(context, sid, taskId, contentId, addtype,false);
18 20 }
19 21 }
20 22  
... ...
cloud/third_tool/src/main/java/com/cnlive/share/ui/ShareImgActivity.java
... ... @@ -15,6 +15,8 @@ import android.view.ViewGroup;
15 15 import android.widget.LinearLayout;
16 16  
17 17 import com.alibaba.android.arouter.facade.annotation.Route;
  18 +import com.alibaba.android.arouter.launcher.ARouter;
  19 +import com.cnlive.core.libs.base.arouter.user.CNLiveUserService;
18 20 import com.cnlive.core.libs.base.util.AlertUtil;
19 21 import com.cnlive.core.libs.base.util.DoublePressed;
20 22 import com.cnlive.share.BuildConfig;
... ... @@ -23,7 +25,6 @@ import com.cnlive.share.data.IconInfo;
23 25 import com.cnlive.share.observable.ShareClickObservable;
24 26 import com.cnlive.share.util.ShareUtils;
25 27 import com.cnlive.share.util.Util;
26   -import com.cnlive.cloud.user.auth.UserService;
27 28 import com.sina.weibo.sdk.share.WbShareCallback;
28 29 import com.sina.weibo.sdk.share.WbShareHandler;
29 30 import com.tencent.connect.common.Constants;
... ... @@ -90,8 +91,11 @@ public class ShareImgActivity extends AppCompatActivity implements ShareDialogLi
90 91 }
91 92  
92 93 private void initList() {
93   - if (getIntent().getStringExtra("fileName") != null)
94   - fileName = UserService.getUid(this) + getIntent().getStringExtra("fileName");
  94 + if (getIntent().getStringExtra("fileName") != null){
  95 + CNLiveUserService service = (CNLiveUserService) ARouter.getInstance().navigation(CNLiveUserService.class);
  96 + String sid = service.getUid(this);
  97 + fileName = sid + getIntent().getStringExtra("fileName");
  98 + }
95 99 SharedPreferences sp = this.getSharedPreferences("sp", Context.MODE_PRIVATE);
96 100 String bt = sp.getString("share_img_string", "");
97 101 bitmap = convertStringToIcon(bt);
... ...
cloud/third_tool/src/main/java/com/cnlive/share/util/ShareUtils.java
... ... @@ -16,6 +16,7 @@ import com.alibaba.android.arouter.launcher.ARouter;
16 16 import com.bumptech.glide.Glide;
17 17 import com.bumptech.glide.request.RequestOptions;
18 18 import com.cnlive.core.libs.base.application.AppConfig;
  19 +import com.cnlive.core.libs.base.arouter.user.CNLiveUserService;
19 20 import com.cnlive.core.libs.base.util.AlertUtil;
20 21 import com.cnlive.core.libs.base.util.FileUtils;
21 22 import com.cnlive.core.libs.base.util.NetworkUtil;
... ... @@ -33,7 +34,6 @@ import com.cnlive.share.data.ShareInfo;
33 34 import com.cnlive.share.data.ShareIntegralTypeInfo;
34 35 import com.cnlive.share.model.ShareReleaseInfoUtil;
35 36 import com.cnlive.share.model.ShortLinkInfo;
36   -import com.cnlive.cloud.user.auth.UserService;
37 37 import com.google.gson.Gson;
38 38 import com.sina.weibo.sdk.api.ImageObject;
39 39 import com.sina.weibo.sdk.api.TextObject;
... ... @@ -284,12 +284,14 @@ public class ShareUtils {
284 284 */
285 285 public static void processQQCallBack(Activity mContext, String shareType, String contentId) {
286 286 if (TextUtils.isEmpty(shareType)) return;
  287 + CNLiveUserService service = (CNLiveUserService) ARouter.getInstance().navigation(CNLiveUserService.class);
  288 + String sid = service.getUid(mContext);
287 289 switch (shareType) {
288 290 case "witnessVideo":
289 291 SharedPreferences preferences = mContext.getSharedPreferences("sharevideo", MODE_PRIVATE);
290   - boolean status = preferences.getBoolean(UserService.getUid(mContext), false);
  292 + boolean status = preferences.getBoolean(sid, false);
291 293 String newTime = DateTimeUtil.getCurrentTime();
292   - String oldtime = preferences.getString(UserService.getUid(mContext) + "time", "2019-04-10");
  294 + String oldtime = preferences.getString(sid + "time", "2019-04-10");
293 295 boolean sameDay = DateTimeUtil.isSameDay(newTime, oldtime);
294 296 if (!status) {
295 297 ARouterUtil.addIntegrationPic(mContext, "share_video", contentId, "sharevideo");
... ... @@ -300,9 +302,9 @@ public class ShareUtils {
300 302 break;
301 303 default:
302 304 SharedPreferences preferences1 = mContext.getSharedPreferences("sharearticle", MODE_PRIVATE);
303   - boolean status1 = preferences1.getBoolean(UserService.getUid(mContext), false);
  305 + boolean status1 = preferences1.getBoolean(sid, false);
304 306 String newTime1 = DateTimeUtil.getCurrentTime();
305   - String oldtime1 = preferences1.getString(UserService.getUid(mContext) + "time", "2019-04-10");
  307 + String oldtime1 = preferences1.getString(sid + "time", "2019-04-10");
306 308 boolean sameDay1 = DateTimeUtil.isSameDay(newTime1, oldtime1);
307 309 if (!status1) {
308 310 ARouterUtil.addIntegrationPic(mContext, "share_article", contentId, "sharearticle");
... ...
cloud/third_tool/src/main/java/com/cnlive/share/util/Util.java
... ... @@ -20,10 +20,11 @@ import android.graphics.Rect;
20 20 import android.net.Uri;
21 21 import android.text.TextUtils;
22 22  
  23 +import com.alibaba.android.arouter.launcher.ARouter;
23 24 import com.cnlive.core.libs.base.application.AppConfig;
  25 +import com.cnlive.core.libs.base.arouter.user.CNLiveUserService;
24 26 import com.cnlive.core.network.util.UriUtil;
25 27 import com.cnlive.share.BuildConfig;
26   -import com.cnlive.cloud.user.auth.UserService;
27 28 import com.sina.weibo.sdk.WbSdk;
28 29 import com.sina.weibo.sdk.auth.AuthInfo;
29 30 import com.tencent.mm.opensdk.openapi.IWXAPI;
... ... @@ -156,6 +157,8 @@ public class Util {
156 157 */
157 158 public static String processUrlData(String shareInfoUrl, Context mContext, boolean isToWjj) {
158 159 if (shareInfoUrl.contains("http://wjjh5.cnlive.com") || shareInfoUrl.contains("http://wjjh5test.cnlive.com")) {
  160 + CNLiveUserService service = (CNLiveUserService) ARouter.getInstance().navigation(CNLiveUserService.class);
  161 + String userId = service.getUid(mContext);
159 162 Uri oldUri = Uri.parse(shareInfoUrl);
160 163 //判断分享地址中是否有参数,如果没有则先拼接问号
161 164 if (oldUri.getQueryParameterNames().size() <= 0) {
... ... @@ -164,13 +167,13 @@ public class Util {
164 167 }
165 168 if (!shareInfoUrl.contains("?sid=") && !shareInfoUrl.contains("&sid=")) {
166 169 StringBuilder pageUrl = new StringBuilder(shareInfoUrl);
167   - pageUrl.append(oldUri.getQueryParameterNames().size() <= 0 ? "sid=" : "&sid=").append(UserService.getUid(mContext));
  170 + pageUrl.append(oldUri.getQueryParameterNames().size() <= 0 ? "sid=" : "&sid=").append(userId);
168 171 shareInfoUrl = pageUrl.toString();
169 172 }
170 173  
171 174 if (!shareInfoUrl.contains("?shareSid=") && !shareInfoUrl.contains("&shareSid=")) {
172 175 StringBuilder pageUrl = new StringBuilder(shareInfoUrl);
173   - pageUrl.append("&shareSid=").append(UserService.getUid(mContext));
  176 + pageUrl.append("&shareSid=").append(userId);
174 177 shareInfoUrl = pageUrl.toString();
175 178 }
176 179 if (!shareInfoUrl.contains("?isApp=") && !shareInfoUrl.contains("&isApp=")) {
... ... @@ -208,15 +211,16 @@ public class Util {
208 211 String url = urls[0];
209 212 StringBuilder pageUrl = new StringBuilder(url);
210 213 pageUrl.append("?");
  214 +
211 215 for (String key : uri.getQueryParameterNames()) {
212 216 if ("sid".equals(key)) {
213   - pageUrl.append(key).append("=").append(Uri.encode(TextUtils.isEmpty(UserService.getUid(mContext)) ? "" : UserService.getUid(mContext))).append("&");
  217 + pageUrl.append(key).append("=").append(Uri.encode(TextUtils.isEmpty(userId) ? "" : userId)).append("&");
214 218 } else if ("ver".equals(key)) {
215 219 pageUrl.append(key).append("=").append(Uri.encode(TextUtils.isEmpty(AppConfig.getAppVersion()) ? "" : AppConfig.getAppVersion())).append("&");
216 220 } else if ("plat".equals(key)) {
217 221 pageUrl.append(key).append("=").append(Uri.encode("a")).append("&");
218 222 } else if ("shareSid".equals(key)) {
219   - pageUrl.append(key).append("=").append(Uri.encode(TextUtils.isEmpty(UserService.getUid(mContext)) ? "" : UserService.getUid(mContext))).append("&");
  223 + pageUrl.append(key).append("=").append(Uri.encode(TextUtils.isEmpty(userId) ? "" : userId)).append("&");
220 224 } else if ("isApp".equals(key)) {
221 225 pageUrl.append(key).append("=").append(isToWjj).append("&");
222 226 } else if ("wjjFrom".equals(key)) {
... ...
cloud/user/build.gradle
... ... @@ -49,6 +49,6 @@ dependencies {
49 49 implementation "com.cnlive.libs:emoj:$rootProject.libEmoj"
50 50 //图片选择器
51 51 implementation "com.cnlive.libs:mediapicker:$rootProject.libMediaPicker"
52   -// implementation project(path: ':cloud:third_tool')
  52 + implementation project(path: ':cloud:third_tool')
53 53  
54 54 }
... ...
cloud/user/src/main/java/com/cnlive/cloud/user/UserUtilAction.java
... ... @@ -325,6 +325,70 @@ public class UserUtilAction {
325 325 // return null;
326 326 // }
327 327  
  328 +
  329 + /**
  330 + * 其他平台账户登录
  331 + *
  332 + * @param context
  333 + * @param thirdPartyPlat 平台类型 1:sina 2:qq 3:weixin 4:renren
  334 + * @param thirdPartyId 第三方用户ID
  335 + * [qq: 建议使用openid, wx: 建议使用unionid, sina: 建议使用idstr];
  336 + * 注意:同一用户在登录Sp下不同app时,thirdPartyId必须相同
  337 + */
  338 + public static Observable<BaseResult<UserData>> otherLogin(Context context, String thirdPartyPlat, String thirdPartyId) {
  339 +
  340 + Map<String, String> requestMap = new HashMap<>();
  341 + requestMap.put("appId", AppConfig.getAppId());
  342 + requestMap.put("thirdPartyPlat", thirdPartyPlat);
  343 + requestMap.put("thirdPartyId", thirdPartyId);
  344 + requestMap.put("frmId", AppConfig.getAppChannel());
  345 + requestMap.put("clientPlat", "a");
  346 + return BaseRequest.init().service(ApiBaseServiceOpen.class).loginIn3rdForWJJ(requestMap);
  347 + }
  348 +
  349 + /**
  350 + * 其他平台账户版定手机号并登录
  351 + *
  352 + * @param context
  353 + * @param thirdPartyPlat 平台类型 1:sina 2:qq 3:weixin 4:renren
  354 + * @param thirdPartyId 第三方用户ID
  355 + * [qq: 建议使用openid, wx: 建议使用unionid, sina: 建议使用idstr];
  356 + * 注意:同一用户在登录Sp下不同app时,thirdPartyId必须相同
  357 + */
  358 +
  359 +
  360 + public static Observable<BaseResult<UserData>> otherLoginBindMobile(Context context,
  361 + String phone,
  362 + String countryCode,
  363 + String ems,
  364 + String thirdPartyPlat,
  365 + String thirdPartyId,
  366 + String nickName,
  367 + String gender,
  368 + String location,
  369 + String faceUrl) {
  370 + Map<String, String> requestMap = new HashMap<>();
  371 +
  372 + requestMap.put("frmId", AppConfig.getAppChannel());
  373 + requestMap.put("clientPlat", "a");
  374 + requestMap.put("uuid", AppConfig.getAppUUID());
  375 +
  376 + requestMap.put("appId", AppConfig.getAppId());
  377 + requestMap.put("mobile", phone);
  378 + requestMap.put("countryCode", countryCode);
  379 + requestMap.put("verificationCode", ems);
  380 +
  381 + requestMap.put("thirdPartyPlat", thirdPartyPlat);
  382 + requestMap.put("thirdPartyId", thirdPartyId);
  383 + requestMap.put("nickName", nickName);
  384 + requestMap.put("gender", gender);
  385 + requestMap.put("location", location);
  386 + requestMap.put("faceUrl", faceUrl);
  387 +
  388 + return BaseRequest.init().service(ApiBaseServiceOpen.class).loginIn3rdAndMobileForWJJ(requestMap);
  389 + }
  390 +
  391 +
328 392 private static String getPath() {
329 393 String path = Environment.getExternalStorageDirectory() + "/strike/image/";
330 394 File file = new File(path);
... ...
cloud/user/src/main/java/com/cnlive/cloud/user/frame/presenter/LoginDialogPresenter.java
... ... @@ -13,7 +13,6 @@ import com.cnlive.core.network.model.BaseResult;
13 13 import com.cnlive.cloud.user.R;
14 14 import com.cnlive.cloud.user.UserUtilAction;
15 15 import com.cnlive.cloud.user.auth.UserService;
16   -import com.cnlive.cloud.user.frame.data.OtherUserInfo;
17 16 import com.cnlive.cloud.user.frame.data.QuickLoginData;
18 17 import com.cnlive.cloud.user.frame.view.LoginDialogView;
19 18 import com.cnlive.cloud.user.model.CNLiveUserInfo;
... ... @@ -21,6 +20,7 @@ import com.cnlive.cloud.user.router.user.UserAction;
21 20 import com.cnlive.cloud.user.ui.activity.LoginDialogActivity;
22 21 import com.cnlive.cloud.user.util.RegexUtils;
23 22 import com.cnlive.cloud.user.util.TimeEvent;
  23 +import com.cnlive.login.model.OtherUserInfo;
24 24  
25 25 import java.util.Arrays;
26 26 import java.util.Collections;
... ... @@ -40,6 +40,7 @@ public class LoginDialogPresenter extends BasePresenter&lt;LoginDialogView&gt; {
40 40 private static final String TAG = "QuickLoginPresenter";
41 41  
42 42 private Disposable event;
  43 + private Disposable otherEvent;
43 44 private Disposable sendMsgBefQuickLogin;
44 45 private TimerWaitUtil timerUtil; //计时工具类
45 46  
... ... @@ -65,8 +66,10 @@ public class LoginDialogPresenter extends BasePresenter&lt;LoginDialogView&gt; {
65 66 Account account = accounts.length > 0 ? accounts[0] : null;
66 67 String name = account == null ? "" : account.name;
67 68 //页面填充数据
68   - ifViewAttached(view -> view.uploadInputData(name));
69   - ifViewAttached(view -> view.uploadListData(accounts));
  69 + if(getView() != null){
  70 + getView().uploadInputData(name);
  71 + getView().uploadListData(accounts);
  72 + }
70 73 }
71 74  
72 75 private void startTimer() {
... ... @@ -217,26 +220,27 @@ public class LoginDialogPresenter extends BasePresenter&lt;LoginDialogView&gt; {
217 220 break;
218 221 }
219 222 }
220   -// /**
221   -// * 三方登陆
222   -// *
223   -// * @param context
224   -// * @param otherUserInfo
225   -// */
226   -// public void otherLogin(LoginDialogActivity context, OtherUserInfo otherUserInfo) {
227   -// if (otherUserInfo == null) {
228   -// getView().showToast(context.getString(R.string.user_toast_other_info_error));
229   -// } else {
230   -// cancelLoad();
231   -// context.isLogin = true;
232   -//
233   -// UserAction.otherLogin(context, context.otherUserInfo.getLoginType(), context.otherUserInfo.getThirdPartyId(), initLoginEvent(context, false, otherUserInfo));
234   -// }
235   -// }
236   -//
237   -// private Event<CNLiveUserInfo> initLoginEvent(LoginDialogActivity context, Boolean retry) {
238   -// return initLoginEvent(context, retry, null);
239   -// }
  223 + /**
  224 + * 三方登陆
  225 + *
  226 + * @param context
  227 + * @param otherUserInfo
  228 + */
  229 + public void otherLogin(LoginDialogActivity context, OtherUserInfo otherUserInfo) {
  230 + if (otherUserInfo == null) {
  231 + getView().showToast(context.getString(R.string.user_toast_other_info_error));
  232 + } else {
  233 + cancelLoad();
  234 + context.isLogin = true;
  235 +
  236 + otherEvent = UserAction.otherLogin(context, otherUserInfo.getLoginType(), otherUserInfo.getThirdPartyId(), new UserAction.CallBack() {
  237 + @Override
  238 + public void callback(int state, String msg, Object object) {
  239 + initLoginEvent(context, state,msg,false, otherUserInfo);
  240 + }
  241 + });
  242 + }
  243 + }
240 244  
241 245  
242 246 public void cancelLoad() {
... ... @@ -246,6 +250,13 @@ public class LoginDialogPresenter extends BasePresenter&lt;LoginDialogView&gt; {
246 250 }
247 251 event = null;
248 252 }
  253 +
  254 + if (otherEvent != null) {
  255 + if (!otherEvent.isDisposed()) {
  256 + otherEvent.dispose();
  257 + }
  258 + otherEvent = null;
  259 + }
249 260 }
250 261  
251 262 /**
... ...
cloud/user/src/main/java/com/cnlive/cloud/user/frame/presenter/QuickLoginPresenter.java
1 1 package com.cnlive.cloud.user.frame.presenter;
2 2  
3 3 import android.accounts.Account;
  4 +import android.app.Activity;
4 5 import android.content.Context;
5 6 import android.text.TextUtils;
6 7  
7 8 import com.cnlive.cloud.user.R;
8 9 import com.cnlive.cloud.user.UserUtilAction;
9 10 import com.cnlive.cloud.user.auth.UserService;
10   -import com.cnlive.cloud.user.frame.data.OtherUserInfo;
11 11 import com.cnlive.cloud.user.frame.data.QuickLoginData;
12 12 import com.cnlive.cloud.user.frame.view.QuickLoginView;
13 13 import com.cnlive.cloud.user.model.CNLiveUserInfo;
14 14 import com.cnlive.cloud.user.router.user.UserAction;
  15 +import com.cnlive.cloud.user.ui.activity.LoginDialogActivity;
15 16 import com.cnlive.cloud.user.ui.fragment.QuickLoginFragment;
16 17 import com.cnlive.cloud.user.util.RegexUtils;
17 18 import com.cnlive.cloud.user.util.TimeEvent;
... ... @@ -21,6 +22,7 @@ import com.cnlive.core.network.model.BaseResult;
21 22 import com.cnlive.core.network.HttpConn;
22 23 import com.cnlive.core.network.NetCallBack;
23 24 import com.cnlive.core.libs.base.util.TimerWaitUtil;
  25 +import com.cnlive.login.model.OtherUserInfo;
24 26  
25 27 import java.util.Arrays;
26 28 import java.util.Collections;
... ... @@ -38,7 +40,7 @@ public class QuickLoginPresenter extends BasePresenter&lt;QuickLoginView&gt; {
38 40  
39 41 private Disposable event;
40 42 private Disposable sendMsgBefQuickLogin;
41   -// private Event otherEvent;
  43 + private Disposable otherEvent;
42 44  
43 45 public void deleteUserInfo(Context context, String userName) {
44 46 UserService.getInstance(context).removeUser(userName, future -> {
... ... @@ -62,8 +64,8 @@ public class QuickLoginPresenter extends BasePresenter&lt;QuickLoginView&gt; {
62 64 Account account = accounts.length > 0 ? accounts[0] : null;
63 65 String name = account == null ? "" : account.name;
64 66 //页面填充数据
65   - ifViewAttached(view -> view.uploadInputData(name));
66   - ifViewAttached(view -> view.uploadListData(accounts));
  67 + getView().uploadInputData(name);
  68 + getView().uploadListData(accounts);
67 69 }
68 70  
69 71 private void startTimer() {
... ... @@ -137,6 +139,29 @@ public class QuickLoginPresenter extends BasePresenter&lt;QuickLoginView&gt; {
137 139 }
138 140 }
139 141  
  142 +
  143 + /**
  144 + * 三方登陆
  145 + *
  146 + * @param context
  147 + * @param otherUserInfo
  148 + */
  149 + public void otherLogin(QuickLoginFragment context, OtherUserInfo otherUserInfo) {
  150 + if (otherUserInfo == null) {
  151 + getView().showToast(context.getString(R.string.user_toast_other_info_error));
  152 + } else {
  153 + cancelLoad();
  154 + context.isLogin = true;
  155 +
  156 + otherEvent = UserAction.otherLogin(context.getActivity(), otherUserInfo.getLoginType(), otherUserInfo.getThirdPartyId(), new UserAction.CallBack() {
  157 + @Override
  158 + public void callback(int state, String msg, Object object) {
  159 + initLoginEvent(context, state,msg,false, otherUserInfo);
  160 + }
  161 + });
  162 + }
  163 + }
  164 +
140 165 private void initLoginEvent(QuickLoginFragment context, int state, String msg, Boolean retry, OtherUserInfo otherUserInfo) {
141 166 switch (state) {
142 167 //请求成功
... ... @@ -173,10 +198,12 @@ public class QuickLoginPresenter extends BasePresenter&lt;QuickLoginView&gt; {
173 198 }
174 199 break;
175 200 case HttpConn.ON_START:
176   - ifViewAttached(view -> view.showProgress());
  201 + if(getView() != null) getView().showProgress();
  202 +// ifViewAttached(view -> view.showProgress());
177 203 break;
178 204 case HttpConn.ON_END:
179   - ifViewAttached(view -> view.hideProgress());
  205 + if(getView() != null) getView().hideProgress();
  206 +// ifViewAttached(view -> view.hideProgress());
180 207 break;
181 208 case 41010: //手机号无效
182 209 ifViewAttached(view -> view.showToast(msg));
... ... @@ -301,5 +328,12 @@ public class QuickLoginPresenter extends BasePresenter&lt;QuickLoginView&gt; {
301 328 }
302 329 event = null;
303 330 }
  331 +
  332 + if (otherEvent != null) {
  333 + if (!otherEvent.isDisposed()) {
  334 + otherEvent.dispose();
  335 + }
  336 + otherEvent = null;
  337 + }
304 338 }
305 339 }
... ...
cloud/user/src/main/java/com/cnlive/cloud/user/frame/view/LoginDialogView.java
... ... @@ -19,13 +19,13 @@ import com.cnlive.core.libs.base.frame.view.BaseView;
19 19 import com.cnlive.core.libs.base.util.AlertUtil;
20 20 import com.cnlive.core.libs.base.util.DoublePressed;
21 21 import com.cnlive.cloud.user.R;
22   -import com.cnlive.cloud.user.frame.data.OtherUserInfo;
23 22 import com.cnlive.cloud.user.sms.OnSmsCatchListener;
24 23 import com.cnlive.cloud.user.sms.SmsVerifyCatcher;
25 24 import com.cnlive.cloud.user.ui.activity.FirstLoginActivity;
26 25 import com.cnlive.cloud.user.ui.activity.LoginActivity;
27 26 import com.cnlive.cloud.user.ui.activity.LoginDialogActivity;
28 27 import com.cnlive.cloud.user.util.UserRouterHelper;
  28 +import com.cnlive.login.model.OtherUserInfo;
29 29  
30 30 import java.util.regex.Matcher;
31 31 import java.util.regex.Pattern;
... ...
cloud/user/src/main/java/com/cnlive/cloud/user/frame/view/QuickLoginView.java
... ... @@ -17,7 +17,6 @@ import android.view.View;
17 17  
18 18 import com.alibaba.android.arouter.launcher.ARouter;
19 19 import com.cnlive.cloud.user.R;
20   -import com.cnlive.cloud.user.frame.data.OtherUserInfo;
21 20 import com.cnlive.cloud.user.model.LoginSuccessInfo;
22 21 import com.cnlive.cloud.user.sms.OnSmsCatchListener;
23 22 import com.cnlive.cloud.user.sms.SmsVerifyCatcher;
... ... @@ -28,6 +27,8 @@ import com.cnlive.core.libs.base.application.AppConfig;
28 27 import com.cnlive.core.libs.base.frame.view.BaseView;
29 28 import com.cnlive.core.libs.base.util.AlertUtil;
30 29 import com.cnlive.core.libs.base.util.DoublePressed;
  30 +import com.cnlive.login.model.OtherUserInfo;
  31 +
31 32 import java.util.regex.Matcher;
32 33 import java.util.regex.Pattern;
33 34  
... ...
cloud/user/src/main/java/com/cnlive/cloud/user/router/user/UserAction.java
... ... @@ -76,6 +76,31 @@ public class UserAction {
76 76  
77 77 }
78 78  
  79 +
  80 + public static Disposable otherLogin(Context context, String thirdPartyPlat, String thirdPartyId, CallBack callBack) {
  81 +
  82 + return HttpConn.action(UserUtilAction.otherLogin(context, thirdPartyPlat, thirdPartyId), new NetCallBack<BaseResult<UserData>>() {
  83 + @Override
  84 + public void onRequestState(int state) {
  85 + if (null != callBack) {
  86 + callBack.callback(state, "", null);
  87 + }
  88 + }
  89 +
  90 + @Override
  91 + public void onSuccess(BaseResult<UserData> data) {
  92 + loginAppAction(data, context, "", "", true, callBack);
  93 + }
  94 +
  95 + @Override
  96 + public void onFailure(String errCode, String errMsg, Exception e) {
  97 + if (null != callBack) {
  98 + callBack.callback(Integer.parseInt(errCode), errMsg, null);
  99 + }
  100 + }
  101 + });
  102 + }
  103 +
79 104 private static Observable<CNLiveUserInfo> loginAppAction(BaseResult<UserData> data, Context context, String userName, String userPassword, boolean otherLogin, CallBack callBack) {
80 105 CNLiveUserInfo userinfo = null;
81 106 if (null == data || null == data.getData()) {
... ... @@ -104,6 +129,32 @@ public class UserAction {
104 129 return Observable.just(userinfo);
105 130 }
106 131  
  132 +
  133 + public static void otherLoginBindMobile(Context context, String phone, String countryCode, String ems,
  134 + String thirdPartyPlat, String thirdPartyId, String nickName, String gender,
  135 + String location, String faceUrl, CallBack callBack) {
  136 +
  137 + HttpConn.action(UserUtilAction.otherLoginBindMobile(context, phone, countryCode, ems,
  138 + thirdPartyPlat, thirdPartyId, nickName, gender, location, faceUrl), new NetCallBack<BaseResult<UserData>>() {
  139 + @Override
  140 + public void onRequestState(int state) {
  141 + if (null != callBack) {
  142 + callBack.callback(state, "", null);
  143 + }
  144 + }
  145 +
  146 + @Override
  147 + public void onSuccess(BaseResult<UserData> data) {
  148 + loginAppAction(data,context, "", "", true, callBack);
  149 + }
  150 +
  151 + @Override
  152 + public void onFailure(String errCode, String errMsg, Exception e) {
  153 +
  154 + }
  155 + });
  156 + }
  157 +
107 158 public interface CallBack {
108 159 void callback(int state, String msg, Object object);
109 160 }
... ...
cloud/user/src/main/java/com/cnlive/cloud/user/ui/activity/LoginDialogActivity.java
... ... @@ -25,6 +25,15 @@ import com.cnlive.cloud.user.frame.view.LoginDialogView;
25 25 import com.cnlive.cloud.user.router.user.UserAction;
26 26 import com.cnlive.cloud.user.sms.SmsVerifyCatcher;
27 27 import com.cnlive.cloud.user.ui.adapter.UserListAdapter;
  28 +import com.cnlive.login.model.OtherUserInfo;
  29 +import com.cnlive.login.model.ThirdLoginInfo;
  30 +import com.cnlive.login.observer.ThirdLoginObservable;
  31 +import com.cnlive.login.observer.WechatLoginObservable;
  32 +import com.cnlive.login.utils.ThirdLoginUtil;
  33 +import com.cnlive.share.data.WeChatInfo;
  34 +import com.cnlive.share.util.Util;
  35 +
  36 +import java.util.Observable;
28 37  
29 38 import static com.cnlive.cloud.user.ui.activity.LoginActivity.TAG_CLICK_AD;
30 39  
... ... @@ -48,11 +57,11 @@ public class LoginDialogActivity extends BaseActivity&lt;LoginDialogView, LoginDial
48 57 public boolean hasLogin = false;//是否已经登录
49 58 public Uri uri;
50 59 public String tagShare;
51   - //三方登陆
52   - //qq的权限
53   - public final String ACOPE_ALL = "all";
  60 +
54 61 //三方登陆的信息
  62 + public OtherUserInfo otherUserInfo;
55 63 public Boolean clickAd;
  64 +
56 65 public String tagUrl;
57 66 public ActivityLoginDialogBinding binding;
58 67 public QuickLoginData data;
... ... @@ -83,7 +92,7 @@ public class LoginDialogActivity extends BaseActivity&lt;LoginDialogView, LoginDial
83 92 p.height = WindowManager.LayoutParams.MATCH_PARENT;
84 93 p.width = (ScreenUtils.getScreenWidth(this) - dp2px(88));
85 94 getWindow().setAttributes(p);
86   -// initThreeLogin();
  95 + initThreeLogin();
87 96 uri = UserAction.getUri(this);
88 97 tagUrl = getIntent().getStringExtra(TAG_URL);
89 98 clickAd = getIntent().getBooleanExtra(TAG_CLICK_AD, false);
... ... @@ -108,6 +117,15 @@ public class LoginDialogActivity extends BaseActivity&lt;LoginDialogView, LoginDial
108 117 }
109 118  
110 119  
  120 + /**
  121 + * 初始化第三方
  122 + */
  123 + private void initThreeLogin() {
  124 + ThirdLoginUtil.init(this);
  125 + WechatLoginObservable.getInstance().addObserver(this);
  126 + ThirdLoginObservable.getInstance().addObserver(this);
  127 + }
  128 +
111 129  
112 130 @Override
113 131 public void onStart() {
... ... @@ -153,8 +171,24 @@ public class LoginDialogActivity extends BaseActivity&lt;LoginDialogView, LoginDial
153 171 // }
154 172 else if (id == R.id.iv_qq) {
155 173 if (DoublePressed.onDoublePressed()) return;
  174 + if (!ThirdLoginUtil.isQQInstalled(LoginDialogActivity.this) && getMvpView() != null)
  175 + getMvpView().showToast("您未安装该第三方应用,无法获取用户信息!");
156 176 } else if (id == R.id.iv_wb) {
157 177 if (DoublePressed.onDoublePressed()) return;
  178 + if (Util.isWeiboInstallAndInit(this)) {
  179 + ThirdLoginUtil.loginWeibo(LoginDialogActivity.this);
  180 + } else {
  181 + if (getMvpView() != null) getMvpView().showToast("您未安装该第三方应用,无法获取用户信息!");
  182 + }
  183 + } else if (id == R.id.iv_wc) {
  184 + if (DoublePressed.onDoublePressed()) return;
  185 + if (Util.isWXAppInstalledAndSupported(this)) {
  186 + new Thread(() -> {
  187 + ThirdLoginUtil.loginWechat(LoginDialogActivity.this, AppConfig.getWechatAppid());
  188 + }).start();
  189 + } else {
  190 + if (getMvpView() != null) getMvpView().showToast("您未安装该第三方应用,无法获取用户信息!");
  191 + }
158 192 } else if (id == R.id.iv_close) {
159 193 finish();
160 194 }
... ... @@ -190,6 +224,9 @@ public class LoginDialogActivity extends BaseActivity&lt;LoginDialogView, LoginDial
190 224 super.onDestroy();
191 225 if (getMvpView() != null) getMvpView().hideProgress();
192 226 if (getPresenter() != null) getPresenter().destroy();
  227 +
  228 + WechatLoginObservable.getInstance().deleteObserver(this);
  229 + ThirdLoginObservable.getInstance().deleteObserver(this);
193 230 }
194 231  
195 232 @Override
... ... @@ -214,6 +251,9 @@ public class LoginDialogActivity extends BaseActivity&lt;LoginDialogView, LoginDial
214 251 }
215 252 }
216 253  
  254 + ThirdLoginUtil.getQQResult(requestCode, resultCode, data);
  255 + ThirdLoginUtil.getWeiboResult(requestCode, resultCode, data);
  256 +
217 257 }
218 258  
219 259 @Override
... ... @@ -225,6 +265,48 @@ public class LoginDialogActivity extends BaseActivity&lt;LoginDialogView, LoginDial
225 265 }
226 266 }
227 267  
  268 + //微信登录回调接口
  269 + @Override
  270 + public void update(Observable observable, Object o) {
  271 + if (observable instanceof WechatLoginObservable && null != o) {
  272 + WeChatInfo weChatInfo = (WeChatInfo) o;
  273 + if (weChatInfo != null) {
  274 + otherUserInfo = new OtherUserInfo();
  275 + otherUserInfo.setFaceUrl(weChatInfo.getHeadimgurl());
  276 + if ("1".equals(weChatInfo.getSex())) {
  277 + otherUserInfo.setGender("m");
  278 + } else if ("2".equals(weChatInfo.getSex())) {
  279 + otherUserInfo.setGender("f");
  280 + } else {
  281 + otherUserInfo.setGender("n");
  282 + }
  283 +
  284 + otherUserInfo.setNickName(weChatInfo.getNickname());
  285 + if (!TextUtils.isEmpty(weChatInfo.getProvince())) {
  286 + otherUserInfo.setLocation(weChatInfo.getProvince());
  287 + } else {
  288 + otherUserInfo.setLocation(weChatInfo.getCountry());
  289 + }
  290 +
  291 + otherUserInfo.setThirdPartyId(weChatInfo.getUnionid());
  292 + otherUserInfo.setLoginType("3");
  293 + }
  294 + if (otherUserInfo != null && getPresenter() != null)
  295 + getPresenter().otherLogin(this, otherUserInfo);
  296 + } else if (observable instanceof ThirdLoginObservable) {
  297 + ThirdLoginInfo info = (ThirdLoginInfo) o;
  298 + if (info != null) {
  299 + if (info.getType() == 1) {
  300 + if (info.getOtherUserInfo() != null) otherUserInfo = info.getOtherUserInfo();
  301 + getPresenter().otherLogin(this, otherUserInfo);
  302 + } else if (info.getType() == 2) {
  303 + if (getMvpView() != null) getMvpView().showToast(info.getMessage());
  304 + }
  305 + }
  306 +
  307 + }
  308 + }
  309 +
228 310 @Override
229 311 public void finish() {
230 312 super.finish();
... ...
cloud/user/src/main/java/com/cnlive/cloud/user/ui/fragment/QuickLoginFragment.java
... ... @@ -11,6 +11,7 @@ import androidx.databinding.ViewDataBinding;
11 11  
12 12 import com.cnlive.cloud.user.databinding.FragmentQuickLoginBinding;
13 13 import com.cnlive.cloud.user.frame.presenter.QuickLoginPresenter;
  14 +import com.cnlive.cloud.user.ui.activity.LoginDialogActivity;
14 15 import com.cnlive.core.libs.base.application.AppConfig;
15 16 import com.cnlive.core.libs.base.frame.fragment.BaseFragment;
16 17 import com.cnlive.core.libs.base.util.DoublePressed;
... ... @@ -22,6 +23,16 @@ import com.cnlive.cloud.user.sms.SmsVerifyCatcher;
22 23 import com.cnlive.cloud.user.ui.activity.LoginActivity;
23 24 import com.cnlive.cloud.user.ui.activity.SelectCountryActivity;
24 25 import com.cnlive.cloud.user.ui.adapter.UserListAdapter;
  26 +import com.cnlive.login.model.OtherUserInfo;
  27 +import com.cnlive.login.model.ThirdLoginInfo;
  28 +import com.cnlive.login.observer.ThirdLoginObservable;
  29 +import com.cnlive.login.observer.WechatLoginObservable;
  30 +import com.cnlive.login.utils.ThirdLoginUtil;
  31 +import com.cnlive.share.BuildConfig;
  32 +import com.cnlive.share.data.WeChatInfo;
  33 +import com.cnlive.share.util.Util;
  34 +
  35 +import java.util.Observable;
25 36  
26 37 /**
27 38 * @author Lynn
... ... @@ -48,6 +59,10 @@ public class QuickLoginFragment extends BaseFragment&lt;QuickLoginView, QuickLoginP
48 59 public String tagUrl;
49 60 public static String TAG_URL = "tagurl";
50 61  
  62 + //三方登陆的信息
  63 + public OtherUserInfo otherUserInfo;
  64 + private boolean needEntranceBtn;
  65 +
51 66 @Override
52 67 protected int getBindLayoutId() {
53 68 return R.layout.fragment_quick_login;
... ... @@ -100,6 +115,7 @@ public class QuickLoginFragment extends BaseFragment&lt;QuickLoginView, QuickLoginP
100 115  
101 116 @Override
102 117 protected void initView() {
  118 + initThreeLogin();
103 119 adapter = new UserListAdapter(getActivity(), 0);
104 120 adapter.setClickListener((name) -> getMvpView().onUploadLoginUser(name));
105 121 adapter.setDeleteListener((name) -> getMvpView().onDeleteLoginUser(name));
... ... @@ -116,6 +132,16 @@ public class QuickLoginFragment extends BaseFragment&lt;QuickLoginView, QuickLoginP
116 132 if (getMvpView() != null) getMvpView().initView();
117 133 }
118 134  
  135 +
  136 + /**
  137 + * 初始化第三方
  138 + */
  139 + private void initThreeLogin() {
  140 + ThirdLoginUtil.init(getActivity());
  141 + WechatLoginObservable.getInstance().addObserver(this);
  142 + ThirdLoginObservable.getInstance().addObserver(this);
  143 + }
  144 +
119 145 @Override
120 146 public void onStart() {
121 147 super.onStart();
... ... @@ -158,8 +184,28 @@ public class QuickLoginFragment extends BaseFragment&lt;QuickLoginView, QuickLoginP
158 184 if (DoublePressed.onDoublePressed()) return;
159 185 SelectCountryActivity.startSelectCountryActivity(getActivity(), 1010, countryCode);
160 186  
161   - } else {
162   - if (getMvpView() != null) getMvpView().showToast("您未安装该第三方应用,无法获取用户信息!");
  187 + }else if (id == R.id.iv_qq) {
  188 + if (DoublePressed.onDoublePressed()) return;
  189 + if (!ThirdLoginUtil.isQQInstalled(getActivity()) && getMvpView() != null)
  190 + getMvpView().showToast("您未安装该第三方应用,无法获取用户信息!");
  191 + } else if (id == R.id.iv_wb) {
  192 + if (DoublePressed.onDoublePressed()) return;
  193 + if (Util.isWeiboInstallAndInit(getActivity())) {
  194 + ThirdLoginUtil.loginWeibo(getActivity());
  195 + } else {
  196 + if (getMvpView() != null) getMvpView().showToast("您未安装该第三方应用,无法获取用户信息!");
  197 + }
  198 + } else if (id == R.id.iv_wc) {
  199 + if (DoublePressed.onDoublePressed()) return;
  200 + if (Util.isWXAppInstalledAndSupported(getActivity())) {
  201 + new Thread(() -> {
  202 + ThirdLoginUtil.loginWechat(getActivity(), AppConfig.getWechatAppid());
  203 + }).start();
  204 + } else {
  205 + if (getMvpView() != null) getMvpView().showToast("您未安装该第三方应用,无法获取用户信息!");
  206 + }
  207 + } else if (id == R.id.iv_close) {
  208 + getActivity().finish();
163 209 }
164 210 }
165 211  
... ... @@ -193,6 +239,8 @@ public class QuickLoginFragment extends BaseFragment&lt;QuickLoginView, QuickLoginP
193 239 super.onDestroy();
194 240 if (getMvpView() != null) getMvpView().hideProgress();
195 241 if (getPresenter() != null) getPresenter().destroy();
  242 + WechatLoginObservable.getInstance().deleteObserver(this);
  243 + ThirdLoginObservable.getInstance().deleteObserver(this);
196 244 }
197 245  
198 246 @Override
... ... @@ -216,6 +264,9 @@ public class QuickLoginFragment extends BaseFragment&lt;QuickLoginView, QuickLoginP
216 264 return;
217 265 }
218 266 }
  267 +
  268 + ThirdLoginUtil.getQQResult(requestCode, resultCode, data);
  269 + ThirdLoginUtil.getWeiboResult(requestCode, resultCode, data);
219 270 }
220 271  
221 272 @Override
... ... @@ -227,5 +278,46 @@ public class QuickLoginFragment extends BaseFragment&lt;QuickLoginView, QuickLoginP
227 278 }
228 279 }
229 280  
  281 + //微信登录回调接口
  282 + @Override
  283 + public void update(Observable observable, Object o) {
  284 + if (observable instanceof WechatLoginObservable && null != o) {
  285 + WeChatInfo weChatInfo = (WeChatInfo) o;
  286 + if (weChatInfo != null) {
  287 + otherUserInfo = new OtherUserInfo();
  288 + otherUserInfo.setFaceUrl(weChatInfo.getHeadimgurl());
  289 + if ("1".equals(weChatInfo.getSex())) {
  290 + otherUserInfo.setGender("m");
  291 + } else if ("2".equals(weChatInfo.getSex())) {
  292 + otherUserInfo.setGender("f");
  293 + } else {
  294 + otherUserInfo.setGender("n");
  295 + }
  296 +
  297 + otherUserInfo.setNickName(weChatInfo.getNickname());
  298 + if (!TextUtils.isEmpty(weChatInfo.getProvince())) {
  299 + otherUserInfo.setLocation(weChatInfo.getProvince());
  300 + } else {
  301 + otherUserInfo.setLocation(weChatInfo.getCountry());
  302 + }
  303 +
  304 + otherUserInfo.setThirdPartyId(weChatInfo.getUnionid());
  305 + otherUserInfo.setLoginType("3");
  306 + }
  307 + if (otherUserInfo != null && getPresenter() != null)
  308 + getPresenter().otherLogin(this, otherUserInfo);
  309 + } else if (observable instanceof ThirdLoginObservable) {
  310 + ThirdLoginInfo info = (ThirdLoginInfo) o;
  311 + if (info != null) {
  312 + if (info.getType() == 1) {
  313 + if (info.getOtherUserInfo() != null) otherUserInfo = info.getOtherUserInfo();
  314 + getPresenter().otherLogin(this, otherUserInfo);
  315 + } else if (info.getType() == 2) {
  316 + if (getMvpView() != null) getMvpView().showToast(info.getMessage());
  317 + }
  318 + }
  319 +
  320 + }
  321 + }
230 322  
231 323 }
... ...
core/base/src/main/java/com/hannesdorfmann/mosby3/mvp/MvpBasePresenter.java
... ... @@ -163,7 +163,7 @@ public class MvpBasePresenter&lt;V extends MvpView&gt; implements MvpPresenter&lt;V&gt; {
163 163 * {@inheritDoc}
164 164 */
165 165 public void destroy() {
166   - detachView(false);
  166 +// detachView(false);
167 167 presenterDestroyed = true;
168 168 }
169 169 }
... ...