鸿蒙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与微内核
目前主流面向个人端操作系统都不是像鸿蒙一样采用微内核的,或许在这些操作系统上诞生时面对的需求场景用微内核是行不通的.但在当前场景下是不是能走通要实际验证才知道.面对当前操作系统已成熟的市场生态.专利技 ...
随机推荐
- mysql进阶-SQL优化篇
SQL优化 -插入数据 批量插入:(一次尽量不超过1000条) Insert into tb test values(1,'Tom'),(2,'cat'),(3, Jerny'); 手动事务提交: s ...
- Tomcat通信概念篇
在上一篇了解完网络通信的基本概念之后,本章节为了解Tomcat的基本逻辑方便以后对 UDP:(发短信,不管是否能接受成功都会发送) //发送端 //不需要连接服务器 public static voi ...
- Gitlab私有存储库支持SourceLink 调试之使用proxy方式
前情概要 在 让你发布的nuget包支持源代码调试#为gitlab的私有源代码项目提供支持 小节中有介绍到如何让gitlab的私有存储库支持SourceLink. 其中有一个方法是说在vs中打开web ...
- KubeSphere 社区双周报 | KubeKey 新增网络插件 Hybridnet | 2023.08.18-08.31
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- 云原生爱好者周刊:STUNner 助你在 K8s 集群中使用 WebRTC 服务
开源项目推荐 STUNner 目前大多数内网穿透服务都依赖于 STUN 服务或者 TURN 服务,但这些服务大多数都是公用的,即使是私有化部署,也没法迁移到 Kubernetes 的环境中,因为 Ku ...
- v-if的使用方式
一.语法 其中<span></span>可以换成<div></div>, <div></div>的可以换成<templet ...
- NES 系统架构
主机 NES(FC.红白机.小霸王)的系统架构可用下图表示: 系统中最核心的组件是 CPU,其它组件都可以算作 CPU 的外设.CPU 的外设包括:PPU(图像处理器).APU(音频处理器).WRAM ...
- Nuxt.js 应用中的 schema:written 事件钩子详解
title: Nuxt.js 应用中的 schema:written 事件钩子详解 date: 2024/11/15 updated: 2024/11/15 author: cmdragon exce ...
- 微信小游戏sdk接入支付和登录,解决了wx原生不支持ios支付的痛点
前情提要 微信小游戏是小程序的一种. 项目接入微信小游戏sdk的支付和登录.主要难点在于接入ios的支付.因为官方只支持android, 不支持ios. 即ios用户不能直接在小游戏中发起支付,参考市 ...
- Git中使用tag
什么是tag git仓库的tag是git版本库的一个标记,指向某个commit id标记的快照记录指针,所以,标签也是版本库的一个快照. tag主要用于发布版本的管理,一个当版本发布后,可以为git当 ...