Files
gotmsg/README.md
T
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

18 KiB
Raw Blame History

GotMsg · 有消息

把安卓手机上的系统通知(短信、验证码、来电、微信、QQ、Telegram、企业微信、App 推送等)实时转发到 iPhone、iPad、其它安卓机、鸿蒙机、桌面邮箱,并在接收端直接远程回复原安卓手机。

适用于把安卓备机的消息同步到主力机,不漏验证码、不漏重要聊天、不断网仍能收到关键通知。

GotMsg 设置页


一、五分钟上手

1. 安装

Releases 下载最新 APK,安装到需要被转发的安卓手机(需 Android 14 / API 34+)。Release 同时提供 universal 全架构包和 arm64-v8a / armeabi-v7a / x86 / x86_64 单架构包,App 内更新页会默认选中与你设备最匹配的版本。

2. 选一个推送通道

推荐三选一:

接收设备 推荐通道 难度
iPhone / iPad Bark 最简单
安卓手机 ntfy 推荐开源
鸿蒙手机 Meow 鸿蒙专属
任何能收邮件的设备 电邮 桌面/平板可用

打开 GotMsg -> 「设置」-> 选对应通道 -> 点右上角 i 按钮 -> 按弹窗步骤配 -> 点该行「发送」测试。可以同时启用多个通道,所有勾选的会并行收到。

3. 授权通知监听

首页会提示「需要授权通知监听」。点击「前往系统授权」,在系统的通知访问设置中开启 GotMsg。

4. 开启转发

首页打开「通知转发」开关。安卓收到通知后按配置自动推送到各通道。发现新版时也会自动把更新通知推给所有已启用的通道,不用进 App 也能升级。


二、推送通道配置详解

每条配置都可独立勾选/删除/排序/测试。点「添加」时建议每条都先「发送」测试一次。

2.1 BarkiOS / iPadOS

Bark 是 iOS 上最轻量的推送方案,复制地址即用,推荐所有 iOS 用户首选

配置步骤

  1. iPhone / iPad 上安装 Bark,首次打开允许通知权限。
  2. 复制 Bark 首页的推送地址,形如 https://api.day.app/你的Key
  3. GotMsg「设置 -> Bark 服务器 -> 添加」:
    • 名称:随意,例如「我的 iPhone」
    • 服务器地址https://api.day.app(自建则填自建地址)
    • Device KeyBark 地址中 / 后面的那段
  4. 保存后点「发送」测试;iPhone 收到「GotMsg 测试」即成功。
  5. 多台 iOS 设备:可继续添加多条 Bark 配置,每条独立勾选;列表顺序即推送顺序,可开启「首个成功即止」或全部广播。

为什么推荐 Bark:iOS 上点击 Bark 通知体验最自然;通知附带 GotMsg 回复链接,可从 iPhone 直接回复原安卓;Bark 服务器在中国大陆可直接访问。

2.2 ntfyAndroid / iOS / 网页)

ntfy 是开源的 HTTP pub-sub 通知服务,支持 Android、iOS 和网页端,无需注册项目。

配置步骤

  1. 接收端安装 ntfy
  2. 打开 ntfy -> 添加订阅。服务器填 https://ntfy.sh(或自建地址);Topic 用一串随机难猜的名字(如 gotmsg_a8f3d2)。
  3. GotMsg「设置 -> ntfy 转发 -> 添加」:
    • 服务器:与接收端完全一致
    • Topic:与接收端完全一致
    • Token:仅自建服务且启用了鉴权时填
  4. 保存后点「发送」测试;接收端收到「GotMsg 测试」即成功。

安全提示:公共 topic 谁知道名字就能订阅或发送。Topic 名不要用手机号、姓名、邮箱等可猜信息。

远程回复GotMsg 在转发聊天类通知时,会自动给 ntfy 通知挂上「View」动作按钮和正文中的回复链接。iOS 上点通知本体只能进 ntfy App,要回复请点动作按钮或正文里的回复链接。

