先决条件:
- 微信必须 翻墙 。
- 微信必须具有 FCM 功能。下载 Play 版,国行版本未测试,不确定。
- 翻墙 打开微信,以确保 FCM 功能激活。大陆 IP 打开微信,FCM 功能不启用。
- 连接 FCM 服务器。FCM 服务器可直连,但不稳定,由于微信必须 翻墙,FCM 服务器也 翻墙 连接。
- 绿色守护休眠微信,使其不在后台,只通过 FCM 接收消息。并设置允许 FCM 通知唤醒 app 。否则即使成功连接 FCM 服务器,且微信 FCM 功能激活,由于微信休眠,也无法被 FCM 通知拉起,导致无法接收新消息。
注:
微信 FCM 功能并不接收消息内容,只作为新消息提醒,程序收到 FCM 通知后,运行消息接收功能,接收新消息并弹出新消息提醒。
综上,翻墙 微信 + 翻墙 FCM 服务器 + 微信休眠 + 绿色守护允许 FCM 唤醒程序
以上条件下,及在保持网络长连接下( WiFi 环境),微信可以通过 FCM 接收新消息提醒。每次休眠后,会被新消息唤醒。
但是,如果中途网络中断(使用数据流量经常出现)且网络中断时发送新消息,即使再次 翻墙 连接 FCM 服务器,且 FCM diagnostics 中出现微信新消息推送记录,微信程序也无法被唤醒,无法接收新消息并弹出消息提醒。
为解决此问题,安装 X-APM,打开 GCM Generation Collection 。可保证在网络恢复连接后,由 X-APM 弹出微信新消息提醒。
如果不允许 FCM 通知唤醒程序,且不使用 X-APM,则微信被绿色守护休眠后,即使微信 FCM 模块收到通知,也无法接收消息并弹出新消息提醒。
如果不允许 FCM 通知唤醒程序,且使用 X-APM,则可达成类 IOS 效果,手机端有新消息提醒(来自 X-APM ),手动打开微信后程序再联网接收新消息。
如果允许 FCM 唤醒程序,不使用 X-APM,则收到 FCM 通知后,微信程序被唤醒(在保持网络长连接下),接收新消息并弹出通知。一旦网络连接中断,即使再恢复也无法弹出中断时间段新消息提醒。
如果允许 FCM 唤醒程序,且使用 X-APM,微信 FCM 收到通知后,X-APM 首先弹出微信新消息通知,微信程序被唤醒,接收新消息,弹出含具体消息内容的新消息通知。在网络中断并恢复后,由 X-APM 弹出中断时间段消息通知。
综上,为保证通过 FCM 收到所有微信新消息通知,具体设置如下:
微信 翻墙 + FCM 服务器 翻墙 + 绿色守护休眠微信 + 允许 FCM 通知唤醒程序 + FCM Generation Collection
注:在移动数据环境,网络条件更复杂,可能会出现 bug 。
应用管理的乖巧模式。
我的结论是:应用管理的乖巧模式不适应于微信 FCM 。因为如果微信进入乖巧模式,后台会留下缓存进程,微信便会用自身消息接收功能而不是 FCM 接收新信息,证据是这种模式下,发送新消息,FCM Diagnostics 中不存在微信消息推送记录。
只有当开启 X-APM 的 GCM Generation Collection,弹出的来自 X-APM 通知才是真正微信的 FCM 通知。
微信启用 FCM 的条件是非大陆 IP 且后台不存在任何微信进程,即每次打开微信先看到地球界面。
使微信进入完全关闭状态只有在 APP info 中 Force Stop 或者绿色守护将微信休眠,并且必须完全休眠,而不能仅进入 Shallow Hibernate 模式,Shallow Hibernate 模式下与 X-APM 的乖巧模式相同,都会在后台存留微信缓存进程,使微信不使用 FCM 接收消息。
所以使微信通过 FCM 接收消息的完整设置是:
- 微信全程 翻墙
- FCM 全程 翻墙
- 绿色守护 休眠微信 并且 ignore background-free 且 ignore running state 且 Normal Hibernate mode 且 允许 GCM 推送唤醒程序
- X-APM 打开 GCM Generation CollectionF
评论 在此处输入想要评论的文本。