鸿蒙OS开发秘籍:打造优雅的登录状态管理系统
一、前言
在鸿蒙OS开发过程中,随着应用规模的扩大,登录状态管理逐渐成为系统设计中的一个挑战。一个清晰、高效的登录状态管理系统不仅可以简化开发流程,还能提升用户体验。本文将分享一种优雅的登录状态管理设计方案,帮助开发者轻松应对复杂系统中的登录状态控制。
二、认证事件与认证代码设计
认证事件是应用全局事件的核心,它触发登录或退出操作,并可在整个项目中进行广播。我们定义了三种基本的认证事件:启动认证、登录认证和退出认证。
认证事件代码示例:
export class AuthenticationEvent {
static readonly AppStart = "$AppStart$";
static readonly LogIn = "$LogIn$";
static readonly LogOut = "$LogOut$";
}
三、认证状态
用户认证状态是系统判断用户是否登录的关键。我们定义了两种状态:认证成功和未认证。
认证状态代码示例:
export const AUTHENTICATION_STATE:string = "$AuthenticationState$"
// 认证状态
export class AuthenticationState {}
// - authenticated - 认证成功
export class AuthenticationAuthenticated extends AuthenticationState {}
// - unauthenticated - 未认证
export class AuthenticationUnauthenticated extends AuthenticationState {}
四、认证接口模板
认证接口是登录状态管理的具体实现,包括token的检查、保存和删除,以及认证成功和未认证时的页面跳转。
认证接口代码示例:
const TOKEN = "token";
export abstract class IUserAuthentication {
libPreferencesSync: LibPreferencesSync;
hasToken(): boolean {
return this.libPreferencesSync.getValue(TOKEN).toString().length > 0;
}
saveToken(token: string) {
this.libPreferencesSync.saveKeyValue(TOKEN, token);
}
deleteToken() {
this.libPreferencesSync.deleteData(TOKEN);
}
abstract authPage(): void;
abstract unAuthPage(): void;
}
五、管理登录状态的页面
通过事件中心(eventHub),我们可以在整个应用中进行全局状态通知。登录状态管理器根据用户发送的事件来改变认证状态。
登录状态管理器代码示例:
export class Authentication{
// 私有静态变量,用于保存单例对象
private static _instance :Authentication;
// 私有构造函数,防止外部直接实例化
private constructor() {
// 构造函数内容
}
// 静态方法,用于获取单例对象
public static getInstance() {
if (!Authentication._instance) {
Authentication._instance = new Authentication();
}
return Authentication._instance;
}
startApp(){
Application.getInstance().applicationContext.eventHub.emit(AuthenticationEvent.AppStart)
}
logIn(token:string){
Application.getInstance().applicationContext.eventHub.emit(AuthenticationEvent.LogIn,token)
}
logOut(){
Application.getInstance().applicationContext.eventHub.emit(AuthenticationEvent.LogOut)
}
init(iuserAuthentciation : IUserAuthentication){
Application.getInstance().applicationContext.eventHub.on(AuthenticationEvent.AppStart,()=>{
if(iuserAuthentciation.hasToken()){
AppStorage.setOrCreate(AUTHENTICATION_STATE,new AuthenticationAuthenticated())
iuserAuthentciation.authPage();
}else{
AppStorage.setOrCreate(AUTHENTICATION_STATE,new AuthenticationUnauthenticated())
iuserAuthentciation.unAuthPage();
}
})
Application.getInstance().applicationContext.eventHub.on(AuthenticationEvent.LogIn,(token:string)=>{
iuserAuthentciation.saveToken(token)
AppStorage.set(AUTHENTICATION_STATE,new AuthenticationAuthenticated())
iuserAuthentciation.authPage();
})
Application.getInstance().applicationContext.eventHub.on(AuthenticationEvent.LogOut,()=>{
iuserAuthentciation.deleteToken()
AppStorage.set(AUTHENTICATION_STATE,new AuthenticationUnauthenticated())
iuserAuthentciation.unAuthPage();
})
}
}
六、项目中的使用
在项目中,我们通过初始化登录状态管理器,并在页面中根据认证状态改变页面样式或行为。
项目使用代码示例:
class Auth extends IUserAuthentication {
// ... 实现具体的登录和未登录页面跳转逻辑
}
// 初始化
Authentication.getInstance().init(new Auth());
// 页面中使用
aboutToAppear(): void {
this.authentication();
}
authentication() {
if (this.authetication instanceof AuthenticationAuthenticated) {
//获取用户数据
} else if (this.authetication instanceof AuthenticationUnauthenticated) {
//删除用户数据
}
}
七、总结
通过本文的分享,我们学习了如何在鸿蒙OS中设计和实现一个优雅的登录状态管理系统。从认证事件的设计到认证状态的管理,再到具体的认证接口实现,每一步都是为了简化开发流程,提高系统的健壮性和可维护性。希望本文能够为鸿蒙OS的开发者提供实用的参考和启发。
鸿蒙OS开发秘籍:打造优雅的登录状态管理系统的更多相关文章
- 从微信小程序到鸿蒙js开发【12】——storage缓存&自动登录
鸿蒙入门指南,小白速来!从萌新到高手,怎样快速掌握鸿蒙开发?[课程入口] 正文: 在应用开发时,我们常需要将一些数据缓存到本地,以提升用户体验.比如在一个电商的app中,如果希望用户登录成功后,下次打 ...
- 鸿蒙OS前端开发入门指南:网络图片_Image渲染网络图片
目录: 1.开启明文传输 2.权限申请 3.引入http插件 4.案例展示 5.<鸿蒙OS前端开发入门指南>文章合集 开启明文传输 在config.json配置文件添加如下配置(如果不开启 ...
- 最全华为鸿蒙 HarmonyOS 开发资料汇总
开发 本示例基于 OpenHarmony 下的 JavaScript UI 框架,进行项目目录解读,JS FA.常用和自定义组件.用户交互.JS 动画的实现,通过本示例可以基本了解和学习到 JavaS ...
- 华为鸿蒙OS发布!方舟支持混合编译,终将可替换安卓?
前言 有关于鸿蒙的消息之前也有说过,就在昨天下午,华为举行了2019开发大会,正式推出了鸿蒙os系统(Harmony).其相关负责人表示,也是基于微软内核的全场景分布式OS 鸿蒙凭借微内核的优势, ...
- 鸿蒙OS与谷歌Fuchsia
鸿蒙,意在“开天辟地”,它的征程是物联网.跨终端,是一款战略性产品.它真正对标的不是安卓,而是谷歌最新研发的操作系统Fuchsia. 根据Fuchsia中文社区的介绍,在安卓和 Chrome OS 两 ...
- 【转帖】知乎管理华为鸿蒙OS的介绍2
作者:虎游链接:https://www.zhihu.com/question/328382980/answer/784629132来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- Harmony OS 开发避坑指南——源码下载和编译
Harmony OS 开发避坑指南--源码下载和编译 本文介绍了如何下载鸿蒙系统源码,如何一次性配置可以编译三个目标平台(Hi3516,Hi3518和Hi3861)的编译环境,以及如何将源码编译为三个 ...
- Harmony OS 开发避坑指南——DevEco Device Tool 安装配置
Harmony OS 开发指南--DevEco Device Tool 安装配置 本文介绍如何在Windows主机上安装DevEco Device Tool工具. 坑点总结: 国内部分网络环境下,安装 ...
- Android 快速开发系列 打造万能的ListView GridView 适配器
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38902805 ,本文出自[张鸿洋的博客] 1.概述 相信做Android开发的写 ...
- 鸿蒙OS与微内核
目前主流面向个人端操作系统都不是像鸿蒙一样采用微内核的,或许在这些操作系统上诞生时面对的需求场景用微内核是行不通的.但在当前场景下是不是能走通要实际验证才知道.面对当前操作系统已成熟的市场生态.专利技 ...
随机推荐
- KubeSphere 社区双周报|2024.06.21-07.04
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- Windows安全中心在手动删除威胁文件后无法处理,一直显示有威胁
从网络上找到了一个简单靠谱的解决方案,与众位分享: 找到C:\ProgramData\Microsoft\Windows Defender\Scans\History\Service\Detectio ...
- 01_GoLand debug时出现Connected并且程序卡住的问题
01_GoLand debug时出现Connected并且程序卡住的问题 环境:win10.go version go1.19.4 windows/amd64.GoLand 2020.3.5 x64 ...
- 从0.1开始学java(2)
string串池 现在都在堆中 "=="号的比较 字符串比较一般调用equals或者equalsignoreCase API来比较(后者忽略大小写) StringBuilder 可 ...
- 使用IntelliJ IDEA中的Live Templates自定义代码模板
平时用IntelliJ IDEA写代码的时候,你有没有用过这些快捷方式: 输入main,会弹出自动补全完整的main结构: 输入sout,会弹出自动补全完整的System.out语句: 那么问题来了: ...
- Rust编程与项目实战-结构体
<Rust编程与项目实战>(朱文伟,李建英)[摘要 书评 试读]- 京东图书 (jd.com) 在Rust中,结构体(Struct)是一种自定义数据类型,它允许我们将多个相关的值组合在一起 ...
- HAL+CubeIDE,STM32F407ZGT6正点原子探索者,舵机驱动,从零开始
CubeIDE_HAL库_从零开始玩舵机 1.材料准备 开发板:正点原子STM32F407ZGT6探索者 舵机:SG90 舵机线材分辨:褐色 / 红色 / 橘黄色 -- GND / VCC / PWM ...
- .NET周刊【11月第2期 2024-11-10】
国内文章 .NET 全能高效的 CMS 内容管理系统 https://www.cnblogs.com/1312mn/p/18511224 SSCMS 是一个完全开源的企业级内容管理系统,基于 .NET ...
- .NET 创建动态方法方案及 Natasha V9
前言 本篇文章前面客观评估了 .NET 创建动态方方案多个方面的优劣,后半部分是 Natasha V9 的新版特性. .NET 中创建动态方法的方案 创建动态方法的不同选择 以下陈列了几种创建动态方法 ...
- 【THUPC 2024 初赛】 E 转化
[THUPC 2024 初赛] 转化 我都能做出来,那就是大水题了. 思路 首先我们要确定最大可以变色的球的数量 \(tot\). 有如下两个贪心步骤: 所有颜色使用分裂操作,并更新 \(a_i\). ...