一键连更改客服获取方式

This commit is contained in:
level 2025-07-29 15:51:09 +08:00
parent 3a44431418
commit ea098a2a63
6 changed files with 117 additions and 63 deletions

View File

@ -189,34 +189,6 @@ open class PublicViewMode : BaseViewMode() {
}
}
fun getYmKefuHost(callback: AsyncBodyCallback) {
val baseUrl=BuildConfig.service_url
val rt =
NetService.instances.createFreeBaseUrl(baseUrl)
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
try {
var host = rt.getKefuHost()
callback.suc(host)
} catch (e: Exception) {
e.printStackTrace()
callback.err()
}
}
}
fun getCustomServiceHost(callback: AsyncBodyCallback) {
val rt =
NetService.instances.createFreeBaseUrl("https://pubtofile.oss-cn-hongkong.aliyuncs.com/")
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
try {
val host = rt.getYingMaoKefuHost()
callback.suc(host)
} catch (e: Exception) {
e.printStackTrace()
callback.err()
}
}
}
fun getTzKefuHost(callback: AsyncBodyCallback) {
val rt =
NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
@ -320,4 +292,45 @@ open class PublicViewMode : BaseViewMode() {
}
}
}
fun getLocalHost(callback: AsyncBodyCallback) {
val baseUrl=BuildConfig.service_url
val rt = NetService.instances.createFreeBaseUrl(baseUrl)
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
try { //TODO bug 会引起崩溃
var host = rt.getLocalKefuHost()
callback.suc(host)
} catch (e: Exception) {
e.printStackTrace()
callback.err()
}
}
}
fun getCustomServiceNet(callback: AsyncBodyCallback) {
val rt =
NetService.instances.createFreeBaseUrl("https://pubtofilegz.oss-rg-china-mainland.aliyuncs.com/")
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
try {
val host = rt.getKklNetHost()
android.util.Log.i("getCustomServiceHost","Kf host::"+host)
callback.suc(host)
} catch (e: Exception) {
e.printStackTrace()
callback.err()
}
}
}
fun getCustomServiceNetS3(callback: AsyncBodyCallback) {
val rt =
NetService.instances.createFreeBaseUrl("https://wfjsq.s3.ap-east-1.amazonaws.com/")
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
try {
val host = rt.getKklNetS3()
android.util.Log.i("getCustomServiceHost","Kf host::"+host)
callback.suc(host)
} catch (e: Exception) {
e.printStackTrace()
callback.err()
}
}
}
}

View File

