18034727885
2026-08-20 75612bfbb092c7dd96d034a0db32662e6fd62dc2
优化检测升级逻辑和接口证书验证
9个文件已修改
196 ■■■■■ 已修改文件
app/src/main/java/com/driver/igotrip/netUtls/Api.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/driver/igotrip/netUtls/HttpManager.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/driver/igotrip/netUtls/NetKit.kt 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/driver/igotrip/ui/main/MainActivity.kt 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/driver/igotrip/ui/mine/setting/SettingActivity.kt 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/driver/igotrip/ui/pub/LoginActivity.kt 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values-en/strings.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values-fr/strings.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values/strings.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/driver/igotrip/netUtls/Api.java
@@ -97,7 +97,7 @@
    public static String replaceCar = "api/driver/replaceCar"; //api/driver/replaceCar 更换车辆
    public static String queryPhoneAll = "api/driver/queryPhone"; //api/driver/queryPhone 获取客服电话
    public static String queryByType = "base/agreement/queryByType"; //base/agreement/queryByType 获取各种协议及H5页面
    public static String queryNewData = "api/version/queryNewData"; //api/version/queryNewData 获取最新版本数据
    public static String queryNewData = "base/version/queryNewData"; //api/version/queryNewData 获取最新版本数据
    public static String updatePhone = "api/driver/updatePhone"; //api/driver/updatePhone 修改手机号码
    public static String updatePhone1 = "api/driver/updatePhone1"; //api/driver/updatePhone1 修改手机号码
app/src/main/java/com/driver/igotrip/netUtls/HttpManager.java
@@ -5,6 +5,9 @@
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.driver.igotrip.BuildConfig;
import com.driver.igotrip.R;
import com.driver.igotrip.base.Const;
@@ -20,6 +23,7 @@
import java.io.InputStream;
import java.lang.reflect.Type;
import java.security.KeyStore;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.HashMap;
@@ -55,7 +59,10 @@
 */
