fix(push): 通知开关默认改开(修正误解「可配置项=默认关」致 token 从不上报)
★ 功能性硬伤修复:用户实测「新邮件根本没有通知」。
根因:我上一版把 PushService.isEnabled 默认设成关(读不到即 false),
误解了「接入系统通知是可配置项」的本意 —— 用户要的是「服务端没配凭证时
客户端优雅降级」(enabled:false 是正常态,不报错不阻塞),不是「默认关掉
推送功能」。结果 reportToken 最前 gate 直接 return,device token 从未上报,
DB 里 0 个 token,NotifyNewMail 在 len(tokens)==0 时静默返回 ⇒ 永远发不出。
修正:
- PushContract.DEFAULT_PUSH_ENABLED: false → true(契约层默认开)
- PushService.isEnabled: getSync 默认值用 DEFAULT_PUSH_ENABLED(true),
catch 也返回 true —— 只有用户显式关才不上报
- 判据同步:harmony-push-optin ①② 改默认开口径
验证(服务端→HMS 链路实打已通):
- OAuth access_token 取得(app_secret 有效)
- POST /v1/{appId}/messages:send + test_message 调通,
HMS 回 80300007 "All tokens are invalid"(假 token 无效,但凭证/形状/认证全被接受)
⇒ 只要 DB 有真实 device token 就能送达(token 由客户端上报)
This commit is contained in:
@ -24,6 +24,7 @@ import { ApiClient } from './ApiClient';
|
||||
import { AccountManager } from './AccountManager';
|
||||
import {
|
||||
PROVIDER_HMS,
|
||||
DEFAULT_PUSH_ENABLED,
|
||||
PushRegisterBody,
|
||||
PushNotificationData,
|
||||
buildTokenBody,
|
||||
@ -81,16 +82,17 @@ export class PushService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 读「接入系统通知」开关(**默认关** —— 自部署/无凭证时零开销)。
|
||||
* 读不到(首次/异常)都返回 false:宁可不开,也不要"默认就把用户裹进来"。
|
||||
* 读「接入系统通知」开关(**默认开** —— 见 PushContract.DEFAULT_PUSH_ENABLED)。
|
||||
* 读不到(首次/异常)都返回开:推送是用户要能默认收到的功能,
|
||||
* 降级发生在服务端回 enabled:false 时(通道未配),不是由客户端默认关掉。
|
||||
*/
|
||||
static isEnabled(context: common.Context): boolean {
|
||||
try {
|
||||
const store = preferences.getPreferencesSync(context, { name: STORE });
|
||||
const v = store.getSync(SETTING_KEY, false);
|
||||
const v = store.getSync(SETTING_KEY, DEFAULT_PUSH_ENABLED);
|
||||
return v === true;
|
||||
} catch (e) {
|
||||
return false;
|
||||
return DEFAULT_PUSH_ENABLED;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -14,10 +14,11 @@ export const PROVIDER_HMS: string = 'hms';
|
||||
|
||||
/*
|
||||
* ★ 2026-09-15:接入系统通知 = **可配置项**(用户强调多次——“用户可以自由部署自己的 agentmail”)。
|
||||
* 默认 **关**:自部署/无服务端推送凭证时,客户端不取 token、不弹权限、不上报、不打网关。
|
||||
* 这个常量是**契约**(判据跑它),实际落点在 PushService.isEnabled 的读不到即 false。
|
||||
* 含义是:**服务端没配推送凭证时客户端优雅降级**(enabled:false 是正常态,不报错、不阻塞、不弹窗),
|
||||
* **不是**默认关掉推送功能。默认 **开** —— 用户要能收到新邮件通知;降级发生在服务端回 enabled:false 时。
|
||||
* 这个常量是**契约**(判据跑它),实际落点在 PushService.isEnabled 的读不到即开。
|
||||
*/
|
||||
export const DEFAULT_PUSH_ENABLED: boolean = false;
|
||||
export const DEFAULT_PUSH_ENABLED: boolean = true;
|
||||
|
||||
/** 签名:'on' | 'off'(开关的显示口径;无服务器状态时显示 'server-unknown') */
|
||||
export function pushEnabledLabel(enabled: boolean): string {
|
||||
|
||||
Reference in New Issue
Block a user