dsh-mobile 0.7.1 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,118 @@
1
+ # iPhone 与 iPad 网页推送
2
+
3
+ [English](<WEB_PUSH.en.md>) · [文档索引](<README.md>)
4
+
5
+ > **插件 0.8.0 起支持 iPhone / iPad 网页推送**。先用 Safari 配对并添加到主屏幕,再在 DSH 页面内主动开启通知。推送面向具备能力的 iOS/iPadOS **18.4+ 主屏幕 Web App**,不需要原生 iOS App,也不需要通知 SaaS 账号。
6
+
7
+ ## 在 iPhone 和 iPad 上使用 DSH Mobile
8
+
9
+ DSH Mobile 插件运行在**电脑**上。iPhone/iPad 用户用 **Safari** 打开专用的移动访问页面,与电脑配对后,可将页面添加到主屏幕作为 Web App(PWA)使用,无需下载原生 iOS App。先按[连接教程](<../README.md#连接教程>)完成连接;无需开启通知也能使用 DSH 会话和工作区。
10
+
11
+ 添加到主屏幕不代表可以离线使用 DSH:电脑、DSH 和 Mobile Gateway 须保持运行,手机使用时也须能连接网关。下文 **18.4+ 的目标环境仅针对可选的网页推送**,不代表普通浏览器访问的最低版本;浏览器兼容性仍取决于 DSH 前端。
12
+
13
+ ## 使用条件
14
+
15
+ - 支持页面级 `window.pushManager` 的 iPhone/iPad 主屏幕 Web App,并以独立模式打开。插件检查实际能力,不根据浏览器版本字符串放行;普通 Safari 标签页和不支持的浏览器没有 Service Worker 降级方案。
16
+ - **固定、受信任的 HTTPS Origin**,以及现有 DSH Mobile 浏览器配对。HTTP 和绕过证书警告不属于受支持的推送配置;Android App 固定私有 CA,不等于 iPhone 浏览器信任该 CA。
17
+ - 电脑端已更新到插件 **0.8.0 或更高版本**,DSH 和对应 HTTPS 地址的 Mobile Gateway 正在运行。推送的打包自动化检查覆盖 DSH **0.2.1-rc.2 / rc.3**;其他版本仍取决于所需公共服务是否可用,缺少服务只关闭推送,不关闭普通移动访问。
18
+ - 主机和手机能出站连接 Apple 推送基础设施。不需要 Apple 开发者会员、通知 SaaS 账号或新增公网入站端口。此功能不创建 VPN、不改证书/防火墙,也不配置代理。
19
+
20
+ 使用公开受信任证书的私有 HTTPS 主机名在架构上可以使用。安装、启用、认证和打开会话时,手机仍须能访问该 Origin。私有/Tailscale Origin 的投递**尚未实测确认**;不要为了尝试推送把私有后端直接暴露到公网。随机隧道域名不适合作为长期安装地址:Origin 改变后,不自动迁移授权或订阅。需要长期地址时,可参考 [Cloudflare 命名隧道](<CLOUDFLARE_TUNNEL.md>)或[自有 HTTPS 反向代理](<SELF_HOSTED_ORIGIN.md>);仅完成地址配置不代表推送已验证送达。
21
+
22
+ ## 明确启用
23
+
24
+ 1. 在目标 HTTPS 地址打开并配对专用 DSH Mobile 页面。通过 Safari **分享 → 添加到主屏幕**,再从图标启动,而不是普通标签页。若显示配对码表单,请按[新码恢复步骤](<#主屏幕-app-显示配对表单时>)操作,不要复用 Safari 已消耗的配对码,也不要为排障清除已有配对或网站数据。
25
+ 2. **在 DSH 页面内**打开**设置 → 通用设置**,找到**网页推送通知**;它与 Android 的**任务通知**入口分开,不是 iPhone/iPad 系统的“设置”App。
26
+ 3. 点击**启用**并处理浏览器权限提示。页面加载、重连和主机重启不会自动申请权限或创建订阅;主机成功保存同意状态后才算启用完成。
27
+ 4. 选择需要的类别。**发送测试**每个安装每分钟限一次,TTL 为 60 秒;成功仅代表**推送服务商接受请求**,不代表手机已送达、显示、阅读或回答。
28
+
29
+ 浏览器安装 ID 只用于区分容器,不是凭据。其他浏览器/配置或 Origin 各自管理同意状态;主机从已认证的配对设备判断归属,而不是相信页面提交的 ID。
30
+
31
+ ### 主屏幕 App 显示配对表单时
32
+
33
+ Safari 与已安装 App 可能使用不同登录状态。本恢复步骤仅针对**配对码**表单,不适用于续期已有配对的普通重新连接页;也不以启用推送为前提。
34
+
35
+ 1. 在电脑端保持与主屏幕安装**相同的局域网/远程通道和 HTTPS Origin**。局域网先选**生成配对二维码**,再**复制配对链接**;远程先选**生成远程配对二维码**,再**复制远程配对链接**。复制操作会复用当前码;要替另一安装配对,须先生成新码,不能只重新复制已用过的链接。
36
+ 2. 从新链接的片段(`#` 后)取出 **`token=` 的 43 位值**,只把这段码填入已安装 App 的**配对码**栏,不要粘贴完整 URL 或 Android 的 `dsh1.`/`dsh2.` 密钥。若链接没有 `token=`,请检查是否选用了兼容浏览器的 HTTPS 入口,不要从 Android 密钥拆码,也不要绕过证书警告。
37
+ 3. 在新码到期前,在**主屏幕 App** 中完成配对,不要先在 Safari 消耗它。配对码只能使用一次,用过或到期后须生成新链接。完整链接和配对码均属秘密,不要贴到 issue 或日志;保留已有安装、配对设备记录和网站数据。
38
+
39
+ ### 日常通知须知
40
+
41
+ 推送是尽力而为,不是警报服务。主机睡眠/关机、Origin 停用、手机网络、专注模式和系统调度均可能延迟或阻止投递。
42
+
43
+ 关闭页面**不会**停用已保存的推送同意。用**停用**阻止后续合格发送;明确退出与撤销设备各有不同效果,见[下表](<#同意状态退出与撤销>)。点击通知可能需要重新登录,绝不会代为回答或批准;**发送测试**的通知打开应用根入口,而不是某个会话。
44
+
45
+ ## 会提醒什么
46
+
47
+ 明确开启总开关后,以下六类默认开启。范围是此设备已授权的用户可见会话,包括未在前台打开的会话和普通 fork,不限于手机当前查看的会话。
48
+
49
+ | 类别 | 含义 |
50
+ | --- | --- |
51
+ | 问题 | 公开输入请求仍未解决/仍可回答。超时后继续执行的问题仍可能可答;已排队的匹配回答会压制过期提醒。 |
52
+ | 计划 | 实际发出、尚未解决的计划审核请求。 |
53
+ | 审批 | 确实通过公开请求生命周期发出的权限请求,不仅是审计记录。 |
54
+ | 回复 | 普通非目标任务的响应已提交,合并等待后仍然有效。 |
55
+ | 目标 | 已提交的目标完成或真正受阻,不是每轮继续执行都报成功。 |
56
+ | 失败 | 已确认无法自动恢复、需要介入的最终失败,不是每个错误或重试。 |
57
+
58
+ 常规流式输出/进度、运行时子任务完成和用户主动停止不提醒。子任务阻塞只在 DSH 已通过所属工作流发出真实人工请求时观察,不伪造父会话问题、不读取子任务私有状态。快速自动决定可能在提醒延迟前结束,因此不通知。通知说明发生过某个事件,不保证目前已有某人认领等待。
59
+
60
+ 锁屏内容使用通用的英文、简体中文或意大利文,不包含问题正文、工具参数、目标内容、会话摘录或原始错误。通知 tag 不保证替换或撤回。
61
+
62
+ ## 同意状态、退出与撤销
63
+
64
+ | 操作/事件 | 效果 |
65
+ | --- | --- |
66
+ | 关闭页面或短登录会话过期 | 持久配对授权与 Origin 仍有效时保留推送同意;打开 DSH 仍需认证。 |
67
+ | 点击停用 | 先持久保存主机停发,再尽力取消本功能拥有的浏览器订阅;浏览器取消失败不会恢复主机同意。 |
68
+ | 明确退出 Mobile | 清除短会话前,先关闭此配对设备在当前 Origin 的推送,保留配对。停用保存失败不能报告退出已完成。 |
69
+ | 撤销/重置设备,或持久凭据过期 | 清理相关注册和队列,包含没有打开页面的休眠设备。 |
70
+ | 停止 Gateway/服务商或更改 Origin | 停止该 Origin 发送;其他 Origin 保留各自同意,新地址须重新明确启用。 |
71
+ | 重启 DSH | 保留密钥、同意和仍新鲜的受限投递状态,先重新检查授权与来源资格,不重播旧会话。 |
72
+
73
+ 停用或撤销前已被服务商接受/正在传输的通知仍可能送达,无法可靠撤回。重新启用不会向新注册安装播报旧历史。认证或代次冲突后只能刷新状态,再作新的明确操作,不自动重放旧的启用/类别/停用请求。
74
+
75
+ ## 点击行为与隐私
76
+
77
+ 通知打开同 Origin 根入口,并携带不透明投递引用。引用不含会话正文或授权令牌;Gateway 在认证配对设备后,检查范围、设备、Origin 和有效期再解析。短登录过期使用原有安全根路径返回流程;引用不能绕过登录。
78
+
79
+ 公开工作区和会话列表就绪后,Mobile 再检查会话存在,然后调用 DSH 正常 UI 打开动作。请求已解决时可以进入会话并显示中性提示;点击不会回答、批准或重新打开旧问题。引用过期、属于其他设备、缺失或目标已删除时使用中性的不可用/会话列表回退。消费引用只移除对应查询参数,不强制刷新。
80
+
81
+ 冷启动还是复用页面由浏览器决定;不要假定所有通知导航都会保留未发送草稿或进行中的发送。DSH 全新启动时可能先显示最近活跃会话,此时可从会话列表手动选择目标。插件不注册/注销 Service Worker,也不缓存已认证页面或 API 内容。
82
+
83
+ ## 数量、时效与失败处理
84
+
85
+ - 每个配对设备最多 **4 个注册**;每个授权范围最多 **256 个注册和 256 个待投递项**;最多 **4 个并发发送**。满额时拒绝新通知工作,不删除其他安装,也不阻塞 DSH。
86
+ - 人工关注提醒从原始请求起 **5 分钟**过期;结果提醒从来源事件起 **30 分钟**过期。重试不刷新时效。
87
+ - 最多 **3 次尝试**,每次绝对预算 **10 秒**;重试先等 **1 秒**、再等 **5 秒**,Retry-After 也不能超出原有时效。
88
+ - HTTP 404/410 删除失效注册;401/403 暂停相关投递并要求检查配置/密钥,不清除配对;其他永久错误丢弃该项;网络/429/5xx 仍只作有界重试。
89
+ - 接受记录和点击引用均有上限。服务商接受后、记录保存前崩溃可能导致重复尝试,不保证恰好一次。
90
+
91
+ 发送器只接受验证过的 Apple HTTPS 推送地址,拒绝重定向及不安全 DNS 目标,使用 Web Push/VAPID 加密。订阅地址、密钥和私有通知状态属于凭据,不能粘贴到 issue 或日志。通知保存/网络失败不能改变 DSH 的回答、审批或轮次结果。
92
+
93
+ ## 排障与明确修复
94
+
95
+ | 状态/问题 | 处理 |
96
+ | --- | --- |
97
+ | 没有入口/不可用 | 检查页面级能力、受信任 HTTPS、已认证的专用浏览器页面及 DSH 公共服务;没有 Worker 或旧 iOS 降级。 |
98
+ | 提示安装 | 从主屏幕图标启动,不在普通标签页开启。 |
99
+ | 权限拒绝 | 在系统/浏览器设置中修改该网站的通知权限,再返回 App 作新的明确启用;不会强制再次弹窗。 |
100
+ | 保存失败/设置已过期 | 刷新或重开读取当前状态,再明确重试,不反复提交旧请求。 |
101
+ | 现有订阅属于其他应用密钥 | 不自动取消它;主机密钥重置后仅重试启用无法解决,先确认归属,再安排明确的浏览器端修复。 |
102
+ | 已暂停/需要修复 | 检查主机密钥、配置和私有文件访问;不要删除配对状态或静默更换 VAPID 密钥。 |
103
+ | 暂时无法退出登录 | 已保存的通知同意尚不能安全关闭。保留页面,待电脑端推送服务恢复后明确重试退出;不要把关闭页面当作停用通知。 |
104
+ | 测试已接受但未显示 | 检查手机权限/专注模式/网络、主机与网关是否运行,以及原有时效;服务商接受不是送达回执。 |
105
+
106
+ 已有注册而 VAPID 材料丢失/损坏时,功能安全关闭。主机管理员可以通过现有受信任本机桌面管理 API,向 `POST /api/mobile-access/push/reset` 发送 JSON `{ "confirm": "reset-web-push" }`,明确重置**通知状态而非配对**。这是破坏性的通知重置,不是手机接口或自动修复按钮;之后各浏览器须重新明确注册,配对保留。该重置**作用于主机整个注册表**——会清空所有已连接设备与 Origin 的注册,而不只是之后遇到冲突的那台浏览器——因此旧订阅可能让普通重新启用持续失败;此处不承诺任何经过验证的破坏性修复步骤。保留正常桌面 Host/Origin/来源保护,不能公开暴露此管理路径,也不要手动删除配对设备文件。
107
+
108
+ ## 独立通道与验收
109
+
110
+ Android 原生权限/SSE 路径、APK 和签名保持不变。独立维护的 **dsh-ping** 不被修改或自动停用;同时开启可能收到不同通道的重复提醒。网页推送不增加跨通道去重,也不因页面在前台而压制通知。
111
+
112
+ 日常使用建议先发送一条测试通知,再检查自己关注的类别。保留现有主屏幕安装和配对数据;更新电脑端插件后重新打开页面即可加载新版界面。打包运行时检查与维护命令见[贡献指南](<../CONTRIBUTING.md#select-behavior-checks>)。
113
+
114
+ ## 验证状态
115
+
116
+ 本版采信贡献者在 **iPhone 17 Pro Max / iOS 27.0.1** 上的开发实测,覆盖六类提醒、后台/锁屏/关闭页面、通知点击、停用与撤销,以及离线和主机重启。维护者没有独立 Apple 真机复验;iPad 与其他设备/系统组合没有对应真机记录。
117
+
118
+ 自动化检查覆盖设置、鉴权、加密载荷、点击归属、重启与清理,不代表 Apple 实际送达。缺失目标的自动化检查使用未创建的会话;真正“先持久化再删除”的会话受当前 DSH 公共接口限制,尚无同类检查。推送为尽力投递,不能替代重要任务的人工确认。