#跟着若城学鸿蒙# web篇-UA及Cookie管理
前言
在实际业务中,我们需要加载 h5页面,而同一个h5页面可能在不同app中打开,我们需要对加载h5页面的环境做判断,这里我们的业务中修改UA,前端或者服务端可以通过UA来判断来源。
同样的,我们的登录页面是原生页面,有些h5页面需要登录状态才能访问,而我们的业务中是通过cookie来判断用户权限。
UA管理
根据文档介绍:User-Agent(简称UA)是一个特殊的字符串,包含设备类型、操作系统及版本等关键信息,在HarmonyOS中,默认值为: Mozilla/5.0 ({DeviceType}; {OSName} {OSVersion}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{ChromeCompatibleVersion}.0.0.0 Safari/537.36 ArkWeb/{ArkWeb VersionCode} {DeviceCompat} {扩展区}
,具体的字段说明,可以参考官方文档默认user-agent结构
我们可以通过this.controller.getUserAgent()
来获取默认值,同时我们也可以通过setCustomUserAgent
来设置UA的值。
下面来看具体例子
@Entry
@Component
struct WebComponent {
controller: webview.WebviewController = new webview.WebviewController();
@State customUserAgent: string = ' appName_appVersion';
build() {
Column() {
Web({ src: 'www.example.com', controller: this.controller })
.onControllerAttached(() => {
console.log("onControllerAttached");
try {
let userAgent = this.controller.getUserAgent() + this.customUserAgent;
this.controller.setCustomUserAgent(userAgent);
} catch (error) {
console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`);
}
})
}
}
}
注意,这里建议在onControllerAttached
方法中设置。
这样,我们就可以在h5页面中根据拼接的值来判断当前页面处于哪个环境,进行做出不同的处理。 当app升级时,同时修改拼接的字符串,可以根据不同的版本号来做版本兼容。
Cookie
我们的业务中登录状态是放在请求头的cookie字段中,服务端可根据cookie来识别用户身份以及权限。
但我们的登录页面是原生页面,某些h5页面也需要登录才能访问,这就需要我们在原生页面登录成功后,将cookie同步到h5中,进而使得h5可以正常访问。
这里假设我们登录后将cookie做了持久化存储,并且可以通过 getCookie()
方法来获取到cookie
setSessionId() {
const sessionid = getCookie()
hilog.error(0x01, 'WebComponent', 'setSessionId --> ' + sessionid)
if(sessionid){
webview.WebCookieManager.configCookieSync('.xxx.com', sessionid);
webview.WebCookieManager.configCookieSync('.yyy.com', sessionid);
}
}
我们可以在页面可见时就调用该方法设置web组件的cookie值,但官方介绍中说同步cookie的时机建议在Web组件加载之前完成。
需要注意的是:
configCookie中的url,可以指定域名的方式来使得页面内请求也附带上cookie。
若通过configCookieSync进行两次或多次设置cookie,则每次设置的cookie之间会通过"; "进行分隔。
当然还有其他不同参数的方法,可以在官方文档查阅,选择符合自己需求的api在合适的时机调用
获取cookie
当然有时候我们可能需要反向操作符:从web中获取cookie同步给原生请求,常见的是原生应用加载三方的h5业务页面,需要在h5中进行登录三方账号,然后同步给原生。
我们可以使用webview.WebCookieManager.fetchCookieSync
方法来获取cookie,需要注意的是:
系统会自动清理过期的cookie,对于同名key的数据,新数据将会覆盖前一个数据。
为了获取可正常使用的cookie值,fetchCookieSync需传入完整链接。
fetchCookieSync用于获取所有的cookie值,每条cookie值之间会通过"; "进行分隔,但无法单独获取某一条特定的cookie值。
这样,我们就完成了cookie的双向同步,以及设置自定义的UA,这里建议只在UA中追加自定义的数据,不要删除原有信息
更多推荐
所有评论(0)