2 Commits

Author SHA1 Message Date
song cc678e0ad0 docs: 重写 README - 突出远程回复 / Shizuku / 应用内更新等 v1.12.x 新功能
- 新增「三种回复路径」章节:原生 RemoteInput / 无障碍兼容 / Shizuku(微信)
- 新增「应用内更新」章节:自动推送更新通知、ABI 自动匹配、双源下载
- 新增「来电与未接来电」独立章节:来电轮询 + CallLog 反查联系人姓名
- 新增「过滤与噪音控制」完整 17 步流水线
- 新增「构建与体积」(R8 + ABI splits)
- 新增「隐私与安全」独立章节
- 强调多通道并行、自动锁回、推送失败先查代理
- 配套链接 docs/notification-reply.md 与 docs/A2iReply-shortcut.md

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 19:41:22 +08:00
song 2988069bcd docs: 同步 README/docs(移除闭源声明 + 回复功能说明)
将公开仓库文档同步到最新:
- README 移除闭源声明引用块
- README 第四章更新为 Bark/ntfy 远程回复 + 无障碍兼容回复
- 新增 docs/notification-reply.md

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 13:43:22 +08:00
3 changed files with 176 additions and 77 deletions
+128 -28
View File
@@ -1,10 +1,8 @@
# GotMsg ·有消息
# GotMsg · 有消息
> **闭源声明**:GotMsg 为闭源软件,源码不公开。本仓库仅作为**发布页**,提供 README 文档与 Release APK 下载。License: All Rights Reserved
把安卓手机上的系统通知(短信、验证码、来电、微信、QQ、Telegram、企业微信、App 推送等)实时转发到 **iPhone、iPad、其它安卓机、鸿蒙机、桌面邮箱**,并在接收端直接**远程回复**原安卓手机
把安卓手机上的通知(短信、验证码、电话、微信、QQ、Telegram)实时转发到 iOS / Android / 鸿蒙等接收端
适用于把安卓备机的消息同步到 iPhone 或其他安卓 / 鸿蒙手机,不漏验证码、不漏重要聊天。
适用于把安卓备机的消息同步到主力机,不漏验证码、不漏重要聊天、不断网仍能收到关键通知
![GotMsg 设置页](screenshots/overview.png)
@@ -13,7 +11,7 @@
## 一、五分钟上手
### 1. 安装
从 [Releases](../../releases) 下载最新 APK,安装到安卓手机(需 Android 14 / API 34+)。
从 [Releases](../../releases) 下载最新 APK,安装到**需要被转发的安卓手机**(需 Android 14 / API 34+)。Release 同时提供 universal 全架构包和 arm64-v8a / armeabi-v7a / x86 / x86_64 单架构包,App 内更新页会默认选中与你设备最匹配的版本。
### 2. 选一个推送通道
推荐三选一:
@@ -23,14 +21,15 @@
| iPhone / iPad | **Bark** | ⭐ 最简单 |
| 安卓手机 | **ntfy** | ⭐ 推荐开源 |
| 鸿蒙手机 | **Meow** | 鸿蒙专属 |
| 任何能收邮件的设备 | **电邮** | 桌面/平板可用 |
打开 GotMsg -> 「设置」-> 选对应通道 -> 点右上角 **i** 按钮 -> 按弹窗步骤配 -> 点该行「发送」测试。
打开 GotMsg -> 「设置」-> 选对应通道 -> 点右上角 **i** 按钮 -> 按弹窗步骤配 -> 点该行「发送」测试。可以**同时启用多个通道**,所有勾选的会并行收到。
### 3. 授权通知监听
首页会提示「需要授权通知监听」。点击「前往系统授权」,在系统的通知访问设置中开启 GotMsg。
### 4. 开启转发
首页打开「通知转发」开关。安卓收到通知后按配置自动推送到各通道。
首页打开「通知转发」开关。安卓收到通知后按配置自动推送到各通道。**发现新版时也会自动把更新通知推给所有已启用的通道**,不用进 App 也能升级。
---
@@ -50,8 +49,9 @@
- **服务器地址**`https://api.day.app`(自建则填自建地址)
- **Device Key**Bark 地址中 `/` 后面的那段
4. 保存后点「发送」测试;iPhone 收到「GotMsg 测试」即成功。
5. 多台 iOS 设备:可继续添加多条 Bark 配置,每条独立勾选;列表顺序即推送顺序,可开启「首个成功即止」或全部广播。
**为什么推荐 Bark**iOS 上点击 Bark 通知可一键跳转到微信、QQ、Telegram 对应 AppiOS 14+ 通知体验最自然;Bark 服务器在中国大陆可直接访问。
**为什么推荐 Bark**iOS 上点击 Bark 通知体验最自然;通知附带 GotMsg 回复链接,可从 iPhone 直接回复原安卓;Bark 服务器在中国大陆可直接访问。
### 2.2 ntfyAndroid / iOS / 网页)
@@ -69,6 +69,8 @@
4. 保存后点「发送」测试;接收端收到「GotMsg 测试」即成功。
> **安全提示**:公共 topic 谁知道名字就能订阅或发送。Topic 名**不要用**手机号、姓名、邮箱等可猜信息。
>
> **远程回复**:GotMsg 在转发聊天类通知时,会**自动给 ntfy 通知挂上「View」动作按钮和正文中的回复链接**。iOS 上点通知本体只能进 ntfy App,要回复请点动作按钮或正文里的回复链接。
### 2.3 Meow(鸿蒙 / HarmonyOS
@@ -87,7 +89,7 @@ Meow 是鸿蒙手机的推送接收方案。GotMsg 按你填写的 Meow 接口
### 2.4 电邮转发
通过 SMTP 把通知发到邮箱(**适合无手机接收的场景**,如仅在桌面/平板查看)。
通过 SMTP 把通知发到邮箱(**适合无手机接收的场景**,如仅在桌面/平板查看)。GotMsg **直连 SMTP**,不依赖外部邮件服务。
**配置步骤**
1. 准备一个 SMTP 邮箱(QQ/163/Gmail/Outlook 都可),**开启 SMTP 服务并生成授权码**(不是登录密码)。
@@ -95,9 +97,8 @@ Meow 是鸿蒙手机的推送接收方案。GotMsg 按你填写的 Meow 接口
- 163:设置 -> POP3/SMTP/IMAP -> 开启 SMTP -> 设置授权码
- Gmail:账户 -> 安全性 -> 两步验证 -> 应用专用密码
2. GotMsg「设置 -> 电邮转发 -> 添加」:
- **名称**:随意
- **服务器(SMTP 主机)**`smtp.qq.com` / `smtp.163.com` / `smtp.gmail.com`
- **端口**`465`(推荐,隐式 SSL`587`STARTTLS
- **端口**`465`(推荐,隐式 SSL
- **账号**:完整邮箱地址
- **授权码 / 密码**:上一步生成的授权码
- **发件人**:通常与账号相同
@@ -114,7 +115,7 @@ Meow 是鸿蒙手机的推送接收方案。GotMsg 按你填写的 Meow 接口
1. 在 GotMsg「设置 -> 短信兜底」点「授予短信权限」(安卓系统权限)。
2. 点「添加」输入**目标手机号**(如 iPhone 号,接收端是另一台手机,**不是** GotMsg 本身)。
3. 选运营商:
- 选了「自动识别」:GotMsg 会发免费查询短信给运营商服务号,解析回执获取余量。
- 选了「自动识别」:GotMsg 会发免费查询短信给运营商服务号,解析回执获取余量。回执短信本身会被识别并拦截,不转发。
- 选了「手动额度」:在「手动短信额度」填入当前套餐短信条数,每次发短信后自动减 1。
4. 当余量 ≤ 5 时自动暂停,下次打开 App 提醒续费。
5. 频率限制:每 5 分钟最多发 1 条(避免刷屏),同一条通知 5 分钟内不重复。
@@ -123,11 +124,42 @@ Meow 是鸿蒙手机的推送接收方案。GotMsg 按你填写的 Meow 接口
---
## 三、自建推送服务(可选
## 三、通知远程回复(Bark / ntfy
GotMsg v1.11.0 起,Bark 和 ntfy 转发通知会附带回复入口,接收端在 iPhone 或 Android 上打开回复页输入内容后,回复会经 **GotMsg 中继(`https://r.gotmsg.pp.ua`)送回原 Android 手机**。GotMsg 优先使用原通知的 Android `RemoteInput` 快捷回复能力;微信等没有 `RemoteInput` 的 App 走无障碍兼容回复;微信 8.0.49+ 进一步屏蔽无障碍时,可启用 **Shizuku 路径**直接调用 `input` 命令绕过。
### 3.1 三种回复路径
| 路径 | 适用 | 是否需要解锁原手机 | 额外授权 |
|---|---|---|---|
| **原生 RemoteInput** | 短信、WhatsApp、企业 IM、Telegram 等暴露系统回复动作的 App | 否(后台执行) | 无 |
| **无障碍兼容回复** | QQ、支付宝、淘宝、钉钉 | 是 | 「GotMsg 兼容回复」无障碍服务 |
| **Shizuku 兼容回复(仅微信)** | 微信(绕过无障碍屏蔽) | 是 | Shizuku 已启动并授予 GotMsg 权限 |
### 3.2 启用方式
1. **Bark / ntfy 接收端**:无需任何额外配置。GotMsg 自动在通知正文或 ntfy 动作按钮里附上回复链接。
2. **原 Android 手机**
- 默认即可使用 `RemoteInput`(无需任何操作)。
- 想在没有 `RemoteInput` 的 App 上回复,进入「设置 -> 通知回复」打开「无障碍兼容回复」,再到系统无障碍设置里启用「GotMsg 兼容回复」服务。
- 想在最新版微信上回复,启用 **Shizuku**(在 GitHub Releases 下载并启动),GotMsg 首页会显示 Shizuku 状态卡片;点击「授权 Shizuku」即可。微信路径会自动以 Shizuku 身份模拟 `input tap` 聚焦输入框、写剪贴板、`KEYCODE_PASTE` 注入任意 Unicode,并通过截图像素扫描识别微信绿色发送按钮。
### 3.3 使用流程
- Bark:通知点击目标会优先变成回复页,正文也会附带回复链接;普通消息不会再跳微信/QQ 等原 App。
- ntfy:通知附带 View 动作按钮和正文中的回复链接;iOS 上点通知本体只进入 ntfy App,请点动作按钮或正文里的回复链接。
完整使用方法与限制见 [docs/notification-reply.md](docs/notification-reply.md)。接收端不需要安装 iOS 快捷指令,也不需要订阅额外的 `_reply` topic(旧版方案已移除,见 [docs/A2iReply-shortcut.md](docs/A2iReply-shortcut.md))。
> 链接 10 分钟内有效,只能成功提交一次。原生快捷回复可在后台执行;无障碍 / Shizuku 兼容回复会亮屏并打开原 App;自动解锁仅对**无密码滑动锁**有效,密码 / PIN / 指纹锁需手动解锁一次;完成后会**自动重新锁屏**。付款、订单、营销等非聊天通知不能回复。
---
## 四、自建推送服务(可选)
所有通道都支持自建,更好、更私密、可控。
### 3.1 自建 Bark 服务器
### 4.1 自建 Bark 服务器
GotMsg 默认用 Bark 官方服务器(`https://api.day.app`),免费够用。自建适合追求完全控制。
@@ -143,9 +175,9 @@ docker run -d --name bark --restart=unless-stopped \
**GotMsg 配置**:服务器地址填 `https://你的域名.com`(不要 `/push` 后缀),Device Key 填你在自建 Bark 上创建的 Key。
### 3.2 自建 ntfy 服务器
### 4.2 自建 ntfy 服务器
[ntfy](https://ntfy.sh) 是为自建设计的,**比 Bark 还简单**--官方直接提供 Docker 一行启动:
[ntfy](https://ntfy.sh) 是为自建设计的,**比 Bark 还简单**——官方直接提供 Docker 一行启动:
```bash
docker run -d --name ntfy --restart=unless-stopped \
@@ -158,34 +190,74 @@ docker run -d --name ntfy --restart=unless-stopped \
**GotMsg 配置**:服务器地址填 `https://ntfy.你的域名.com`Topic 照旧。
### 3.3 自建 Meow 服务器
### 4.3 自建 Meow 服务器
Meow 是鸿蒙客户端,服务端一般用 Meow 自带的。GotMsg 端无需配置服务端,只需填 Meow 给你的接口地址 + Key。
---
## 四、ntfy 通知回复(iPhone 自由输入回复)
## 五、应用内更新
v1.10.2 起,ntfy 转发的通知支持在 iPhone 上**长按 ->「回复」-> 用 iOS 快捷指令自由输入文字 -> 自动回复回原 App**(短信/微信等带通知快捷回复的 App)
GotMsg 内置更新检测:定期拉取 Gitea + GitHub Releases**发现新版时自动向所有已启用通道推送一条更新通知**(带当前版本号、目标版本号、变更摘要、APK 大小)。首页显示醒目横幅,可选「立即下载」或「忽略此版本」
配置步骤见 [docs/A2iReply-shortcut.md](docs/A2iReply-shortcut.md)
下载页会**默认选中匹配你设备 ABI 的 APK**universal / arm64-v8a / armeabi-v7a / x86_64 / x86),也可手动切换架构;下载完成后通过 `FileProvider` 调起系统安装器
> 依赖通知带 RemoteInput reply action(短信/微信/QQ/Telegram 多支持);验证码等无需回复的通知不挂回复按钮。公共 ntfy.sh 上 reply topic 明文,建议自建 ntfy + token
Gitea 源为主(国内可达),GitHub 为兜底;主源下载失败会自动尝试另一个源的同版本链接
> 取消自动检查:在「设置 -> 应用内更新」关闭「更新检查」即可,手动检查仍可用。
---
## 五、使用建议
## 六、来电与未接来电
MIUI / HyperOS 不向第三方监听器分发系统电话通知。GotMsg 通过 **轮询 `TelephonyManager.getCallState()`** 绕过此限制:
- **来电**:构造「有电话进来」推送(Android 14+ 禁止第三方读取实时号码);如无障碍服务读到号码则展示真实号码。
- **未接来电**:通话结束后查系统 `CallLog` 获取号码,并通过 `ContactsContract.PhoneLookup` 反查**联系人姓名**,推送形如「张三\n138xxxx」。
需要在系统设置中授予「电话」权限(设置 -> 应用 -> GotMsg -> 权限 -> 电话)。
---
## 七、过滤与噪音控制
通知处理流水线(在 `NotificationProcessor` 中按顺序执行):
1. 全局开关
2. 持续性通知(ongoing)静默
3. VPN / 代理客户端(Surfboard、Clash Meta、Clash for Android、v2rayNG、小米设备互联)常驻通知静默
4. 米家「设备状态」泛化通知静默(门锁 / 告警等具体事件仍正常转发)
5. App 黑/白名单
6. 空内容 / 脱敏内容
7. 噪音包名(三星剪贴板 / 键盘、GMS、SystemUI、Google 输入法)
8. 系统状态消息("正在运行"等)
9. **泛化无意义通知**(标题「新消息」+ 正文「你有一条新消息」等占位文案)静默
10. 近空内容(纯符号 / 纯空格 / 仅 App 名)
11. 广告过滤(内置营销关键词 + 用户自定义关键词)
12. 已发短信(仅收不发)
13. 运营商余额回执拦截(解析余量后不转发)
14. 去重检查(5 秒窗口)
15. 验证码提取(关键词 + 数字 / 数字 + 关键词 / 纯数字 4–8 位)
16. 特殊 App 解析(微信 / QQ / Telegram 优化 + 重要消息关键词标记)
17. 构造 BarkMessage 并推送
验证码开启自动复制后会被复制到剪贴板;推送级别在重要消息上自动提升到 `timeSensitive` 以点亮 iOS 焦点通知。
---
## 八、使用建议
- **只想收验证码**:进入「过滤」页,开启「验证码自动提取」和「广告过滤」;再到「应用」页切到白名单模式,只勾选短信类 App。
- **想同步聊天**:保持黑名单模式(默认),在「过滤」页开启「微信 / QQ / Telegram 优化」。
- **通知没推过来**:先看「日志」页,每条通知(无论转发、过滤还是失败)都会记录原因。
- **通知没推过来**:先看「日志」页,每条通知(无论转发、过滤还是失败)都会记录原因。失败会自动加入 pending 队列,由 WorkManager 每 15 分钟重发。
- **想让通知带图标**:见下方「应用图标」一节。
- **电话通知不工作**:MIUI 不向第三方监听器分发系统电话通知,GotMsg 通过轮询 `getCallState()` 绕过此限制。需授予「电话」权限(设置 -> 应用 -> GotMsg -> 权限 -> 电话)
- **电话通知不工作**:MIUI 不向第三方监听器分发系统电话通知,GotMsg 通过轮询 `getCallState()` 绕过此限制。需授予「电话」权限。
- **断网收不到通知**:开启「设置 -> 短信兜底」并填好 iPhone 号码、授予短信权限。断网时验证码和来电走短信(消耗套餐额度,5 分钟限 1 条)。
- **想全平台通知**:可同时启用多个通道(勾选每个通道的多个条目),所有启用的会同时收到。
- **想全平台通知**:可同时启用多个通道(每个通道的多个条目独立勾选),所有启用的会同时收到。
- **推送报 connection closed**:通常不是被墙,而是手机上的代理 / VPN 客户端干扰 Bark 服务器连接;先关代理或换自建 Bark 验证。
---
## 、应用图标
## 、应用图标
Bark 和 ntfy 的通知 `icon` 字段需要公网可访问的图片 URL。GotMsg 支持把已安装 App 的图标批量导出,方便上传到你自己的图床。
@@ -199,7 +271,26 @@ Bark 和 ntfy 的通知 `icon` 字段需要公网可访问的图片 URL。GotMsg
---
## 七、界面截图
## 十、构建与体积
Release 构建开启 **R8 + 资源压缩**universal APK 约 5 MB;同时输出 ABI splits,每个架构单独的 APK 体积更小。
构建:
```bash
export JAVA_HOME="D:/Dev/JDK-17" ANDROID_HOME="D:/Dev/Android/SDK"
./gradlew assembleRelease
# 产物:app/build/outputs/apk/release/app-universal-release.apk
# app/build/outputs/apk/release/app-arm64-v8a-release.apk
# app/build/outputs/apk/release/app-armeabi-v7a-release.apk
# app/build/outputs/apk/release/app-x86-release.apk
# app/build/outputs/apk/release/app-x86_64-release.apk
```
`release` 复用 `debug` 签名配置(`signingConfigs.getByName("debug")`),适合个人发布到 GitHub / Gitea Release;正式商店上架前需替换为独立的 release keystore。
---
## 十一、界面截图
| 首页 | 应用管理 | 过滤设置 |
|---|---|---|
@@ -211,6 +302,15 @@ Bark 和 ntfy 的通知 `icon` 字段需要公网可访问的图片 URL。GotMsg
---
## 十二、隐私与安全
- GotMsg **不收集任何遥测**到第三方;本地仅记录最少必要的设备 ID / 密钥(用于回复中继鉴权,256 位随机,备份规则明确排除)。
- 回复中继 `https://r.gotmsg.pp.ua` 只持久化**设备密钥 + 回复令牌的 SHA-256 哈希**,正文 24 小时后清除;回复链接放在 URL fragment 中,不会进入服务器访问日志。
- 拿到回复链接的人可在 10 分钟有效期内提交一次回复,因此不要转发或公开该链接。
- 无障碍 / Shizuku 兼容回复仅在收到有效的一次性回复事件时运行,严格校验目标包名;Shizuku 路径只点击经像素扫描确认的微信绿色发送按钮,避免误操作。
---
## License
本项目仅供个人使用。自 v1.10.2 起闭源。
+4 -48
View File
@@ -1,51 +1,7 @@
# iOS 快捷指令 A2iReply — 自由输入回复
# A2iReply 快捷指令迁移说明
a2i 转发的通知在 iPhone 上**长按**出「回复」按钮后,会触发本快捷指令:弹出输入框让你打字,再把回复 POST 回 a2i 的反向 reply topica2i 收到后用 RemoteInput 回复原 App(短信/微信等)
v1.11.0 已移除旧的 iOS 快捷指令和 ntfy `_reply` topic 方案。请删除原有的 `A2iReply` 快捷指令;GotMsg 不再订阅或使用 `_reply` topic
## 一次性配置
新版本会在可回复的 ntfy 通知中直接附加一次性网页链接。iPhone 和 Android 都可点开网页输入回复,不需要额外配置。
### 1. 记下 ntfy 配置
在 a2i「设置 → ntfy」记下一个已启用的 ntfy 配置:
- `server`:如 `https://ntfy.sh` 或自建 `https://ntfy.songer.eu.org`
- `topic`:如 `mytopic`
- `token`:若有鉴权则记下(自建 ntfy 常需要)
**反向 reply topic = `topic` + `_reply`**,例如 `mytopic_reply`。a2i 自动订阅这个派生 topic,快捷指令也往这里 POST。
### 2. iPhone 装 ntfy app
App Store 装 ntfy,订阅同 `mytopic`(用于收 a2i 转发的通知)。
### 3. 录制快捷指令 A2iReply
打开「快捷指令」app → 新建快捷指令,**命名为 `A2iReply`**(必须恰好此名,大小写一致)。
添加以下动作:
1. **要求输入**Ask for Input
- 类型:文本
- 提示:`输入回复内容`
- 把输出命名为「回复内容」
2. **获取 URL 内容**Get Contents of URL
- URL`https://<server>/<topic>_reply`,例如 `https://ntfy.sh/mytopic_reply`
- 展开「显示更多」
- 方法:`POST`
- 请求头(若 ntfy 有 token 才加):
- `Authorization` = `Bearer <你的token>`
- 请求体:选 `JSON`,添加字段:
- `message` = 「回复内容」(第 1 步的输出)
- `title` = 「快捷指令输入」(Shortcut Input,即通知按钮 URL 传入的 `msgId=xxx`
### 4. 允许运行
首次从通知触发可能需在「设置 → 快捷指令」允许「允许运行」/信任不受信任的快捷指令。
## 验证
1. 让 a2i 收一条短信(另一台手机发来)。
2. iPhone 收到 ntfy 通知 → 长按 → 点「回复」→ 快捷指令弹出 → 输入文字 → 自动发送。
3. 安卓端:a2i 收到回复 → 短信 App 自动回复该消息。
4. a2i「日志」页可见 `回复` 类型的 sent/failed 记录。
## 注意
- **公共 ntfy.sh 隐私**reply topic 明文,任何人可读。生产建议自建 ntfy + token 鉴权。
- `title` 字段必须设为「快捷指令输入」(含 `msgId=` 前缀),a2i 靠它匹配原通知;删掉或改写会导致回复无法路由。
- 若原通知已被划掉/超 10 分钟,a2i 日志会记 `回复失败/原通知已失效`,属正常。
- 快捷指令名必须是 `A2iReply`,否则 a2i 通知按钮的 `shortcuts://run-shortcut?name=A2iReply` 触发不到。
完整说明见 [notification-reply.md](notification-reply.md)。
+43
View File
@@ -0,0 +1,43 @@
# 通知远程回复
GotMsg v1.11.0 起支持从 iPhone 或另一台 Android 设备打开 Bark / ntfy 通知里的回复链接。回复会回到运行 GotMsg 的原 Android 手机。v1.12.0 起,除了原生通知快捷回复,还可选择使用无障碍兼容回复处理微信、QQ 等没有提供系统回复动作的聊天通知。
## 使用方法
1. 在原 Android 手机的 GotMsg 中启用至少一个 Bark 或 ntfy 配置。
2. 保持 GotMsg 的通知读取权限,并让原手机联网。
3. 如需回复没有系统快捷回复入口的微信、QQ 等通知,在 GotMsg「设置 -> 通知回复」中开启「无障碍兼容回复」,再到系统无障碍设置中开启「GotMsg 兼容回复」。
4. 每条 Bark / ntfy 转发通知都会带回复入口。Bark 接收端直接点通知即可打开回复页,通知正文也会附带回复链接;普通消息不会再跳微信/QQ等原 App。ntfy 接收端可点通知、通知动作或正文中的回复链接;如果 iOS 点通知本体只进入 ntfy App,请点消息正文里的回复链接。
5. 网页提交后,原 Android 手机先尝试原通知的 `RemoteInput`;没有该动作时才使用已启用的无障碍兼容回复。GotMsg 的「日志」页会记录结果。
接收端无需安装 iOS 快捷指令,也无需创建或订阅 `_reply` topic。现有 ntfy server、topic 和 token 配置不需要改动。
## 生效条件
- 原生模式要求原 App 在该条通知上提供允许自由文本的 Android `RemoteInput` 动作,可以在后台完成。
- 无障碍兼容模式会使用通知的会话入口打开原 App,只对白名单中的微信、QQ、支付宝、淘宝、钉钉生效。页面必须是聊天页,并存在可识别的输入框和明确的「发送」按钮。
- 无障碍兼容模式要求原手机已解锁;执行时会亮屏、切换到对应 App。输入框已有草稿时会停止,不会覆盖草稿。
- 付款、订单、验证码、营销和系统通知通常没有聊天输入框,即使带回复链接也不能发送回复。
- 原通知不能被划掉或被新通知替换;进程未重启时 GotMsg 会短暂缓存通知入口,降低通知更新导致的失败概率。
- 回复链接从通知转发起 10 分钟内有效,并且只能成功提交一次。
- 原 Android 手机必须联网,GotMsg 进程和通知监听服务需要正常工作。
- 某些 App 或定制系统不会向无障碍服务暴露聊天控件;这种情况下网页会显示具体失败原因。
## 安全说明
- 每条通知使用独立的 256 位随机回复令牌。令牌放在 URL fragment 中,不会随首次页面请求进入服务器访问日志。
- GotMsg 安装时生成独立设备 ID 和密钥;原手机与中继 API 之间的注册、拉取和确认请求均需设备鉴权。
- 中继只持久化设备密钥和回复令牌的 SHA-256 哈希。提交后的回复正文会在中继中短暂保存,处理完成后最多保留 24 小时用于状态查询和故障排查。
- 拿到有效回复链接的人可在有效期内提交一次回复,因此不要转发或公开该链接。
- 无障碍兼容回复仅在收到有效的一次性回复事件时运行,严格校验目标包名,并且只点击文字明确匹配「发送」的控件。该权限能够读取当前窗口内容,只应在你信任的原 Android 手机上启用。
- 回复服务使用 `https://r.gotmsg.pp.ua`,不可在 App 设置中修改。部署或域名变更时需同步修改 `ReplyFeature.RELAY_BASE_URL` 并重新发布 APK。
## 常见失败
- `回复链接已过期`:通知转发已超过 10 分钟。
- `原通知已消失`:原 Android 手机上的通知已被清除或替换。
- `请在 GotMsg 设置中开启无障碍兼容回复服务`:应用内开关已打开,但系统无障碍权限尚未开启。
- `原手机需解锁后才能回复`:解锁原手机后,重新从一条新通知发起回复。
- `未找到聊天输入框` / `未找到明确的发送按钮`:通知没有进入可回复聊天页,或原 App 当前版本的界面需要重新适配。
- `聊天输入框已有未发送内容`:GotMsg 为避免覆盖原手机草稿而主动停止。
- `原手机未确认回复`:中继未在超时时间内收到原手机处理结果,检查原手机网络、后台限制和 GotMsg 通知读取权限。