添加时间戳校验,优化账户管理用户信息显示, 2.6.0/260

This commit is contained in:
wangyu 2026-02-03 11:21:40 +08:00
parent b358bdb889
commit d8ac807fdb
6 changed files with 72 additions and 19 deletions

View File

@ -20,8 +20,8 @@ android {
applicationId "com.cheng.BoLe" applicationId "com.cheng.BoLe"
minSdk 26 minSdk 26
targetSdk 34 targetSdk 34
versionCode 240 versionCode 260
versionName "2.4.0" versionName "2.6.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables { vectorDrawables {

View File

@ -7,5 +7,6 @@ class UserConfigEntity : Serializable{
var temp = false var temp = false
var name = "" var name = ""
var user_id = "" var user_id = ""
var config: com.cheng.blzb.bean.ConfigEntity? = null var nowtime = ""
var config: ConfigEntity? = null
} }

View File

@ -6,6 +6,9 @@ import androidx.lifecycle.MutableLiveData
import com.cheng.blzb.bean.AreaEntity import com.cheng.blzb.bean.AreaEntity
import com.cheng.blzb.bean.BidTypeEntity import com.cheng.blzb.bean.BidTypeEntity
import com.cheng.blzb.bean.HotWordEntity import com.cheng.blzb.bean.HotWordEntity
import com.cheng.blzb.bean.UserConfigEntity
import com.cheng.blzb.bean.UserEntity
import com.cheng.blzb.bean.WxShareEntity
import com.cheng.blzb.net.ApiFactory import com.cheng.blzb.net.ApiFactory
import com.example.base.extensions.toast import com.example.base.extensions.toast
import com.example.base.utils.MMKVUtils import com.example.base.utils.MMKVUtils
@ -22,17 +25,40 @@ import kotlinx.coroutines.withContext
import org.json.JSONObject import org.json.JSONObject
object UserConfigManager { object UserConfigManager {
val _userConfigLiveData = MutableLiveData<com.cheng.blzb.bean.UserConfigEntity?>() val _userConfigLiveData = MutableLiveData<UserConfigEntity?>()
val userConfig: com.cheng.blzb.bean.UserConfigEntity? get() = _userConfigLiveData.value val userConfig: UserConfigEntity? get() = _userConfigLiveData.value
val userInfoLiveData = MutableLiveData<com.cheng.blzb.bean.UserEntity?>() val userInfoLiveData = MutableLiveData<UserEntity?>()
val userInfo: com.cheng.blzb.bean.UserEntity? get() = userInfoLiveData.value val userInfo: UserEntity? get() = userInfoLiveData.value
//服务器时间和本地时间的偏移量
private var timeDiff = 0L
//真实的服务器时间
fun serverTimeMillis(): Long {
return System.currentTimeMillis() + timeDiff * 1000
}
fun getServerTime(clickFun: () -> Unit?) {
GlobalScope.launch {
try {
val response = ApiFactory.apiService.getServerTime()
if (response.status) {
timeDiff = response.data.toLong() - System.currentTimeMillis() / 1000
}
} catch (e: Exception) {
e.printStackTrace()
} finally {
getUserConfig { clickFun.invoke() }
}
}
}
fun getUserConfig(clickFun: () -> Unit?) { fun getUserConfig(clickFun: () -> Unit?) {
if (!TextUtils.isEmpty(MMKVUtils.getString("userConfig"))) { if (!TextUtils.isEmpty(MMKVUtils.getString("userConfig"))) {
val data = Gson().fromJson(MMKVUtils.getString("userConfig"), com.cheng.blzb.bean.UserConfigEntity::class.java) val data = Gson().fromJson(MMKVUtils.getString("userConfig"), UserConfigEntity::class.java)
_userConfigLiveData.postValue(data) _userConfigLiveData.postValue(data)
getOaId() getOaId()
@ -51,6 +77,8 @@ object UserConfigManager {
val oaid = MMKVUtils.getString("oaid") ?: "" val oaid = MMKVUtils.getString("oaid") ?: ""
val response = ApiFactory.apiService.getUserConfig(oaid, Build.VERSION.SDK_INT, "", DeviceIdentifier.getAndroidID(Utils.getApp()), getGTCid()) val response = ApiFactory.apiService.getUserConfig(oaid, Build.VERSION.SDK_INT, "", DeviceIdentifier.getAndroidID(Utils.getApp()), getGTCid())
if (response.status) { if (response.status) {
timeDiff = response.data.nowtime.toLong() - System.currentTimeMillis() / 1000
_userConfigLiveData.postValue(response.data) _userConfigLiveData.postValue(response.data)
MMKVUtils.put("userConfig", Gson().toJson(response.data)) MMKVUtils.put("userConfig", Gson().toJson(response.data))
@ -70,7 +98,7 @@ object UserConfigManager {
} }
} }
private fun saveUserConfig(data: com.cheng.blzb.bean.UserConfigEntity) { private fun saveUserConfig(data: UserConfigEntity) {
try { try {
LoginManager.saveToken(data.token) LoginManager.saveToken(data.token)
saveIsTemp(data.temp) saveIsTemp(data.temp)
@ -92,14 +120,14 @@ object UserConfigManager {
} }
} }
fun saveLastUserinfo(userinfo: com.cheng.blzb.bean.UserEntity?) { fun saveLastUserinfo(userinfo: UserEntity?) {
MMKVUtils.put("last_userinfo", Gson().toJson(userinfo)) MMKVUtils.put("last_userinfo", Gson().toJson(userinfo))
} }
fun getLastUserinfo(): com.cheng.blzb.bean.UserEntity? { fun getLastUserinfo(): UserEntity? {
val str = MMKVUtils.getString("last_userinfo") val str = MMKVUtils.getString("last_userinfo")
if (!TextUtils.isEmpty(str)) { if (!TextUtils.isEmpty(str)) {
return Gson().fromJson(str, com.cheng.blzb.bean.UserEntity::class.java) return Gson().fromJson(str, UserEntity::class.java)
} }
return null return null
} }
@ -175,14 +203,14 @@ object UserConfigManager {
return emptyList() return emptyList()
} }
private fun saveShareEntity(entity: com.cheng.blzb.bean.WxShareEntity?) { private fun saveShareEntity(entity: WxShareEntity?) {
MMKVUtils.put("weixin_share", Gson().toJson(entity)) MMKVUtils.put("weixin_share", Gson().toJson(entity))
} }
fun getShareEntity(): com.cheng.blzb.bean.WxShareEntity? { fun getShareEntity(): WxShareEntity? {
val s = MMKVUtils.getString("weixin_share") val s = MMKVUtils.getString("weixin_share")
if (!TextUtils.isEmpty(s)) { if (!TextUtils.isEmpty(s)) {
return Gson().fromJson(s, com.cheng.blzb.bean.WxShareEntity::class.java) return Gson().fromJson(s, WxShareEntity::class.java)
} }
return null return null
} }

View File

@ -2,6 +2,7 @@ package com.cheng.blzb.net
import android.text.TextUtils import android.text.TextUtils
import com.cheng.blzb.common.Constants import com.cheng.blzb.common.Constants
import com.cheng.blzb.manager.UserConfigManager
import com.cheng.blzb.utils.StringUtils import com.cheng.blzb.utils.StringUtils
import com.example.base.utils.L import com.example.base.utils.L
import okhttp3.Interceptor import okhttp3.Interceptor
@ -33,9 +34,9 @@ class RequestInterceptor : Interceptor {
} }
var queryString = url.encodedQuery var queryString = url.encodedQuery
queryString = if (!TextUtils.isEmpty(queryString)) { queryString = if (!TextUtils.isEmpty(queryString)) {
(queryString + "&nonce=" + StringUtils.createUUID()) + "&timestamp=" + System.currentTimeMillis() / 1000 (queryString + "&nonce=" + StringUtils.createUUID()) + "&timestamp=" + UserConfigManager.serverTimeMillis() / 1000
} else { } else {
("nonce=" + StringUtils.createUUID()) + "&timestamp=" + System.currentTimeMillis() / 1000 ("nonce=" + StringUtils.createUUID()) + "&timestamp=" + UserConfigManager.serverTimeMillis() / 1000
} }
val sortQueryString = Arrays.stream(queryString.split("&".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()) val sortQueryString = Arrays.stream(queryString.split("&".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray())
.sorted { obj: String, anotherString: String? -> obj.compareTo(anotherString!!) } .sorted { obj: String, anotherString: String? -> obj.compareTo(anotherString!!) }

View File

@ -57,7 +57,7 @@ class LauncherActivity : BaseActivity() {
if (UserConfigManager.isAgree()) { if (UserConfigManager.isAgree()) {
loadingDialog.show() loadingDialog.show()
UserConfigManager.saveBDVID() UserConfigManager.saveBDVID()
UserConfigManager.getUserConfig { UserConfigManager.getServerTime {
EventReportManager.eventReport(EventConstants.APP_LAUNCH, "", "") EventReportManager.eventReport(EventConstants.APP_LAUNCH, "", "")
loadingDialog.dismiss() loadingDialog.dismiss()
initUM() initUM()
@ -76,7 +76,7 @@ class LauncherActivity : BaseActivity() {
loadingDialog.show() loadingDialog.show()
UserConfigManager.saveAgree() UserConfigManager.saveAgree()
UserConfigManager.saveBDVID() UserConfigManager.saveBDVID()
UserConfigManager.getUserConfig { UserConfigManager.getServerTime {
EventReportManager.eventReport(EventConstants.APP_LAUNCH, "", "") EventReportManager.eventReport(EventConstants.APP_LAUNCH, "", "")
loadingDialog.dismiss() loadingDialog.dismiss()
initUM() initUM()

View File

@ -1,6 +1,7 @@
package com.cheng.blzb.ui.fragment.mine.account package com.cheng.blzb.ui.fragment.mine.account
import android.graphics.Color import android.graphics.Color
import android.text.TextUtils
import com.cheng.blzb.bean.AccountEntity import com.cheng.blzb.bean.AccountEntity
import com.cheng.blzb.common.EventConstants import com.cheng.blzb.common.EventConstants
import com.cheng.blzb.databinding.FragmentAccountManageBinding import com.cheng.blzb.databinding.FragmentAccountManageBinding
@ -66,6 +67,28 @@ class AccountManageFragment : BaseFragment<FragmentAccountManageBinding, Account
mAdapter.setList(list) mAdapter.setList(list)
if (mAccount != null) { if (mAccount != null) {
mAdapter.addData(0, mAccount!!) mAdapter.addData(0, mAccount!!)
} else if (UserConfigManager.userInfo != null) {
val userinfo = UserConfigManager.userInfo
val bind = mutableListOf<String>()
if (!TextUtils.isEmpty(userinfo!!.unionid)) {
bind.add("weixin")
}
if (!TextUtils.isEmpty(userinfo.phone)) {
bind.add("phone")
}
val account = AccountEntity(
userinfo.avater,
bind,
"",
userinfo.name,
userinfo.phone,
userinfo.role.toInt(),
userinfo.temp,
userinfo.user_id,
userinfo.vip_name,
userinfo.vip
)
mAdapter.addData(0, account)
} }
} }