Open
[Bug][P1] 登录态不持久化 + UTC 时区导致连续打卡数据错乱 #3
雅皮士Add on  9 days ago
雅皮士
雅皮士
9 days ago Create

问题描述

项目存在两处与「时间 / 登录态」相关的数据一致性问题,会影响连续打卡(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.ets
  • 云侧:getDailyWords、getProgress、learnWord
likedislike
雅皮士雅皮士
9 days ago Associated pull request
雅皮士雅皮士
9 days ago Associated pull request
雅皮士雅皮士
9 days ago Associated pull request