2.3 Meow(鸿蒙 / HarmonyOS

Meow 是鸿蒙手机的推送接收方案。GotMsg 按你填写的 Meow 接口地址和 Device Key 发出 HTTP 请求即可。

配置步骤

  1. 鸿蒙手机上安装 Meow,确认 Meow 自身能正常接收推送。
  2. 在 Meow 里找到推送接口地址和对应的 Device Key / Token
  3. GotMsg「设置 -> Meow 转发 -> 添加」:
    • 名称:按鸿蒙设备填写(方便区分多台)
    • 服务器地址Meow 给出的完整 API 地址
    • Device KeyMeow 给你的设备 Key不是鸿蒙锁屏密码、华为账号密码)
  4. 保存后点「发送」测试;鸿蒙手机收到「GotMsg 测试」即成功。

失败排查:检查 Meow 接口地址是否完整、Key 是否复制完整、鸿蒙手机是否允许 Meow 通知。

2.4 电邮转发

通过 SMTP 把通知发到邮箱(适合无手机接收的场景,如仅在桌面/平板查看)。GotMsg 直连 SMTP,不依赖外部邮件服务。

配置步骤

  1. 准备一个 SMTP 邮箱(QQ/163/Gmail/Outlook 都可),开启 SMTP 服务并生成授权码(不是登录密码)。
    • QQ:设置 -> 账户 -> POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 -> 开启 SMTP -> 生成授权码
    • 163:设置 -> POP3/SMTP/IMAP -> 开启 SMTP -> 设置授权码
    • Gmail:账户 -> 安全性 -> 两步验证 -> 应用专用密码
  2. GotMsg「设置 -> 电邮转发 -> 添加」:
    • 服务器(SMTP 主机)smtp.qq.com / smtp.163.com / smtp.gmail.com
    • 端口465(推荐,隐式 SSL
    • 账号:完整邮箱地址
    • 授权码 / 密码:上一步生成的授权码
    • 发件人:通常与账号相同
    • 收件人:接收通知的目标邮箱
  3. 保存后点「发送」测试;收件人收到「GotMsg 测试」即成功。

国内邮箱推荐端口 465QQ/163 均支持)。Gmail 需要应用专用密码而不是账户密码。

2.5 断网短信兜底

当安卓手机没有网络时,把重要通知(验证码、来电)通过 SIM 卡短信 发到另一台手机(通常是你的 iPhone)。需要安卓卡里还有短信套餐余量。

配置步骤

  1. 在 GotMsg「设置 -> 短信兜底」点「授予短信权限」(安卓系统权限)。
  2. 点「添加」输入目标手机号(如 iPhone 号,接收端是另一台手机,不是 GotMsg 本身)。
  3. 选运营商:
    • 选了「自动识别」:GotMsg 会发免费查询短信给运营商服务号,解析回执获取余量。回执短信本身会被识别并拦截,不转发。
    • 选了「手动额度」:在「手动短信额度」填入当前套餐短信条数,每次发短信后自动减 1。
  4. 当余量 ≤ 5 时自动暂停,下次打开 App 提醒续费。
  5. 频率限制:每 5 分钟最多发 1 条(避免刷屏),同一条通知 5 分钟内不重复。

适用场景:安卓手机没 WiFi 时,验证码不会丢,漏不了重要登录。


