Commit a2965c7e by YKai

feat:登录代码提交

parent 15c1f497
...@@ -8,7 +8,7 @@ ext { ...@@ -8,7 +8,7 @@ ext {
"m-confide" : "0.0.48.91", "m-confide" : "0.0.48.91",
"m-consultant" : "0.0.59.40", "m-consultant" : "0.0.59.40",
"m-fm" : "0.0.30.00", "m-fm" : "0.0.30.00",
"m-user" : "0.0.60.38", "m-user" : "0.0.60.44",
"m-home" : "0.0.22.51", "m-home" : "0.0.22.51",
"m-im" : "0.0.18.30", "m-im" : "0.0.18.30",
"m-dynamic" : "0.0.7.13", "m-dynamic" : "0.0.7.13",
...@@ -33,7 +33,7 @@ ext { ...@@ -33,7 +33,7 @@ ext {
//-------------- 功能组件 -------------- //-------------- 功能组件 --------------
//第一步 //第一步
"ydl-platform" : "0.0.39.66", "ydl-platform" : "0.0.39.67",
//第二步 若干 //第二步 若干
"ydl-webview" : "0.0.38.33", "ydl-webview" : "0.0.38.33",
...@@ -91,7 +91,7 @@ ext { ...@@ -91,7 +91,7 @@ ext {
"m-confide" : "0.0.48.91", "m-confide" : "0.0.48.91",
"m-consultant" : "0.0.51.16", "m-consultant" : "0.0.51.16",
"m-fm" : "0.0.23.5", "m-fm" : "0.0.23.5",
"m-user" : "0.0.60.37", "m-user" : "0.0.60.43",
"m-home" : "0.0.22.51", "m-home" : "0.0.22.51",
"m-im" : "0.0.3.15", "m-im" : "0.0.3.15",
"m-dynamic" : "0.0.1.7", "m-dynamic" : "0.0.1.7",
......
...@@ -65,6 +65,7 @@ android { ...@@ -65,6 +65,7 @@ android {
} }
} }
compileOptions { compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8 sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8
...@@ -79,8 +80,6 @@ dependencies { ...@@ -79,8 +80,6 @@ dependencies {
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
kapt 'com.alibaba:arouter-compiler:1.2.2' kapt 'com.alibaba:arouter-compiler:1.2.2'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
// crashshield-release.aar依赖了uc的crash收集库,因此还需要集成uc的crash收集库。
implementation 'com.ucweb.wpk:crashsdk-java:3.2.0.1'
api rootProject.ext.dependencies["ydl-user-router"] api rootProject.ext.dependencies["ydl-user-router"]
if (rootProject.ext.dev_mode){ if (rootProject.ext.dev_mode){
......
package com.yidianling.user.http;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.Log;
import com.ydl.burypointlib.MD5Util;
import com.ydl.ydlcommon.base.BaseApp;
import com.ydl.ydlcommon.base.config.HttpConfig;
import com.yidianling.common.tools.RxAppTool;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* Created by Ykai on 2021/1/11.
*
* 获取加密参数类
*/
public class EncryptionParams {
@RequiresApi(api = Build.VERSION_CODES.N)
public static Map<String,String> getParams(String path){
String timestamp = String.valueOf(System.currentTimeMillis()); //值应该为毫秒数的字符串形式
Map<String,String> map = new HashMap<>();
map.put("timestamp",timestamp);
map.put("path",path);
map.put("version", "1.0.0");
List<String> storedKeys = Arrays.stream(map.keySet()
.toArray(new String[]{}))
.sorted(Comparator.naturalOrder())
.collect(Collectors.toList());
String sign = storedKeys.stream()
// .map(key -> String.join("", key, map.get(key)))
.map(key -> key+map.get(key))
.collect(Collectors.joining()).trim()
.concat("ABA88F2FF7E64A688D2213B20A9B3A3E");
Log.e("sign",sign);
sign = MD5Util.md5(sign).toUpperCase();
// sign = MD5.md5(sign).toUpperCase();
Log.e("sign",sign);
Map<String,String> headersMap = new HashMap<>();
headersMap.put("appKey","20BB42485BD448DE888DD745899C457D");
headersMap.put("sign",sign);
// headersMap.put("sign","2410C6CDC7235DC6318F5CF0FFFAA0B7");
headersMap.put("timestamp",timestamp);
// headersMap.put("timestamp","1610352010360");
return headersMap;
}
}
package com.yidianling.user.http package com.yidianling.user.http
import com.google.gson.Gson import com.google.gson.Gson
import com.ydl.ydlcommon.base.config.HttpConfig
import com.ydl.ydlcommon.data.http.BaseResponse import com.ydl.ydlcommon.data.http.BaseResponse
import com.ydl.ydlnet.YDLHttpUtils import com.ydl.ydlnet.YDLHttpUtils
import com.yidianling.user.api.bean.UserResponseBean import com.yidianling.user.api.bean.UserResponseBean
...@@ -33,8 +34,8 @@ class LoginApiRequestUtil { ...@@ -33,8 +34,8 @@ class LoginApiRequestUtil {
/** /**
* 校验手机号:是否是用户版号码、是否有设置密码、是否被绑定 * 校验手机号:是否是用户版号码、是否有设置密码、是否被绑定
*/ */
fun checkPhoneStatus(phone: String, countryCode: String?): Observable<BaseResponse<ChcekPhoneResponeBean>> { fun checkPhoneStatus(map :Map<String,String>,phone: String, countryCode: String?): Observable<BaseResponse<ChcekPhoneResponeBean>> {
return getUserApi().checkPhoneStatus(phone, countryCode!!) return getUserApi().checkPhoneStatus(map,phone, countryCode!!)
} }
/** /**
......
package com.yidianling.user.http;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5 {
public static final char HEX_DIGITS[] = { '0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
public static String toHexString(byte[] b) {
StringBuffer sb = new StringBuffer(b.length * 2);
for (int i = 0; i < b.length; i++) {
sb.append(HEX_DIGITS[(b[i] & 0xf0) >>> 4]);
sb.append(HEX_DIGITS[b[i] & 0x0f]);
}
return sb.toString();
}
/**
* md5加密字符串
*
* @param s
* @return
*/
public static String md5(String s) {
try {
MessageDigest digest = MessageDigest.getInstance("MD5");
digest.update(s.getBytes());
byte messageDigest[] = digest.digest();
return toHexString(messageDigest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
}
package com.yidianling.user.http package com.yidianling.user.http
import com.google.gson.internal.LinkedTreeMap import com.google.gson.internal.LinkedTreeMap
import com.ydl.ydlcommon.base.config.YDLConstants import com.ydl.ydlcommon.base.config.*
import com.ydl.ydlcommon.base.config.YDL_DOMAIN
import com.ydl.ydlcommon.base.config.YDL_DOMAIN_JAVA
import com.ydl.ydlcommon.base.config.YDL_DOMAIN_LOGIN_BASE_URL
import com.ydl.ydlcommon.data.http.BaseAPIResponse import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.ydl.ydlcommon.data.http.BaseResponse import com.ydl.ydlcommon.data.http.BaseResponse
import com.yidianling.user.api.bean.UserResponseBean import com.yidianling.user.api.bean.UserResponseBean
...@@ -160,7 +157,7 @@ interface UserApi { ...@@ -160,7 +157,7 @@ interface UserApi {
* 绑定手机号 * 绑定手机号
*/ */
@POST("/login/v2/bind_phone") @POST("/login/v2/bind_phone")
@Headers( YDL_DOMAIN+ YDL_DOMAIN_LOGIN_BASE_URL,LOGIN_USER_PORT) @Headers(YDL_DOMAIN+ YDL_DOMAIN_LOGIN_BASE_URL, LOGIN_USER_PORT)
fun bindPhone(@Body body: RequestBody): Observable<BaseResponse<Any>> fun bindPhone(@Body body: RequestBody): Observable<BaseResponse<Any>>
/** /**
...@@ -197,7 +194,7 @@ interface UserApi { ...@@ -197,7 +194,7 @@ interface UserApi {
*/ */
@GET("login/v2/phone_detection") @GET("login/v2/phone_detection")
@Headers(YDL_DOMAIN+ YDL_DOMAIN_LOGIN_BASE_URL,LOGIN_USER_PORT) @Headers(YDL_DOMAIN+ YDL_DOMAIN_LOGIN_BASE_URL,LOGIN_USER_PORT)
fun checkPhoneStatus(@Query("phone") phone: String, @Query("countryCode") countryCode: String): Observable<BaseResponse<ChcekPhoneResponeBean>> fun checkPhoneStatus(@HeaderMap headMap:Map<String,String>,@Query("phone") phone: String, @Query("countryCode") countryCode: String): Observable<BaseResponse<ChcekPhoneResponeBean>>
/** /**
* 验证重置密码的短信验证码 * 验证重置密码的短信验证码
...@@ -210,14 +207,14 @@ interface UserApi { ...@@ -210,14 +207,14 @@ interface UserApi {
* 重置密码 * 重置密码
*/ */
@POST("/login/v2/reset_pwd") @POST("/login/v2/reset_pwd")
@Headers( YDL_DOMAIN+ YDL_DOMAIN_JAVA) @Headers( YDL_DOMAIN+ YDL_DOMAIN_LOGIN_BASE_URL, LOGIN_USER_PORT)
fun resetPwd(@Body body: RequestBody): Observable<BaseResponse<UserResponseBean>> fun resetPwd(@Body body: RequestBody): Observable<BaseResponse<UserResponseBean>>
/** /**
* 发送登录验证码 * 发送登录验证码
*/ */
@GET("user/send_login_sms") @GET("user/send_login_sms")
@Headers( YDL_DOMAIN+ YDL_DOMAIN_JAVA) @Headers( YDL_DOMAIN+ YDL_DOMAIN_LOGIN_BASE_URL, LOGIN_USER_PORT)
fun sendLoginMsgCode(@Query("phone") phone: String, @Query("countryCode") countryCode: String): Observable<BaseResponse<Any>> fun sendLoginMsgCode(@Query("phone") phone: String, @Query("countryCode") countryCode: String): Observable<BaseResponse<Any>>
/** /**
......
...@@ -9,6 +9,10 @@ package com.yidianling.user.http.request ...@@ -9,6 +9,10 @@ package com.yidianling.user.http.request
*/ */
data class PhoneLoginAutoParam( data class PhoneLoginAutoParam(
var accessCode: String,//sdk token var accessCode: String,//sdk token
var channelId: String?,
var deviceType: Int = 2,
var directType: Int, // 登录类型:1本机号码检验(需要传手机号和token); 2一键登录(只需要token)
var phoneNumber: String,//手机号 var phoneNumber: String,//手机号
var type: Int = 2 var version: String
) )
\ No newline at end of file
...@@ -31,6 +31,7 @@ import com.yidianling.user.UserConstants; ...@@ -31,6 +31,7 @@ import com.yidianling.user.UserConstants;
import com.yidianling.user.UserHelper; import com.yidianling.user.UserHelper;
import com.yidianling.user.api.event.RefreshRecentContactListEvent; import com.yidianling.user.api.event.RefreshRecentContactListEvent;
import com.yidianling.user.event.UpdateBindStatusEvent; import com.yidianling.user.event.UpdateBindStatusEvent;
import com.yidianling.user.http.EncryptionParams;
import com.yidianling.user.http.LoginApiRequestUtil; import com.yidianling.user.http.LoginApiRequestUtil;
import com.yidianling.user.http.UserHttp; import com.yidianling.user.http.UserHttp;
import com.yidianling.user.http.UserHttpImpl; import com.yidianling.user.http.UserHttpImpl;
...@@ -117,7 +118,8 @@ public class AccountSettingActivity extends BaseActivity implements View.OnClick ...@@ -117,7 +118,8 @@ public class AccountSettingActivity extends BaseActivity implements View.OnClick
return; return;
} }
showProgressDialog(); showProgressDialog();
LoginApiRequestUtil.Companion.checkPhoneStatus(UserHelper.INSTANCE.getUserInfo().getUserInfo().getPhone(), UserHelper.INSTANCE.getUserInfo().getUserInfo().getCountry_code()) Map<String,String> map = EncryptionParams.getParams("/api/api/login/v2/phone_detection");
LoginApiRequestUtil.Companion.checkPhoneStatus(map,UserHelper.INSTANCE.getUserInfo().getUserInfo().getPhone(), UserHelper.INSTANCE.getUserInfo().getUserInfo().getCountry_code())
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(response -> { .subscribe(response -> {
......
...@@ -2,6 +2,7 @@ package com.yidianling.user.ui.login ...@@ -2,6 +2,7 @@ package com.yidianling.user.ui.login
import android.content.pm.ActivityInfo import android.content.pm.ActivityInfo
import android.graphics.Color import android.graphics.Color
import android.text.TextUtils
import android.util.TypedValue import android.util.TypedValue
import android.view.Gravity import android.view.Gravity
import android.view.View import android.view.View
...@@ -13,12 +14,30 @@ import com.meituan.android.walle.WalleChannelReader ...@@ -13,12 +14,30 @@ import com.meituan.android.walle.WalleChannelReader
import com.mobile.auth.gatewayauth.* import com.mobile.auth.gatewayauth.*
import com.mobile.auth.gatewayauth.model.TokenRet import com.mobile.auth.gatewayauth.model.TokenRet
import com.ydl.ydlcommon.base.BaseActivity import com.ydl.ydlcommon.base.BaseActivity
import com.ydl.ydlcommon.base.BaseApp
import com.ydl.ydlcommon.base.config.HttpConfig import com.ydl.ydlcommon.base.config.HttpConfig
import com.ydl.ydlcommon.base.config.YDL_DOMAIN_LOGIN_BASE_URL import com.ydl.ydlcommon.base.config.YDL_DOMAIN_LOGIN_BASE_URL
import com.ydl.ydlcommon.utils.ActivityManager
import com.ydl.ydlcommon.utils.JPushUtils
import com.ydl.ydlcommon.utils.LogUtil import com.ydl.ydlcommon.utils.LogUtil
import com.ydl.ydlcommon.utils.YDLCacheUtils
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.ydl.ydlcommon.utils.log.LogHelper
import com.ydl.ydlnet.builder.manage.HttpUrlManager import com.ydl.ydlnet.builder.manage.HttpUrlManager
import com.yidianling.common.tools.RxAppTool
import com.yidianling.common.tools.RxDeviceTool import com.yidianling.common.tools.RxDeviceTool
import com.yidianling.common.tools.RxImageTool import com.yidianling.common.tools.RxImageTool
import com.yidianling.user.LoginUtils
import com.yidianling.user.StatusUtils
import com.yidianling.user.api.bean.UserResponseBean
import com.yidianling.user.bean.AliAuthBean
import com.yidianling.user.constants.UserBIConstants
import com.yidianling.user.http.LoginApiRequestUtil
import com.yidianling.user.http.request.PhoneLoginAutoParam
import com.yidianling.user.route.UserIn
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import java.math.BigDecimal
/** /**
* Created by Ykai on 2020/12/22. * Created by Ykai on 2020/12/22.
...@@ -59,8 +78,6 @@ object OneKeyLoginHelp { ...@@ -59,8 +78,6 @@ object OneKeyLoginHelp {
it.setAuthSDKInfo(YDL_EXPERT_APP_KEY) it.setAuthSDKInfo(YDL_EXPERT_APP_KEY)
} }
} }
// 配置动态网关
HttpUrlManager.Companion.getInstance()?.addUrl(YDL_DOMAIN_LOGIN_BASE_URL, HttpConfig.JAVA_LOGIN_BASE_URL)
// 获取渠道 // 获取渠道
val channel = WalleChannelReader.getChannel(activity) val channel = WalleChannelReader.getChannel(activity)
checkBoxHidden = !(channel == "huawei" || channel == "vivo") checkBoxHidden = !(channel == "huawei" || channel == "vivo")
...@@ -314,9 +331,32 @@ object OneKeyLoginHelp { ...@@ -314,9 +331,32 @@ object OneKeyLoginHelp {
LogUtil.e("唤起授权页成功:$s") LogUtil.e("唤起授权页成功:$s")
} }
ResultCode.CODE_SUCCESS -> { // 获取token成功 ResultCode.CODE_SUCCESS -> { // 获取token成功
val token = tokenRet.token val param = PhoneLoginAutoParam(tokenRet.token, JPushUtils.getRegistrationID(),2,2,"",
mPhoneNumberAuthHelper?.setAuthListener(null) RxAppTool.getAppVersionName(BaseApp.Companion.getApp()))
mIsGetTokenSuccess = false LoginApiRequestUtil.autoLogin(param)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
if (it.code == 200) {
saveUserData(it.data)
if (it.data.firstLogin == 1) {//第一次登录:是注册
StatusUtils.isFirstLogin = true
// 埋点
ActionCountUtils.baiduCount(it.data.uid, UserBIConstants.APP_REGISTER_PAGE, UserBIConstants.POSITION_ALIYUN_REGISTER_CLICK, "", "", 25)
} else {
ActionCountUtils.countUid(UserBIConstants.POSITION_LOGIN_SUCCESS_CLICK,it.data.uid!!,UserBIConstants.ACTION_TYPE_DIRECT_LOGIN)
}
mPhoneNumberAuthHelper?.let { helper->
helper.hideLoginLoading()
helper.quitLoginPage()
helper.setAuthListener(null)
}
mIsGetTokenSuccess = false
LoginUtils.LoginSuccessOperate(mActivity)
}
}, {
toLoginActivity()
})
} }
} }
} }
...@@ -334,7 +374,10 @@ object OneKeyLoginHelp { ...@@ -334,7 +374,10 @@ object OneKeyLoginHelp {
// 一键登录 // 一键登录
when (tokenRet.code) { when (tokenRet.code) {
ResultCode.CODE_ERROR_USER_CANCEL -> { // 用户主动取消一键登录 ResultCode.CODE_ERROR_USER_CANCEL -> { // 用户主动取消一键登录
if (mIsFromGuide){ // 如果是从引导页首次打开
ActivityManager.finishOtherActivity(mActivity)
UserIn.mainIntent(mActivity, 4)
}
} }
else -> { // 其它失败原因 else -> { // 其它失败原因
// 跳转到原生登录界面 // 跳转到原生登录界面
...@@ -359,4 +402,27 @@ object OneKeyLoginHelp { ...@@ -359,4 +402,27 @@ object OneKeyLoginHelp {
verifyTokenResultListener = listener verifyTokenResultListener = listener
} }
/**
* 保存登录信息
*/
private fun saveUserData(userResponse: UserResponseBean) {
if (!TextUtils.isEmpty(userResponse.userInfo!!.phone)) {
YDLCacheUtils.saveUserPhone(userResponse.userInfo!!.phone)
YDLCacheUtils.saveCountryPhoneCode(userResponse.userInfo!!.country_code)
}
if (userResponse.uid!!.contains(".")) {
val bd = BigDecimal(userResponse.uid)
var uid = bd.toPlainString()
if (uid.endsWith(".0")) {
uid = uid.replace(".0", "")
}
userResponse.userInfo!!.uid = uid
userResponse.uid = uid
}
LoginUtils.saveData(userResponse)
LogHelper.getInstance().writeLogSync("登录成功")
LoginUtils.onLogin(userResponse)
}
} }
...@@ -24,14 +24,17 @@ import com.tbruyelle.rxpermissions2.RxPermissions ...@@ -24,14 +24,17 @@ import com.tbruyelle.rxpermissions2.RxPermissions
import com.umeng.socialize.UMShareAPI import com.umeng.socialize.UMShareAPI
import com.umeng.socialize.UMShareConfig import com.umeng.socialize.UMShareConfig
import com.umeng.socialize.bean.SHARE_MEDIA import com.umeng.socialize.bean.SHARE_MEDIA
import com.ydl.ydlcommon.base.BaseApp
import com.ydl.ydlcommon.base.BaseMvpActivity import com.ydl.ydlcommon.base.BaseMvpActivity
import com.ydl.ydlcommon.data.PlatformRamImpl import com.ydl.ydlcommon.data.PlatformRamImpl
import com.ydl.ydlcommon.utils.ActivityManager import com.ydl.ydlcommon.utils.ActivityManager
import com.ydl.ydlcommon.utils.JPushUtils
import com.ydl.ydlcommon.utils.StatusBarUtils import com.ydl.ydlcommon.utils.StatusBarUtils
import com.ydl.ydlcommon.utils.YDLCacheUtils import com.ydl.ydlcommon.utils.YDLCacheUtils
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.ydl.ydlcommon.view.dialog.CommonDialog import com.ydl.ydlcommon.view.dialog.CommonDialog
import com.yidianling.common.tools.LogUtil import com.yidianling.common.tools.LogUtil
import com.yidianling.common.tools.RxAppTool
import com.yidianling.common.tools.RxKeyboardTool import com.yidianling.common.tools.RxKeyboardTool
import com.yidianling.common.tools.ToastUtil import com.yidianling.common.tools.ToastUtil
import com.yidianling.user.LoginUtils import com.yidianling.user.LoginUtils
...@@ -41,6 +44,7 @@ import com.yidianling.user.UserHelper ...@@ -41,6 +44,7 @@ import com.yidianling.user.UserHelper
import com.yidianling.user.api.bean.UserResponseBean import com.yidianling.user.api.bean.UserResponseBean
import com.yidianling.user.bean.AliAuthBean import com.yidianling.user.bean.AliAuthBean
import com.yidianling.user.constants.UserBIConstants import com.yidianling.user.constants.UserBIConstants
import com.yidianling.user.http.EncryptionParams
import com.yidianling.user.http.request.BindPhoneJavaParam import com.yidianling.user.http.request.BindPhoneJavaParam
import com.yidianling.user.http.request.PhoneLoginAutoParam import com.yidianling.user.http.request.PhoneLoginAutoParam
import com.yidianling.user.http.response.ChcekPhoneResponeBean import com.yidianling.user.http.response.ChcekPhoneResponeBean
...@@ -182,12 +186,12 @@ class RegisterAndLoginActivity : BaseMvpActivity<ILoginContract.View, ILoginCont ...@@ -182,12 +186,12 @@ class RegisterAndLoginActivity : BaseMvpActivity<ILoginContract.View, ILoginCont
} }
ResultCode.CODE_SUCCESS -> { // 获取token成功 ResultCode.CODE_SUCCESS -> { // 获取token成功
val aliAuthBean = AliAuthBean() val aliAuthBean = AliAuthBean()
aliAuthBean.accessCode = result aliAuthBean.accessCode = tokenRet.token
if (isUmengLoginState) { if (isUmengLoginState) {
//绑定手机号码 //绑定手机号码
umengLoginBindPhone(aliAuthBean.accessCode) umengLoginBindPhone(aliAuthBean.accessCode)
} else { } else {
autoLogin(aliAuthBean) autoLogin(tokenRet.token)
} }
OneKeyLoginHelp.mPhoneNumberAuthHelper?.setAuthListener(null) OneKeyLoginHelp.mPhoneNumberAuthHelper?.setAuthListener(null)
OneKeyLoginHelp.mIsGetTokenSuccess = false OneKeyLoginHelp.mIsGetTokenSuccess = false
...@@ -392,7 +396,8 @@ class RegisterAndLoginActivity : BaseMvpActivity<ILoginContract.View, ILoginCont ...@@ -392,7 +396,8 @@ class RegisterAndLoginActivity : BaseMvpActivity<ILoginContract.View, ILoginCont
return@setOnClickListener return@setOnClickListener
} }
if (checkPhone()) { if (checkPhone()) {
mPresenter.checkPhoneStatus(userPhoneNumber!!, countryCode!!, isUmengLoginState) val map = EncryptionParams.getParams("/api/api/login/v2/phone_detection")
mPresenter.checkPhoneStatus(map,userPhoneNumber!!, countryCode!!, isUmengLoginState)
} }
} }
...@@ -546,8 +551,9 @@ class RegisterAndLoginActivity : BaseMvpActivity<ILoginContract.View, ILoginCont ...@@ -546,8 +551,9 @@ class RegisterAndLoginActivity : BaseMvpActivity<ILoginContract.View, ILoginCont
/** /**
* 通过阿里sdk一键认证服务登陆 * 通过阿里sdk一键认证服务登陆
*/ */
private fun autoLogin(bean: AliAuthBean) { private fun autoLogin(token:String) {
var param = PhoneLoginAutoParam(bean.accessCode!!, userPhoneNumber!!) val param = PhoneLoginAutoParam(token, JPushUtils.getRegistrationID(),2,1,userPhoneNumber!!,
RxAppTool.getAppVersionName(BaseApp.Companion.getApp()))
mPresenter.autoLogin(param) mPresenter.autoLogin(param)
} }
......
...@@ -97,7 +97,7 @@ interface ILoginContract { ...@@ -97,7 +97,7 @@ interface ILoginContract {
/** /**
* 校验手机号:是否是用户版号码、是否有设置密码、是否被绑定 * 校验手机号:是否是用户版号码、是否有设置密码、是否被绑定
*/ */
fun checkPhoneStatus(phone: String, countryCode: String, isBind: Boolean) fun checkPhoneStatus(map: Map<String,String>,phone: String, countryCode: String, isBind: Boolean)
/** /**
* 通过一键认证服务登陆 * 通过一键认证服务登陆
...@@ -120,7 +120,7 @@ interface ILoginContract { ...@@ -120,7 +120,7 @@ interface ILoginContract {
/** /**
* 校验手机号:是否是用户版号码、是否有设置密码、是否被绑定 * 校验手机号:是否是用户版号码、是否有设置密码、是否被绑定
*/ */
fun checkPhoneStatus(phone: String, countryCode: String): Observable<BaseResponse<ChcekPhoneResponeBean>> fun checkPhoneStatus(map: Map<String,String>,phone: String, countryCode: String): Observable<BaseResponse<ChcekPhoneResponeBean>>
/** /**
......
...@@ -48,8 +48,8 @@ class LoginModelImpl : ILoginContract.Model { ...@@ -48,8 +48,8 @@ class LoginModelImpl : ILoginContract.Model {
/** /**
* 校验手机号:是否是用户版号码、是否有设置密码、是否被绑定 * 校验手机号:是否是用户版号码、是否有设置密码、是否被绑定
*/ */
override fun checkPhoneStatus(phone: String, countryCode: String): Observable<BaseResponse<ChcekPhoneResponeBean>> { override fun checkPhoneStatus(map:Map<String,String>,phone: String, countryCode: String): Observable<BaseResponse<ChcekPhoneResponeBean>> {
return LoginApiRequestUtil.checkPhoneStatus(phone, countryCode) return LoginApiRequestUtil.checkPhoneStatus(map,phone, countryCode)
} }
/** /**
......
...@@ -131,9 +131,9 @@ class LoginPresenterImpl(view: ILoginContract.View) : BasePresenter<ILoginContra ...@@ -131,9 +131,9 @@ class LoginPresenterImpl(view: ILoginContract.View) : BasePresenter<ILoginContra
*@param isBind 是否是第三方登录成功后的绑定操作 *@param isBind 是否是第三方登录成功后的绑定操作
*/ */
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
override fun checkPhoneStatus(phone: String, countryCode: String, isBind: Boolean) { override fun checkPhoneStatus(map: Map<String,String>,phone: String, countryCode: String, isBind: Boolean) {
mView.showLoading(true) mView.showLoading(true)
mModel.checkPhoneStatus(phone, countryCode) mModel.checkPhoneStatus(map,phone, countryCode)
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe({ .subscribe({
......
package com.ydl.ydlcommon.base.config;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.Log;
import com.ydl.burypointlib.MD5Util;
import com.ydl.ydlcommon.base.BaseApp;
import com.yidianling.common.tools.RxAppTool;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* Created by Ykai on 2021/1/11.
*
* 获取加密参数类
*/
public class EncryptionParams {
@RequiresApi(api = Build.VERSION_CODES.N)
public static Map<String,String> getParams(String path){
String timestamp = String.valueOf(System.currentTimeMillis()); //值应该为毫秒数的字符串形式
Map<String,String> map = new HashMap<>();
map.put("timestamp",timestamp);
map.put("path",path);
map.put("version", RxAppTool.getAppVersionName(BaseApp.Companion.getApp()));
List<String> storedKeys = Arrays.stream(map.keySet()
.toArray(new String[]{}))
.sorted(Comparator.naturalOrder())
.collect(Collectors.toList());
String sign = storedKeys.stream()
.map(key -> String.join("", key, map.get(key)))
.collect(Collectors.joining()).trim()
.concat(HttpConfig.Companion.getENCRYPTION_APP_SECRET());
sign = MD5Util.md5(sign).toUpperCase();
Log.e("sign",sign);
Map<String,String> headersMap = new HashMap<>();
headersMap.put("appKey",HttpConfig.Companion.getENCRYPTION_APP_KEY());
headersMap.put("sign",sign);
headersMap.put("timestamp",timestamp);
return headersMap;
}
}
...@@ -111,6 +111,7 @@ class GlobalConfig private constructor(var builder: Builder) { ...@@ -111,6 +111,7 @@ class GlobalConfig private constructor(var builder: Builder) {
.setBaseUrl(appBaseURL ?: HttpConfig.PHP_BASE_URL) .setBaseUrl(appBaseURL ?: HttpConfig.PHP_BASE_URL)
.addUrl(YDL_DOMAIN_JAVA, HttpConfig.JAVA_BASE_URL) .addUrl(YDL_DOMAIN_JAVA, HttpConfig.JAVA_BASE_URL)
.addUrl(YDL_DOMAIN_JAVA_URL, HttpConfig.JAVA_URL) .addUrl(YDL_DOMAIN_JAVA_URL, HttpConfig.JAVA_URL)
.addUrl(YDL_DOMAIN_LOGIN_BASE_URL, HttpConfig.JAVA_LOGIN_BASE_URL)
.setMultipleUrlMap(multipleUrl) .setMultipleUrlMap(multipleUrl)
if (okHttpClient == null) { if (okHttpClient == null) {
...@@ -119,7 +120,7 @@ class GlobalConfig private constructor(var builder: Builder) { ...@@ -119,7 +120,7 @@ class GlobalConfig private constructor(var builder: Builder) {
apiFactory.setOkClient(okHttpClient) apiFactory.setOkClient(okHttpClient)
HttpConfig.getInstance().initAuth() HttpConfig.getInstance().initAuth()
HttpConfig.getInstance().initLoginBaseUrlConfig() HttpConfig.getInstance().initLoginBaseUrlConfig(multipleUrl)
} }
} }
......
...@@ -7,6 +7,7 @@ import com.facebook.stetho.okhttp3.StethoInterceptor ...@@ -7,6 +7,7 @@ import com.facebook.stetho.okhttp3.StethoInterceptor
import com.ydl.pushserver.pushagent.YdlPushAgent import com.ydl.pushserver.pushagent.YdlPushAgent
import com.ydl.ydlcommon.base.BaseApp import com.ydl.ydlcommon.base.BaseApp
import com.ydl.ydlcommon.bean.AuthBean import com.ydl.ydlcommon.bean.AuthBean
import com.ydl.ydlcommon.bean.GatewayRequestDTO
import com.ydl.ydlcommon.data.PlatformDataManager import com.ydl.ydlcommon.data.PlatformDataManager
import com.ydl.ydlcommon.data.http.BaseAPIResponse import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.ydl.ydlcommon.data.http.EncryptUtils import com.ydl.ydlcommon.data.http.EncryptUtils
...@@ -16,6 +17,7 @@ import com.ydl.ydlcommon.data.http.api.ApiRequestUtil ...@@ -16,6 +17,7 @@ import com.ydl.ydlcommon.data.http.api.ApiRequestUtil
import com.ydl.ydlcommon.modular.ModularServiceManager import com.ydl.ydlcommon.modular.ModularServiceManager
import com.ydl.ydlcommon.utils.YDLCacheUtils import com.ydl.ydlcommon.utils.YDLCacheUtils
import com.ydl.ydlnet.builder.config.OkHttpConfig import com.ydl.ydlnet.builder.config.OkHttpConfig
import com.ydl.ydlnet.builder.factory.ApiFactory
import com.ydl.ydlnet.builder.interceptor.log.RequestHandler import com.ydl.ydlnet.builder.interceptor.log.RequestHandler
import com.yidianling.common.tools.LogUtil import com.yidianling.common.tools.LogUtil
import com.yidianling.common.tools.RxAppTool import com.yidianling.common.tools.RxAppTool
...@@ -27,6 +29,7 @@ import okio.Buffer ...@@ -27,6 +29,7 @@ import okio.Buffer
import okio.BufferedSink import okio.BufferedSink
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
import kotlin.collections.HashMap
/** /**
...@@ -99,7 +102,11 @@ class HttpConfig { ...@@ -99,7 +102,11 @@ class HttpConfig {
*/ */
var ACTION_URL = "" var ACTION_URL = ""
var JAVA_LOGIN_BASE_URL = "" // 登录注册动态配置网关地址 var JAVA_LOGIN_BASE_URL = "" // 登录注册动态配置的网关地址
var ENCRYPTION_APP_KEY = "" // 接口加密appKey
var ENCRYPTION_APP_SECRET = "" // 接口加密appSecret
var isEncryption = false
fun getInstance(): HttpConfig { fun getInstance(): HttpConfig {
return Holder.INSTANCE return Holder.INSTANCE
...@@ -132,6 +139,15 @@ class HttpConfig { ...@@ -132,6 +139,15 @@ class HttpConfig {
.build() .build()
} }
/**
* 开启动态网关,请求头某些参数加密
*/
// private fun addEncryptionHeaderParams():Interceptor{
// return Interceptor {
// var request = it.request()
// }
// }
private fun getRequestHandler():RequestHandler{ private fun getRequestHandler():RequestHandler{
return object :RequestHandler{ return object :RequestHandler{
override fun onHttpResultResponse( override fun onHttpResultResponse(
...@@ -364,6 +380,8 @@ class HttpConfig { ...@@ -364,6 +380,8 @@ class HttpConfig {
PHP_BASE_URL = properties.getProperty("serverurl.$appEnv") PHP_BASE_URL = properties.getProperty("serverurl.$appEnv")
JAVA_BASE_URL = properties.getProperty("javaapi.$appEnv") JAVA_BASE_URL = properties.getProperty("javaapi.$appEnv")
JAVA_LOGIN_BASE_URL = JAVA_BASE_URL JAVA_LOGIN_BASE_URL = JAVA_BASE_URL
ENCRYPTION_APP_KEY = properties.getProperty("appKey.$appEnv")
ENCRYPTION_APP_SECRET = properties.getProperty("appSecret.$appEnv")
ACTION_URL = properties.getProperty("actionurl.$appEnv") ACTION_URL = properties.getProperty("actionurl.$appEnv")
H5_URL = properties.getProperty("h5url.$appEnv") H5_URL = properties.getProperty("h5url.$appEnv")
...@@ -409,14 +427,22 @@ class HttpConfig { ...@@ -409,14 +427,22 @@ class HttpConfig {
* *
*/ */
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
fun initLoginBaseUrlConfig(){ fun initLoginBaseUrlConfig(urlMap :HashMap<String,String>){
ApiRequestUtil.getBaseUrl() val map = HashMap<String,Any>()
val list = ArrayList<GatewayRequestDTO>()
val gatewayRequestDTO = GatewayRequestDTO("login")
list.add(gatewayRequestDTO)
map["gatewayRequestDTOList"] = list
ApiRequestUtil.getBaseUrl(map)
.compose(RxUtils.applySchedulers()) .compose(RxUtils.applySchedulers())
.compose(RxUtils.resultJavaData()) .compose(RxUtils.resultJavaData())
.subscribe({ .subscribe({
if (it.baseUrlGatewayDTOList.isNotEmpty()){ if (it.baseUrlGatewayDTOList.isNotEmpty()){
if (it.baseUrlGatewayDTOList[0].goGateway){ isEncryption = it.baseUrlGatewayDTOList[0].goGateway
JAVA_LOGIN_BASE_URL = it.baseUrlGatewayDTOList[0].baseUrl if (isEncryption){
JAVA_LOGIN_BASE_URL = it.baseUrlGatewayDTOList[0].baseUrl+"/"
urlMap[YDL_DOMAIN_LOGIN_BASE_URL] = JAVA_LOGIN_BASE_URL
ApiFactory.getInstance().setMultipleUrlMap(urlMap)
} }
} }
}) { }) {
......
package com.ydl.ydlcommon.bean
/**
* Created by Ykai on 2021/1/9.
*/
data class GatewayRequestDTO(
var bizType:String
)
\ No newline at end of file
...@@ -13,10 +13,12 @@ import com.ydl.ydlcommon.utils.NetworkParamsUtils; ...@@ -13,10 +13,12 @@ import com.ydl.ydlcommon.utils.NetworkParamsUtils;
import com.ydl.ydlnet.YDLHttpUtils; import com.ydl.ydlnet.YDLHttpUtils;
import java.util.List; import java.util.List;
import java.util.Map;
import io.reactivex.Observable; import io.reactivex.Observable;
import okhttp3.MediaType; import okhttp3.MediaType;
import okhttp3.RequestBody; import okhttp3.RequestBody;
import retrofit2.http.Body;
/** /**
* 模块请求工具类 * 模块请求工具类
...@@ -63,7 +65,7 @@ public class ApiRequestUtil { ...@@ -63,7 +65,7 @@ public class ApiRequestUtil {
/** /**
* 获取登录注册模块网关 * 获取登录注册模块网关
*/ */
public static Observable<BaseAPIResponse<BaseUrlBean>> getBaseUrl(){ public static Observable<BaseAPIResponse<BaseUrlBean>> getBaseUrl(Map<String, Object> map){
return YDLHttpUtils.Companion.obtainApi(NetApiStore.class).getBaseUrl(); return YDLHttpUtils.Companion.obtainApi(NetApiStore.class).getBaseUrl(map);
} }
} }
...@@ -51,7 +51,7 @@ interface NetApiStore { ...@@ -51,7 +51,7 @@ interface NetApiStore {
@GET("config/socket-config") @GET("config/socket-config")
Observable<BaseAPIResponse<JavaGlobalInfo>> getJavaGlobalInfo(); Observable<BaseAPIResponse<JavaGlobalInfo>> getJavaGlobalInfo();
@Headers({YDL_DOMAIN+ YDL_DOMAIN_JAVA,"userPort:1"}) @Headers({YDL_DOMAIN+ YDL_DOMAIN_JAVA,"userPort:1","Content-type:application/json;charset=UTF-8"})
@POST("systemconfig/get_gateway_base_url") @POST("systemconfig/get_gateway_base_url")
Observable<BaseAPIResponse<BaseUrlBean>> getBaseUrl(); Observable<BaseAPIResponse<BaseUrlBean>> getBaseUrl(@Body Map<String, Object> map);
} }
...@@ -51,3 +51,9 @@ javatempurl.prod = https://dc.ydl.com/api/ ...@@ -51,3 +51,9 @@ javatempurl.prod = https://dc.ydl.com/api/
javaapi.test = https://testapi.ydl.com/api/ javaapi.test = https://testapi.ydl.com/api/
javaapi.auto_test = https://auto_testapi.ydl.com/api/ javaapi.auto_test = https://auto_testapi.ydl.com/api/
javaapi.prod = https://api.ydl.com/api/ javaapi.prod = https://api.ydl.com/api/
# 开启网关加密appKey和appSecret
appKey.test = 20BB42485BD448DE888DD745899C457D
appSecret.test = ABA88F2FF7E64A688D2213B20A9B3A3E
appKey.prod =
appSecret.prod =
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment