HarmonyOS鸿蒙Next登录开发总结
HarmonyOS鸿蒙Next登录开发总结
1.开发准备
在开发具备用户身份认证的应用前,需要先申请权限ohos.permission.INTERNET,应用才能具备联网权限进行身份认证。该权限授权方式为system_grant(系统授权),开发者只需要在module.json5配置文件的requestPermissions标签中声明权限,即可获取系统授权。
准备axios三方库利用axios封装登录http请求 打开终端输入ohpm install @ohos/axios 即可下载好该插件最后同步至项目就能全局调用了
2.封装axios请求
登录的关键代码就是发送post请求到指定的登陆页面的url然后传给web组件完成登录操作
/**
* post请求
* @param url url请求地址
* @param params 请求参数
* @returns 指定类型数据
*/
post<TParam, TResponse>(url: string, params?: TParam, contentType?: TnxHttpContentType, isFullUrl?: boolean): Promise<TResponse> {
let realParams = contentType !== TnxHttpContentType.URL ? params : CommonTools.buildJson2UrlParams(params);
return this.http!.post(url, realParams, {
params: { isFullUrl },
headers: this.getRequestHeaders(contentType)
});
}
3.用封装的Web组件封装登录页面和请求
WebViews({
webviewSrc: this.url,
onLoadIntercept: (data: WebResourceRequest) => {
const url = data.getRequestUrl();
const callBackUrl = `${this.linkDomain}${apiUrls.link.teslaCallback}`;
if(url.startsWith(callBackUrl)) {
// 解析url, 取除code
const code = CommonTools.getUrlValue(url, 'code');
// post请求拿token
http.post(apiUrls.login.teslaToken, { code, email: this.userLoginEmail } as ESObject)
.then((res: TnxUser) => {
const token: string = res.auth_token.key;
AppStorage.setOrCreate(TNX_USER_TOKEN, token);
let data:emitter.EventData ={data:{
token:true,
}}
// 告诉已经订阅登录状态的页面 完成了登录并且存好了token
// 发布事件 通知全局拿到token并且刷新UI
EventBus.getInstance().post(AppEvent.EVENT_TEST,data)
// 关闭登录页,打开首页
this.closeAllModal();
promptAction.showToast({ message: '登录成功!' });
},
() => {
// 回到初始登录页
this.isShowLogin = false;
});
return true;
}
return false;
},
onPageEnd: (url: string, controller: webview.WebviewController) => {
controller.runJavaScript("document.getElementsByClassName('tds-flex-item')[0].innerText",
(error: BusinessError, result: string) => {
if(result !== "null") {
let email = result.replaceAll(`\"`, "").trim();
if(email) {
this.userLoginEmail = email;
// 将输入的邮箱持久化到磁盘
data_preferences.getPreferences(this.context, 'userInfo').then(preferences => {
preferences.put('userLoginEmail',this.userLoginEmail).then(() => {
preferences.flush()
})
})
}
}
});
}
})
4.封装的web组件
关键点 incognitoMode:true 和 webview.WebCookieManager.clearAllCookiesSync(true); 开启隐私模式否则第二次登陆会默认之前输入的账号密码 设置这两个参数能够清空web组件的cookie和一些保存的隐私信息
Web({
src: this.webviewSrc,
controller: this.controller,
incognitoMode:true // 开启隐私模式
})
.javaScriptAccess(true)
.domStorageAccess(true)
.onLoadIntercept((event: OnLoadInterceptEvent) => {
return this.onLoadIntercept ? this.onLoadIntercept(event.data) : false;
})
.onPageEnd((event: OnPageEndEvent) => {
this.onPageEnd && this.onPageEnd(event.url, this.controller);
})
.onDisAppear(()=>{
this.controller.removeCache(true)
webview.WebCookieManager.clearAllCookiesSync(true);
})
更多关于HarmonyOS鸿蒙Next登录开发总结的实战教程也可以访问 https://www.itying.com/category-93-b0.html
HarmonyOS鸿蒙Next登录开发主要涉及使用ArkTS语言进行UI设计和业务逻辑实现。开发者需通过@State
、@Prop
等装饰器管理组件状态,利用@Entry
和@Component
定义页面和组件。登录功能通常包括账号密码输入、验证码获取、登录按钮点击等交互,需调用http
模块进行网络请求,处理返回数据。开发者还需关注安全机制,如数据加密、防重放攻击等。
更多关于HarmonyOS鸿蒙Next登录开发总结的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
从代码来看,这是一个完整的HarmonyOS Next登录功能实现方案,主要包含以下几个关键技术点:
- 权限配置
- 正确配置了ohos.permission.INTERNET网络权限
- 使用system_grant方式获取系统授权
- HTTP请求封装
- 使用ohpm安装axios三方库
- 实现了泛型化的post请求方法
- 处理了不同contentType的参数转换
- Web组件集成
- 通过Web组件加载登录页面
- 使用onLoadIntercept拦截回调URL
- 从URL中解析授权码code
- 登录流程
- 获取code后调用token接口
- 成功后将token存入AppStorage
- 使用EventBus通知全局登录状态变更
- 关闭登录页并跳转首页
- 数据持久化
- 使用data_preferences存储用户邮箱
- 调用flush确保数据立即写入
- 隐私保护
- 设置incognitoMode开启隐私模式
- 使用WebCookieManager.clearAllCookiesSync清理cookies
- 页面消失时调用removeCache清理缓存
整体实现考虑全面,涵盖了登录流程的各个环节,特别是隐私和安全方面的处理很到位。代码结构清晰,使用了TypeScript的类型特性,是一个不错的HarmonyOS Next登录功能参考实现。