@ -240,10 +240,13 @@ interface HttpApi {
//客服链接
@GET("/oss/kf/yjl_kefu.txt")
suspend fun getKefuHost(): String
suspend fun getLocalKefuHost(): String
@GET("kf/yjl_kefu.txt")
suspend fun getKklNetHost(): String
@GET("/yjl_kefu.txt")
suspend fun getYingMaoKefuHost(): String
suspend fun getKklNetS3(): String
@GET("/taizi_kefu.txt")
suspend fun getTaiZiKefuHost(): String

View File

@ -127,11 +127,11 @@ class NetService private constructor() : INetService {
// .sslSocketFactory(getSSLSocketFactory(), CustomTrustManager())//信任所有证书
.sslSocketFactory(getSSLSocketFactory(), trustAllCerts[0] as X509TrustManager)
.hostnameVerifier(getHostnameVerifier()!!)
if (BuildConfig.DEBUG) {
builder.addInterceptor(loggingInterceptor)
// builder.addInterceptor(ExceptionLoggingInterceptor())
}
// builder.addInterceptor(loggingInterceptor)
// if (BuildConfig.DEBUG) {
// builder.addInterceptor(loggingInterceptor)
//// builder.addInterceptor(ExceptionLoggingInterceptor())
// }
builder.addInterceptor(loggingInterceptor)
return builder.build()
}

View File

@ -114,7 +114,7 @@ class BZYWebViewKeFu : BaseActivity() {
var mmkvHost = MMKV.defaultMMKV()
.decodeString(BZYConstants.MMKV_KEY_KEFU_HOST, "")
// com.cncat.vpn.common.log.Log.d("mmkvHost kf ==>${mmkvHost}")
webViewAtyVM.getYmKefuHost(object : AsyncBodyCallback {
webViewAtyVM.getLocalHost(object : AsyncBodyCallback {
override suspend fun suc(str: String) {
// com.cncat.vpn.common.log.Log.d("str==>${str}")
if (str != mmkvHost) {

View File

@ -0,0 +1,50 @@
package com.yingmao.clash.webview
import android.util.Log
import com.yingmao.clash.base.PublicViewMode
import com.yingmao.clash.listener.AsyncBodyCallback
class CustomServiceHelper(private val splashAtyVM: PublicViewMode) {
fun getHostWithFallback(callback: (String) -> Unit) {
tryGetHost(
{ splashAtyVM.getLocalHost(it) },
{ splashAtyVM.getCustomServiceNet(it) },
{ splashAtyVM.getCustomServiceNetS3(it) },
callback
)
}
private fun tryGetHost(
first: (AsyncBodyCallback) -> Unit,
second: (AsyncBodyCallback) -> Unit,
third: (AsyncBodyCallback) -> Unit,
callback: (String) -> Unit
) {
first(createCallback("getLocalHost method success", "getLocalHost method failed", callback) {
second(createCallback("getCustomServiceNet method success", "getCustomServiceNet method failed", callback) {
third(createCallback("getCustomServiceNetS3 method success", "getCustomServiceNetS3 methods failed", callback) {
callback("") // 所有方法都失败
})
})
})
}
private fun createCallback(
successLog: String,
errorLog: String,
callback: (String) -> Unit,
onFailure: () -> Unit
): AsyncBodyCallback {
return object : AsyncBodyCallback {
override suspend fun suc(str: String) {
Log.e("data", successLog)
callback(str) // 成功时回调
}
override fun err() {
Log.e("data", errorLog)
onFailure() // 失败时尝试下一个方法
}
}
}
}

View File

@ -28,7 +28,10 @@ import com.yingmao.clash.R
import com.yingmao.clash.base.BaseActivity
import com.yingmao.clash.conf.BZYConstants
import com.yingmao.clash.listener.AsyncBodyCallback
import com.yingmao.clash.view.RxToast
import com.yingmao.clash.vm.WebViewAtyVM
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import java.net.URLEncoder
@ -89,46 +92,31 @@ class CustomerServiceWebView:BaseActivity() {
// }
getCustomerServiceUrl()
}
private fun getCustomerServiceUrl() {
val userName = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME, "")
val enName = URLEncoder.encode(userName, "UTF-8")
Log.d("getCustomerServiceUrl enName==>${enName}")
if (TextUtils.isEmpty(customerServiceHost)) {
val mmkvHost = MMKV.defaultMMKV()
.decodeString(BZYConstants.MMKV_KEY_KEFU_HOST, "")
webViewVM.getYmKefuHost(object : AsyncBodyCallback {
override suspend fun suc(str: String) {
CustomServiceHelper(webViewVM).getHostWithFallback { str ->
if(str.isEmpty()){
RxToast.info("客服地址获取失败!")
return@getHostWithFallback
}
MainScope().launch {
if (str != mmkvHost) {
MMKV.defaultMMKV()
.encode(BZYConstants.MMKV_KEY_KEFU_HOST, str)
}
customerServiceHost = str
csWebView.loadUrl(str+"&app_account=${enName}"+"&app_t=${resources.getString(R.string.yijianlian)}"+"&app_v=${BuildConfig.VERSION_NAME}."+BuildConfig.productId)
}
override fun err() {
webViewVM.getCustomServiceHost(object : AsyncBodyCallback {
override suspend fun suc(str: String) {
if (str != mmkvHost) {
MMKV.defaultMMKV()
.encode(BZYConstants.MMKV_KEY_KEFU_HOST, str)
}
csWebView.loadUrl(str+"&app_account=${enName}"+"&app_t=${resources.getString(R.string.yijianlian)}"+"&app_v=${BuildConfig.VERSION_NAME}."+BuildConfig.productId)
}
override fun err() {
if (!TextUtils.isEmpty(mmkvHost)) {
csWebView.loadUrl(mmkvHost+"&app_account=${enName}"+"&app_t=${resources.getString(R.string.yijianlian)}"+"&app_v=${BuildConfig.VERSION_NAME}."+BuildConfig.productId)
}
}
})
}
})
}
} else {
csWebView.loadUrl(customerServiceHost + "&app_account=${enName}"+"&app_t=${resources.getString(R.string.yijianlian)}"+"&app_v=${BuildConfig.VERSION_NAME}."+BuildConfig.productId)
}
initKeyboardListener()
}
private fun initKeyboardListener() {