跨端: feat(推送客户端): 契约层 model/PushContract.ts + 6 条设备无关判据(静默失败/enabled:false 正常态/按 provider+tail 比/按 mail_id 去重)
pi 2026-09-14 推送契约的客户端半边。四条不变量里**三条是纯逻辑**,所以先落这三条, 平台调用(Push Kit 取 token、通知权限)留在下一步的 `PushService.ets` 里。 - `shouldReportToken`:取不到 token 不上报;与上次相同不重复上报(否则每次启动打一次接口); - `tokenTail` / `isRegistered`:GET **只回尾 6 位** ⇒ "登记过没有"必须按 `provider + tail` 比。 比全文是**看起来更严、其实永远为假**的写法(全文永不等于尾 6 位 ⇒ 每次启动重复上报), 所以有判据钉它,并在注释里写明"同尾 6 位即视为同一条 —— 这是服务端给的信息量的上界,不是我们的选择"; - `classifyRegister`:`ok-enabled` / `ok-disabled` / `silent-skip` —— **三种里没有一种是"提示失败"** (`enabled:false` 是自部署常态 ⇒ 不重试、不提示); - `parseNotificationData`:不满足约定形状就返回 undefined(坏 JSON 不抛、缺 mail_id/动作不符都忽略)—— 推送是可选通道,收到不认识的东西不许有任何副作用; - `NotificationLedger`:服务端**无幂等键**(至多一次、无重试/去重表)⇒ 重复保护落客户端;台账**有界**。 另有一条判据禁止契约层引入 `@ohos`/`@kit`(否则这些判据会退化成必须上设备)。 它第一次跑**咬到了解释这条规则的那行注释** ⇒ 改扫 `code()`(去注释),与前面扫描口径那次同族。 `npm test`(install 相位)全绿;余额 `debts=13`。
This commit is contained in:
@ -79,6 +79,7 @@ const SUITE = [
|
||||
['test/build-stamp.test.mjs', [], 7],
|
||||
['test/packaging.test.mjs', [], 5],
|
||||
['test/align-refs.test.mjs', [], 3],
|
||||
['test/harmony-push.test.mjs', ['--experimental-strip-types', '--no-warnings'], 6],
|
||||
['test/harmony-calendar.test.mjs', ['--experimental-strip-types', '--no-warnings'], 10],
|
||||
['test/debt-visibility.test.mjs', [], 1],
|
||||
['test/commit-hygiene.test.mjs', ['--experimental-strip-types', '--no-warnings'], 2],
|
||||
|
||||
Reference in New Issue
Block a user