项目名称:宏信证券
KOCA版本 :koca_mobile 0.0.1
KOCA模块 :H5 打包成App
模块版本 :H5 打包成App
场景 : 移动端H5 打包成App发版使用,原始版本没有使用cookie与加密;最近一次需求要求有加密,后端且统一了PC与mobile的访问接口。
问题 :单独的H5正常使用,但是使用Hbuilder打包成App,接口就请求失败
报错细节 :请求响应错误
尝试解决方案:初步断定是App下的webview无法像浏览器那样正常使用cookie。使用过Okhttp 在App端做jsbridge,并把cookie交给Okhttp访问,访问能成功;但此方案改动了原koca_mobile 请求底层,不妥,且错误响应需要进行一一适配。其他方案还在和后端同事商量
UNIAPP 不支持自动保持 cookie, 需要手动做处理。
可以在网络框架的 response 和 request 拦截器内做统一处理,不需要一一适配。
类似以下 token 的处理方式:
响应拦截器
export default function responseInterceptor<T>(url, response): Promise<Result> {
if ((response.statusCode || response.status) == 200) {
let data = response.data;
const code = data.code
if (code === "0" || code === 0 || code == '000000') {
// 如果是发短信验证码接口
if (url.indexOf(urls.loginSms) != -1) {
uni.setStorageSync("_session", { token: response.header.token || "" });
}
// 如果是登录接口
if (url.indexOf(urls.login) != -1) {
const sessoion = uni.getStorageSync("_session");
if (sessoion) {
sessoion.token = response.header.token;
uni.setStorageSync("_session", sessoion); // 保存
}
}
}
return Promise.resolve(result);
}
请求拦截器
export default function requestInterceptor(options: Uniapp.RequestOptions) {
// ....
// 附带鉴权的token
const session = uni.getStorageSync('_session')
options.header.token = (session && session.token) || ''
// other code ....
return options
}
已换其他方法