项目存在两处与「时间 / 登录态」相关的数据一致性问题,会影响连续打卡(streak)与使用体验。
harmony_app/entry/src/main/ets/entryability/EntryAbility.ets 使用:
harmony_app/entry/src/main/ets/entryability/EntryAbility.ets
static setUserInfo(user: UserInfo): void { const storage = LocalStorage.getShared(); storage.setOrCreate('currentUser', user); }
LocalStorage.getShared() 是 windowStage 级别的内存存储,App 进程重启后即丢失,用户每次冷启动都要重新登录。
LocalStorage.getShared()
建议:改用 @ohos.data.preferences(PreferencesHelper)持久化用户会话,或在服务端签发短期 token 存于 Preferences。
@ohos.data.preferences
getDailyWords / getProgress / learnWord 均使用:
getDailyWords
getProgress
learnWord
const today = new Date().toISOString().split('T')[0]; // UTC 日期
以 UTC 界定「今天」,对东八区(UTC+8)用户而言,UTC 00:00 ~ 08:00(北京时间 08:00 ~ 16:00)之间的学习记录会被计入「前一天」,可能导致:
todayLearned
streak
建议:统一以用户所在时区(或显式 Asia/Shanghai / +08:00)计算「今日」边界,或由端侧传入时区偏移。
Asia/Shanghai
+08:00
EntryAbility.ets
问题描述
项目存在两处与「时间 / 登录态」相关的数据一致性问题,会影响连续打卡(streak)与使用体验。
1)登录态不持久化
harmony_app/entry/src/main/ets/entryability/EntryAbility.ets使用:static setUserInfo(user: UserInfo): void { const storage = LocalStorage.getShared(); storage.setOrCreate('currentUser', user); }LocalStorage.getShared()是 windowStage 级别的内存存储,App 进程重启后即丢失,用户每次冷启动都要重新登录。建议:改用
@ohos.data.preferences(PreferencesHelper)持久化用户会话,或在服务端签发短期 token 存于 Preferences。2)时区问题导致打卡/连续天数错乱
getDailyWords/getProgress/learnWord均使用:const today = new Date().toISOString().split('T')[0]; // UTC 日期以 UTC 界定「今天」,对东八区(UTC+8)用户而言,UTC 00:00 ~ 08:00(北京时间 08:00 ~ 16:00)之间的学习记录会被计入「前一天」,可能导致:
todayLearned与用户感知不一致;streak(连续打卡)在跨日边界错误断开或错误累加。建议:统一以用户所在时区(或显式
Asia/Shanghai/+08:00)计算「今日」边界,或由端侧传入时区偏移。影响范围
EntryAbility.etsgetDailyWords、getProgress、learnWord