三、通知远程回复(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。接收端不需要安装 iOS 快捷指令,也不需要订阅额外的 _reply topic(旧版方案已移除,见 docs/A2iReply-shortcut.md)。

链接 10 分钟内有效,只能成功提交一次。原生快捷回复可在后台执行;无障碍 / Shizuku 兼容回复会亮屏并打开原 App;自动解锁仅对无密码滑动锁有效,密码 / PIN / 指纹锁需手动解锁一次;完成后会自动重新锁屏。付款、订单、营销等非聊天通知不能回复。


四、自建推送服务(可选)

所有通道都支持自建,更好、更私密、可控。

4.1 自建 Bark 服务器

GotMsg 默认用 Bark 官方服务器(https://api.day.app),免费够用。自建适合追求完全控制。

Docker 一键部署(推荐):

docker run -d --name bark --restart=unless-stopped \
  -p 8080:8080 \
  -v /var/lib/bark:/data \
  finab/bark-server

然后用 Nginx Proxy Manager 加 HTTPS 域名。详细三种方案对比请看 Bark 官方文档

GotMsg 配置:服务器地址填 https://你的域名.com(不要 /push 后缀),Device Key 填你在自建 Bark 上创建的 Key。

4.2 自建 ntfy 服务器

ntfy 是为自建设计的,比 Bark 还简单——官方直接提供 Docker 一行启动:

docker run -d --name ntfy --restart=unless-stopped \
  -p 80:80 \
  -v /var/lib/ntfy:/var/lib/ntfy \
  binwiederhier/ntfy serve

推荐加 Nginx 反代上 HTTPS 域名。完整文档:docs.ntfy.sh

GotMsg 配置:服务器地址填 https://ntfy.你的域名.comTopic 照旧。

4.3 自建 Meow 服务器

Meow 是鸿蒙客户端,服务端一般用 Meow 自带的。GotMsg 端无需配置服务端,只需填 Meow 给你的接口地址 + Key。


五、应用内更新

GotMsg 内置更新检测:定期拉取 Gitea + GitHub Releases发现新版时自动向所有已启用通道推送一条更新通知(带当前版本号、目标版本号、变更摘要、APK 大小)。首页显示醒目横幅,可选「立即下载」或「忽略此版本」。

下载页会默认选中匹配你设备 ABI 的 APKuniversal / arm64-v8a / armeabi-v7a / x86_64 / x86),也可手动切换架构;下载完成后通过 FileProvider 调起系统安装器。

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() 绕过此限制。需授予「电话」权限。
  • 断网收不到通知:开启「设置 -> 短信兜底」并填好 iPhone 号码、授予短信权限。断网时验证码和来电走短信(消耗套餐额度,5 分钟限 1 条)。
  • 想全平台通知:可同时启用多个通道(每个通道的多个条目独立勾选),所有启用的会同时收到。
  • 推送报 connection closed:通常不是被墙,而是手机上的代理 / VPN 客户端干扰 Bark 服务器连接;先关代理或换自建 Bark 验证。

九、应用图标

Bark 和 ntfy 的通知 icon 字段需要公网可访问的图片 URL。GotMsg 支持把已安装 App 的图标批量导出,方便上传到你自己的图床。

规则:转发时 icon = 图标 URL 前缀 + 安卓包名 + .png。在「设置 -> 应用图标」里:

  1. 填写图标 URL 前缀,例如 https://你的图床域名/icons/
  2. 选择一个目录,点「导出图标」,把该目录下所有 App 的图标以 包名.png 形式导出。
  3. 把导出的图片上传到你的图床对应目录。

留空前缀则不显示图标。


十、构建与体积

Release 构建开启 R8 + 资源压缩universal APK 约 5 MB;同时输出 ABI splits,每个架构单独的 APK 体积更小。

构建:

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。


十一、界面截图

首页 应用管理 过滤设置
首页 应用管理 过滤设置
设置 转发日志
设置 转发日志

十二、隐私与安全

  • GotMsg 不收集任何遥测到第三方;本地仅记录最少必要的设备 ID / 密钥(用于回复中继鉴权,256 位随机,备份规则明确排除)。
  • 回复中继 https://r.gotmsg.pp.ua 只持久化设备密钥 + 回复令牌的 SHA-256 哈希,正文 24 小时后清除;回复链接放在 URL fragment 中,不会进入服务器访问日志。
  • 拿到回复链接的人可在 10 分钟有效期内提交一次回复,因此不要转发或公开该链接。
  • 无障碍 / Shizuku 兼容回复仅在收到有效的一次性回复事件时运行,严格校验目标包名;Shizuku 路径只点击经像素扫描确认的微信绿色发送按钮,避免误操作。

License

本项目仅供个人使用。自 v1.10.2 起闭源。

All Rights Reserved. 保留所有权利。