给后面搜到的佬留个记录。
这两天遇到个挺烦的问题:iPhone 开着 Shadowrocket 之后,Telegram / X 经常不推送,消息非得点进 App 才能看到。节点本身是正常的,外网也能开,所以一开始还以为Telegram 或 iOS 抽风。
后来翻了一下,问题大概率在 APNs,也就是苹果推送服务。国内网络下 APNs 相关域名/IP 有时候不太稳,解决办法就是把这些流量强制走代理。
我这边环境:
2.2.80(3082)
- 路由模式:配置
- 节点:正常可用
- 结果:Telegram 锁屏推送恢复
重点先说一个坑:
不要把 APNs 修复文件直接当成一个新配置切过去,切过去以后 VPN 直接连不上。
正确做法是:
把它加成模块,然后挂到你当前正在用的配置里。
路径大概是:
Shadowrocket → 配置 → 模块 → 新建模块
我最后是手动建了一个模块,内容如下:
#!name=APNs Push Fix
#!desc=Force Apple APNs traffic through proxy
Rule
DOMAIN-SUFFIX,push.apple.com,PROXY
DOMAIN-SUFFIX,akadns.net,PROXY
DOMAIN-SUFFIX,apple.com.edgekey.net,PROXY
IP-CIDR,17.249.0.0/16,PROXY,no-resolve
IP-CIDR,17.252.0.0/16,PROXY,no-resolve
IP-CIDR,17.57.144.0/22,PROXY,no-resolve
IP-CIDR,17.188.128.0/18,PROXY,no-resolve
IP-CIDR,17.188.20.0/23,PROXY,no-resolve
这里还有一个坑:
如果你的配置里没有叫
PROXY
的策略组,启用后可能会连不上 VPN。
这种情况下,把上面的
PROXY
改成你自己配置里真实存在的策略组名,或者直接改成某个可用节点名。比如:
DOMAIN-SUFFIX,push.apple.com,你的节点名
模块保存好以后,还要去开这个:
Shadowrocket → 设置 → 隧道 → APNs
把 APNs 开关打开。
我这边做完以后,用 Telegram 锁屏测试,推送就正常到了。
另外补一个容易误判的情况:
如果 Telegram 能收到通知,但是有些消息没声音,不一定还是 APNs 的锅。我这里后面发现是自己的 Hermes 机器人有些消息是静默通知,通知会到,但是不响。Bot API 里类似
disable_notification=true
这种参数就会导致这个现象。
如果佬们照着弄完还不行,可以按这个顺序排:
1.
模块是不是挂在当前正在用的配置里
2.
VPN 本身能不能正常连上
3.
PROXY
这个策略名在你配置里存不存在
4.
Shadowrocket 的「设置 → 隧道 → APNs」有没有开
总结一下就是:
APNs 走代理 + 打开隧道 APNs + 飞行模式重连一次。
我这边这样就恢复了,给被 iPhone 推送折腾的佬们参考。