commit 12b13c289b73d57d23b57b6c976290a4ea08088b Author: Song <168455@qq.com> Date: Sun Jul 12 21:22:32 2026 +0800 chore: close source - public repo now README + releases only (v1.10.2+) diff --git a/README.md b/README.md new file mode 100644 index 0000000..e22bb5b --- /dev/null +++ b/README.md @@ -0,0 +1,218 @@ +# GotMsg ·有消息 + +> **闭源声明**:自 **v1.10.2** 起,GotMsg APP 闭源,源码不再公开。本仓库仅作为**发布页**,提供 README 文档与 Release APK 下载。v1.10.1 及之前的源码在历史 tag 中开源可查。License: All Rights Reserved。 + +把安卓手机上的通知(短信、验证码、电话、微信、QQ、Telegram)实时转发到 iOS / Android / 鸿蒙等接收端。 + +适用于把安卓备机的消息同步到 iPhone 或其他安卓 / 鸿蒙手机,不漏验证码、不漏重要聊天。 + +![GotMsg 设置页](screenshots/overview.png) + +--- + +## 一、五分钟上手 + +### 1. 安装 +从 [Releases](../../releases) 下载最新 APK,安装到安卓手机(需 Android 14 / API 34+)。 + +### 2. 选一个推送通道 +推荐三选一: + +| 接收设备 | 推荐通道 | 难度 | +|---|---|---| +| iPhone / iPad | **Bark** | ⭐ 最简单 | +| 安卓手机 | **ntfy** | ⭐ 推荐开源 | +| 鸿蒙手机 | **Meow** | 鸿蒙专属 | + +打开 GotMsg -> 「设置」-> 选对应通道 -> 点右上角 **i** 按钮 -> 按弹窗步骤配 -> 点该行「发送」测试。 + +### 3. 授权通知监听 +首页会提示「需要授权通知监听」。点击「前往系统授权」,在系统的通知访问设置中开启 GotMsg。 + +### 4. 开启转发 +首页打开「通知转发」开关。安卓收到通知后按配置自动推送到各通道。 + +--- + +## 二、推送通道配置详解 + +每条配置都可独立勾选/删除/排序/测试。点「添加」时建议每条都先「发送」测试一次。 + +### 2.1 Bark(iOS / iPadOS) + +[Bark](https://github.com/Finb/Bark) 是 iOS 上最轻量的推送方案,复制地址即用,**推荐所有 iOS 用户首选**。 + +**配置步骤**: +1. iPhone / iPad 上安装 Bark,首次打开允许通知权限。 +2. 复制 Bark 首页的推送地址,形如 `https://api.day.app/你的Key`。 +3. GotMsg「设置 -> Bark 服务器 -> 添加」: + - **名称**:随意,例如「我的 iPhone」 + - **服务器地址**:`https://api.day.app`(自建则填自建地址) + - **Device Key**:Bark 地址中 `/` 后面的那段 +4. 保存后点「发送」测试;iPhone 收到「GotMsg 测试」即成功。 + +**为什么推荐 Bark**:iOS 上点击 Bark 通知可一键跳转到微信、QQ、Telegram 对应 App;iOS 14+ 通知体验最自然;Bark 服务器在中国大陆可直接访问。 + +### 2.2 ntfy(Android / iOS / 网页) + +[ntfy](https://ntfy.sh) 是开源的 HTTP pub-sub 通知服务,**支持 Android、iOS 和网页端**,无需注册项目。 + +**配置步骤**: +1. 接收端安装 ntfy: + - Android:[Google Play](https://play.google.com/store/apps/details?id=io.heckel.ntfy) / [F-Droid](https://f-droid.org/en/packages/io.heckel.ntfy/) / [GitHub](https://github.com/binwiederhier/ntfy) + - iOS:[App Store](https://apps.apple.com/us/app/ntfy/id1625396347) +2. 打开 ntfy -> 添加订阅。服务器填 `https://ntfy.sh`(或自建地址);Topic 用一串**随机难猜的名字**(如 `gotmsg_a8f3d2`)。 +3. GotMsg「设置 -> ntfy 转发 -> 添加」: + - **服务器**:与接收端完全一致 + - **Topic**:与接收端完全一致 + - **Token**:仅自建服务且启用了鉴权时填 +4. 保存后点「发送」测试;接收端收到「GotMsg 测试」即成功。 + +> **安全提示**:公共 topic 谁知道名字就能订阅或发送。Topic 名**不要用**手机号、姓名、邮箱等可猜信息。 + +### 2.3 Meow(鸿蒙 / HarmonyOS) + +Meow 是鸿蒙手机的推送接收方案。GotMsg 按你填写的 Meow 接口地址和 Device Key 发出 HTTP 请求即可。 + +**配置步骤**: +1. 鸿蒙手机上安装 Meow,确认 Meow 自身能正常接收推送。 +2. 在 Meow 里找到**推送接口地址**和对应的 **Device Key / Token**。 +3. GotMsg「设置 -> Meow 转发 -> 添加」: + - **名称**:按鸿蒙设备填写(方便区分多台) + - **服务器地址**:Meow 给出的完整 API 地址 + - **Device Key**:Meow 给你的设备 Key(**不是**鸿蒙锁屏密码、华为账号密码) +4. 保存后点「发送」测试;鸿蒙手机收到「GotMsg 测试」即成功。 + +> 失败排查:检查 Meow 接口地址是否完整、Key 是否复制完整、鸿蒙手机是否允许 Meow 通知。 + +### 2.4 电邮转发 + +通过 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)或 `587`(STARTTLS) + - **账号**:完整邮箱地址 + - **授权码 / 密码**:上一步生成的授权码 + - **发件人**:通常与账号相同 + - **收件人**:接收通知的目标邮箱 +3. 保存后点「发送」测试;收件人收到「GotMsg 测试」即成功。 + +> **国内邮箱推荐端口 465**(QQ/163 均支持)。Gmail 需要应用专用密码而不是账户密码。 + +### 2.5 断网短信兜底 + +**当安卓手机没有网络时**,把重要通知(验证码、来电)通过 **SIM 卡短信** 发到另一台手机(通常是你的 iPhone)。需要安卓卡里还有短信套餐余量。 + +**配置步骤**: +1. 在 GotMsg「设置 -> 短信兜底」点「授予短信权限」(安卓系统权限)。 +2. 点「添加」输入**目标手机号**(如 iPhone 号,接收端是另一台手机,**不是** GotMsg 本身)。 +3. 选运营商: + - 选了「自动识别」:GotMsg 会发免费查询短信给运营商服务号,解析回执获取余量。 + - 选了「手动额度」:在「手动短信额度」填入当前套餐短信条数,每次发短信后自动减 1。 +4. 当余量 ≤ 5 时自动暂停,下次打开 App 提醒续费。 +5. 频率限制:每 5 分钟最多发 1 条(避免刷屏),同一条通知 5 分钟内不重复。 + +> **适用场景**:安卓手机没 WiFi 时,验证码不会丢,漏不了重要登录。 + +--- + +## 三、自建推送服务(可选) + +所有通道都支持自建,更好、更私密、可控。 + +### 3.1 自建 Bark 服务器 + +GotMsg 默认用 Bark 官方服务器(`https://api.day.app`),免费够用。自建适合追求完全控制。 + +**Docker 一键部署**(推荐): +```bash +docker run -d --name bark --restart=unless-stopped \ + -p 8080:8080 \ + -v /var/lib/bark:/data \ + finab/bark-server +``` + +然后用 Nginx Proxy Manager 加 HTTPS 域名。详细三种方案对比请看 [Bark 官方文档](https://github.com/Finb/Bark)。 + +**GotMsg 配置**:服务器地址填 `https://你的域名.com`(不要 `/push` 后缀),Device Key 填你在自建 Bark 上创建的 Key。 + +### 3.2 自建 ntfy 服务器 + +[ntfy](https://ntfy.sh) 是为自建设计的,**比 Bark 还简单**--官方直接提供 Docker 一行启动: + +```bash +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](https://docs.ntfy.sh/install/)。 + +**GotMsg 配置**:服务器地址填 `https://ntfy.你的域名.com`,Topic 照旧。 + +### 3.3 自建 Meow 服务器 +Meow 是鸿蒙客户端,服务端一般用 Meow 自带的。GotMsg 端无需配置服务端,只需填 Meow 给你的接口地址 + Key。 + +--- + +## 四、ntfy 通知回复(iPhone 自由输入回复) + +v1.10.2 起,ntfy 转发的通知支持在 iPhone 上**长按 ->「回复」-> 用 iOS 快捷指令自由输入文字 -> 自动回复回原 App**(短信/微信等带通知快捷回复的 App)。 + +配置步骤见 [docs/A2iReply-shortcut.md](docs/A2iReply-shortcut.md)。 + +> 依赖通知带 RemoteInput reply action(短信/微信/QQ/Telegram 多支持);验证码等无需回复的通知不挂回复按钮。公共 ntfy.sh 上 reply topic 明文,建议自建 ntfy + token。 + +--- + +## 五、使用建议 + +- **只想收验证码**:进入「过滤」页,开启「验证码自动提取」和「广告过滤」;再到「应用」页切到白名单模式,只勾选短信类 App。 +- **想同步聊天**:保持黑名单模式(默认),在「过滤」页开启「微信 / QQ / Telegram 优化」。 +- **通知没推过来**:先看「日志」页,每条通知(无论转发、过滤还是失败)都会记录原因。 +- **想让通知带图标**:见下方「应用图标」一节。 +- **电话通知不工作**:MIUI 不向第三方监听器分发系统电话通知,GotMsg 通过轮询 `getCallState()` 绕过此限制。需授予「电话」权限(设置 -> 应用 -> GotMsg -> 权限 -> 电话)。 +- **断网收不到通知**:开启「设置 -> 短信兜底」并填好 iPhone 号码、授予短信权限。断网时验证码和来电走短信(消耗套餐额度,5 分钟限 1 条)。 +- **想全平台通知**:可同时启用多个通道(勾选每个通道的多个条目),所有启用的会同时收到。 + +--- + +## 六、应用图标 + +Bark 和 ntfy 的通知 `icon` 字段需要公网可访问的图片 URL。GotMsg 支持把已安装 App 的图标批量导出,方便上传到你自己的图床。 + +规则:转发时 `icon = 图标 URL 前缀 + 安卓包名 + .png`。在「设置 -> 应用图标」里: + +1. 填写图标 URL 前缀,例如 `https://你的图床域名/icons/`。 +2. 选择一个目录,点「导出图标」,把该目录下所有 App 的图标以 `包名.png` 形式导出。 +3. 把导出的图片上传到你的图床对应目录。 + +留空前缀则不显示图标。 + +--- + +## 七、界面截图 + +| 首页 | 应用管理 | 过滤设置 | +|---|---|---| +| ![首页](screenshots/home.png) | ![应用管理](screenshots/apps.png) | ![过滤设置](screenshots/filter.png) | + +| 设置 | 转发日志 | +|---|---| +| ![设置](screenshots/settings.png) | ![转发日志](screenshots/log.png) | + +--- + +## License + +本项目仅供个人使用。自 v1.10.2 起闭源。 + +All Rights Reserved. 保留所有权利。 diff --git a/docs/A2iReply-shortcut.md b/docs/A2iReply-shortcut.md new file mode 100644 index 0000000..9a0e587 --- /dev/null +++ b/docs/A2iReply-shortcut.md @@ -0,0 +1,51 @@ +# iOS 快捷指令 A2iReply — 自由输入回复 + +a2i 转发的通知在 iPhone 上**长按**出「回复」按钮后,会触发本快捷指令:弹出输入框让你打字,再把回复 POST 回 a2i 的反向 reply topic,a2i 收到后用 RemoteInput 回复原 App(短信/微信等)。 + +## 一次性配置 + +### 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:///_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` 触发不到。 diff --git a/screenshots/apps.png b/screenshots/apps.png new file mode 100644 index 0000000..fcc78a2 Binary files /dev/null and b/screenshots/apps.png differ diff --git a/screenshots/filter.png b/screenshots/filter.png new file mode 100644 index 0000000..f57c46b Binary files /dev/null and b/screenshots/filter.png differ diff --git a/screenshots/home.png b/screenshots/home.png new file mode 100644 index 0000000..a98090c Binary files /dev/null and b/screenshots/home.png differ diff --git a/screenshots/log.png b/screenshots/log.png new file mode 100644 index 0000000..9f212f5 Binary files /dev/null and b/screenshots/log.png differ diff --git a/screenshots/overview.png b/screenshots/overview.png new file mode 100644 index 0000000..76497d4 Binary files /dev/null and b/screenshots/overview.png differ diff --git a/screenshots/settings.png b/screenshots/settings.png new file mode 100644 index 0000000..9c841c3 Binary files /dev/null and b/screenshots/settings.png differ