public class HttpManager {
    private final ApiServics service = initBaseData().create(ApiServics.class);
    //只信任指定证书的服务 安全级别高
    private final ApiServics service = initBaseData(true, false).create(ApiServics.class);
    //信任所有证书的服务 安全级别低
    private final ApiServics allTrustService = initBaseData(false, true).create(ApiServics.class);
    private Gson gson;
    private final Map<String, String> headerParams = new HashMap<>();
@@ -82,6 +89,7 @@
        }
    }
    @Nullable
    private SSLSocketFactory getSSLSocketFactory(X509TrustManager trustManager) {
        try {
            SSLContext tls = SSLContext.getInstance("TLS");
@@ -93,6 +101,10 @@
        return null;
    }
    /**
     * 创建特定证书信任管理器
     */
    @Nullable
    private X509TrustManager createTrustManager(int certificateResId) {
        try {
            CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
@@ -121,20 +133,53 @@
    }
    /**
     * 创建所有证书信任管理器
     */
    @NonNull
    private X509TrustManager createAllTrustManager() {
        return new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }
            @Override
            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }
            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return new X509Certificate[0];
            }
        };
    }
    /**
     * 初始化数据
     *
     */
    private Retrofit initBaseData() {
    private Retrofit initBaseData(boolean isUseCert, boolean isTrustAll) {
        // 监听请求条件
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.connectTimeout(3, TimeUnit.MINUTES);
        builder.readTimeout(3, TimeUnit.MINUTES);
        builder.writeTimeout(3, TimeUnit.MINUTES);
        if (isUseCert) {
        X509TrustManager trustManager = createTrustManager(R.raw.star_gopost_ci);
        if (trustManager != null) {
            SSLSocketFactory sslSocketFactory = getSSLSocketFactory(trustManager);
            if (sslSocketFactory != null) {
                builder.sslSocketFactory(sslSocketFactory, trustManager);
                }
            }
        } else {
            if (isTrustAll) {
                X509TrustManager trustManager = createAllTrustManager();
                SSLSocketFactory sslSocketFactory = getSSLSocketFactory(trustManager);
                if (sslSocketFactory != null) {
                    builder.sslSocketFactory(sslSocketFactory, trustManager);
                }
            }
        }
//        builder.addInterceptor(new Interceptor() {
@@ -213,7 +258,20 @@
//    public <T extends BaseBean> void post(final String action, Map<String, Object> params,
    public void post(final String action, Map<String, Object> params,
                     Observer<ResponseBody> observer) {
        post(action, params)
        post(false, action, params, observer);
    }
    /**
     * Post请求
     *
     * @param isUseAllTrustService 是否使用信任所有证书服务
     * @param action               请求接口的尾址
     * @param params               请求参数
     */
//    public <T extends BaseBean> void post(final String action, Map<String, Object> params,
    public void post(boolean isUseAllTrustService, final String action, Map<String, Object> params,
                     Observer<ResponseBody> observer) {
        post(isUseAllTrustService, action, params)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(observer);
@@ -226,6 +284,16 @@
     * @param params 请求参数
     */
    public Observable<ResponseBody> post(final String action, Map<String, Object> params) {
        return post(false, action, params);
    }
    /**
     * Post请求
     *
     * @param action 请求接口的尾址
     * @param params 请求参数
     */
    public Observable<ResponseBody> post(boolean isUseAllTrustService, final String action, Map<String, Object> params) {
        if (params == null) {
            params = new HashMap<>();
        }
@@ -233,7 +301,7 @@
        params.put(Const.language, type); // 1 中文 2 英文 3 法文
        LogUtils.d("post", params.toString());
        headerParams.put("Authorization", "Bearer " + getToken());
        return service.postResult(action, headerParams, params);
        return (isUseAllTrustService ? allTrustService : service).postResult(action, headerParams, params);
    }
    /**
app/src/main/java/com/driver/igotrip/netUtls/NetKit.kt
@@ -42,14 +42,25 @@
    clickAction: (responseString: String?) -> Unit,
    clickActionError: (code: Int, errorString: String?) -> Unit
) {
    callNet(false, showDialog, api, map, clickAction, clickActionError)
}
fun BaseActivity.callNet(
    isUseAllTrustService: Boolean,
    showDialog: Boolean,
    api: String,
    map: HashMap<String?, Any?>,
    clickAction: (responseString: String?) -> Unit,
    clickActionError: (code: Int, errorString: String?) -> Unit
) {
    if (showDialog)
        showDialog()
    if (api.startsWith("api")) {
        map["appid"] = getAppId()
        var sign = DES.getSign(map)
        val sign = DES.getSign(map)
        map["sign"] = sign
    }
    HttpManager.getInstance().post(api, map, object : MyObserver(this) {
    HttpManager.getInstance().post(isUseAllTrustService, api, map, object : MyObserver(this) {
        override fun success(responseString: String?) {
            if (showDialog)
                dismissDialog()
@@ -86,7 +97,7 @@
fun getAppId(): String {
    var appid = CacheKey.getKeyStr("appid")
    if (appid.isEmpty()) {
        return ""
        return "0"
    } else {
        return appid
    }
app/src/main/java/com/driver/igotrip/ui/main/MainActivity.kt
@@ -335,12 +335,13 @@
    }
    private fun callVersion() {
        var map = getMapByAny()
        val map = getMapByAny()
//        map["id"] = CacheKey.getUserId()
        callNet(Api.queryNewData, map) {
            var data = gson.fromJson<VersionBean>(it, VersionBean::class.java)
        callNet(isUseAllTrustService = true, showDialog = true, api = Api.queryNewData, map = map, clickAction = {
            val data = gson.fromJson<VersionBean>(it, VersionBean::class.java)
            if (data.data.version != "" && data.data.version != getVersionName()) {
                if (data.data.mandatory == 2) {
                when (data.data.mandatory) {
                    2 -> {
                    DialogUtil.getDelAndSureDialog(
                        this,
                        getString(R.string.新版本更新),
@@ -349,7 +350,9 @@
                        {
                            browse(data.data.url)
                        })
                } else if (data.data.mandatory == 1) {
                    }
                    1 -> {
                    DialogUtil.getDelAndSureDialog(
                        this,
                        getString(R.string.新版本更新),
@@ -360,12 +363,17 @@
                        {
                            browse(data.data.url)
                        })
                } else {
                    }
                    else -> {
//                    toast("已经是最新版本")
                    }
                }
            } else {
//                toast("已经是最新版本")
            }
        }) { _, _ ->
        }
    }
app/src/main/java/com/driver/igotrip/ui/mine/setting/SettingActivity.kt
@@ -2,7 +2,6 @@
import android.view.View
import android.widget.TextView
import cn.sinata.xldutils.utils.Utils
import cn.sinata.xldutils.utils.clickDelay
import cn.sinata.xldutils.utils.getVersionName
import com.driver.emanagercar.ui.base.BaseWebActivity
@@ -132,27 +131,35 @@
    }
    private fun callVersion() {
        var map = getMapByAny()
        val map = getMapByAny()
//        map["id"] = CacheKey.getUserId()
        callNet(Api.queryNewData, map) {
            var data = gson.fromJson<VersionBean>(it, VersionBean::class.java)
        callNet(isUseAllTrustService = true, showDialog = true, api = Api.queryNewData, map = map, clickAction = {
            val data = gson.fromJson<VersionBean>(it, VersionBean::class.java)
            if (data.data.version != "" && data.data.version != getVersionName()) {
                if (data.data.mandatory == 2) {
                when (data.data.mandatory) {
                    2 -> {
                    DialogUtil.getDelAndSureDialog(this, getString(R.string.新版本更新),data.data.content, {}, {
                        browse(data.data.url)
                    })
                } else if (data.data.mandatory == 1) {
                    }
                    1 -> {
                    DialogUtil.getDelAndSureDialog(this, getString(R.string.新版本更新),data.data.content, {
                        EventBus.getDefault().post(BaseEvent(BaseEvent.OUT_APP))
                    }, {
                        browse(data.data.url)
                    })
                }else{
                    }
                    else -> {
//                    toast("已经是最新版本")
                }
            } else {
//                toast("已经是最新版本")
            }
            } else {
                toast(getString(R.string.已经是最新版))
            }
        }) { _, _ ->
        }
    }
app/src/main/java/com/driver/igotrip/ui/pub/LoginActivity.kt
@@ -11,14 +11,18 @@
import android.widget.Toast
import cn.sinata.xldutils.utils.getAreaCode
import cn.sinata.xldutils.utils.getString
import com.driver.igotrip.base.local.BaseLoginActivity
import cn.sinata.xldutils.utils.getVersionName
import com.driver.igotrip.R
import com.driver.igotrip.base.BaseEvent
import com.driver.igotrip.base.MyApplication
import com.driver.igotrip.base.local.BaseLoginActivity
import com.driver.igotrip.bean.AgreeBean
import com.driver.igotrip.bean.LoginBean
import com.driver.igotrip.bean.VersionBean
import com.driver.igotrip.netUtls.Api
import com.driver.igotrip.netUtls.callNet
import com.driver.igotrip.netUtls.getMapByAny
import com.driver.igotrip.ui.DialogUtil
import com.driver.igotrip.ui.main.MainActivity
import com.driver.igotrip.utils.Cache.CacheKey
import com.driver.igotrip.utils.PhoneCheckUtil
@@ -26,6 +30,8 @@
import com.lzf.easyfloat.enums.ShowPattern
import com.lzf.easyfloat.enums.SidePattern
import com.lzf.easyfloat.interfaces.OnInvokeView
import org.greenrobot.eventbus.EventBus
import org.jetbrains.anko.browse
import org.jetbrains.anko.dip
import org.jetbrains.anko.find
import org.jetbrains.anko.startActivity
@@ -64,6 +70,7 @@
                LanguageUtil.reApp(this)
            }
        }*/
        callVersion()
    }
    fun callHtml(click: (s: String) -> Unit) {
@@ -189,4 +196,45 @@
        }
    }
    private fun callVersion() {
        val map = getMapByAny()
        callNet(isUseAllTrustService = true, showDialog = false, api = Api.queryNewData, map = map, clickAction = {
            val data = gson.fromJson<VersionBean>(it, VersionBean::class.java)
            if (data.data.version != "" && data.data.version != getVersionName()) {
                when (data.data.mandatory) {
                    2 -> {
                        DialogUtil.getDelAndSureDialog(
                            this,
                            getString(R.string.新版本更新),
                            data.data.content,
                            {},
                            {
                                browse(data.data.url)
                            })
                    }
                    1 -> {
                        DialogUtil.getDelAndSureDialog(
                            this,
                            getString(R.string.新版本更新),
                            data.data.content,
                            {
                                EventBus.getDefault().post(BaseEvent(BaseEvent.OUT_APP))
                            },
                            {
                                browse(data.data.url)
                            })
                    }
                    else -> {
                        //                    toast("已经是最新版本")
                    }
                }
            } else {
                //                toast("已经是最新版本")
            }
        }) { _, _ ->
        }
    }
}
app/src/main/res/values-en/strings.xml
@@ -830,4 +830,6 @@
    <string name="优惠券">Coupon</string>
    <string name="收款金额">Payment Amount</string>
    <string name="订单收款金额">Order payment amount</string>
    <string name="已经是最新版">当前已经是最新版本了</string>
</resources>
app/src/main/res/values-fr/strings.xml
@@ -834,4 +834,6 @@
    <string name="优惠券">Coupon</string>
    <string name="收款金额">Montant de recette</string>
    <string name="订单收款金额">Montant perçu de la commande</string>
    <string name="已经是最新版">Vous utilisez déjà la dernière version.</string>
</resources>
app/src/main/res/values/strings.xml
@@ -822,4 +822,6 @@
    <string name="优惠券">优惠券</string>
    <string name="收款金额">收款金额</string>
    <string name="订单收款金额">订单收款金额</string>
    <string name="已经是最新版">当前已经是最新版本了</string>
</resources>