自己的老爷机已经坚持了两年,电池续航、运行内存等各方面都赶不上持续更新的 QQ 和微信。因此,这两大毒瘤长期占据着我手机耗电排行榜首位。
可微信和QQ的生态让我又不得不用,所以就只能通过其它的方式来“曲线救国”了。
首先,让我们明白一下这三个名词的意思:
Mojo-Webqq :简单地说,就是通过解析 Webqq 的通信协议,用来给 Linux 等腾讯并未适配的平台进行简易通讯的接口解析程序。
更新:WebQQ 宣布在2019年1月1日停止服务,故 Mojo-Webqq 程序已失效,而我自己也换了新手机,不再需要通过这种方法来省电省内存,在此纪念捣鼓和陪伴推送的那几个月!
Mojo-Weixin :同上,适配的是网页版微信(https://web.wechat.com)。
GCM 推送:全称 Google Cloud Messaging ,是谷歌服务套件中为 Android 系统提供的统一云端推送平台。最近几年似乎改名 Firebase Cloud Messaging 了,所以也有叫做 FCM 的,一个意思。统一的推送带来的好处自然是省电,运行内存的占用也更少。(具体原理可以通过搜索了解)
那么这个程序和推送、甚至手机之间又有什么具体联系呢? 就是有两位大佬开发了 FCM-for-Mojo 和 Gcm For Mojo 这两个 APP ,因此可以利用这一特性,在自己的 VPS 上接收 QQ 和微信的消息,然后转发给 GCM 的云端,并由 GCM 推送到手机上,而手机上则不需要保持 QQ 与微信客户端的后台,从而起到省电等功能(而且还能实现通知栏快捷回复等安卓特性)。
其中 FCM-for-Mojo 是只支持 QQ 的,也只能通过 GCM 进行推送;而 Gcm For Mojo 则同时还支持微信,推送方式上也尤为多样,包括 GCM 、 MiPush 、华为推送、魅族推送。
由于 FCM-for-Mojo 和 Gcm For Mojo 两个程序的服务端脚本不太一样,但最后都是基于 Mojo-Webqq 的,二者大同小异,故以下都只讲述 FCM-for-Mojo 的使用。
由于服务器需要与 GCM 服务器保持连接,所以我们需要一台能够访问外网的机器,当然你要是不嫌麻烦,也可以通过 push_proxy
参数设置 http 代理来保证外网连接。
由于有热心小伙伴制作了相关一键脚本(FFM-one-step),同时支持多系统安装 FCM-for-Mojo 和 Gcm For Mojo ,所以我通常也会这样使用,方便又快捷。
#下载脚本
wget https://github.com/null-ecp/FFM-one-step/raw/master/FFM.sh
#运行脚本
bash FFM.sh
依次选择对应的系统,并确认,开始安装。
#Ubuntu/Debian
#Node.js 8 或 9 自行选择
#curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
#curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
sudo apt install -y build-essential vim git libssl-dev perl libcrypt-openssl-bignum-perl libcrypt-openssl-rsa-perl nodejs
#CentOS/RedHat
#Node.js 8 或 9 自行选择
#curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
#curl --silent --location https://rpm.nodesource.com/setup_9.x | sudo bash -
sudo yum -y groupinstall "Development Tools"
sudo yum install -y vim git openssl-devel make gcc gcc-c++ perl cpan perl-Crypt-OpenSSL-RSA perl-Crypt-OpenSSL-Bignum nodejs
#通过 cpan 安装 cpanm
sudo cpan -i App::cpanminus
#或者在线安装 cpanm, 一个国外一个国内自行选择
#curl -kL https://cpanmin.us | perl - --sudo App::cpanminus
#curl http://share-10066126.cos.myqcloud.com/cpanm.pl|perl - --sudo App::cpanminus
cpanm --sudo Mojo::Webqq
cpanm --sudo Webqq::Encryption
以后再次执行 cpanm --sudo Mojo::Webqq
即可更新
git clone https://github.com/RikkaApps/FCM-for-Mojo-Server.git
cd FCM-for-Mojo-Server
cp config.example.js config.js
npm install
然后通过 npm start
即可运行服务端。更新则只需执行 git pull
。
配置文件为 config.js
,我的配置文件如下:
const fs = require('fs');
const config = {
"mojo": {
"webqq": {
// openqq plugin local port
"openqq": 5003
}
},
// local http server port, FFM plugin will send messages to this port
"local_port": 5004,
// client config file, must be a valid json, do not need to edit it manually
"client_config": "client.json",
// http server port for client
"port": 5005,
// hostname, 0.0.0.0 default (IPv4)
/*"hostname": "",*/
// basic auth config, see https://github.com/http-auth/http-auth#configuration
"basic_auth": {
"file": "/root/FCM-for-Mojo-Server/ssl/http-auth"
},
// https config, see https://nodejs.org/dist/latest/docs/api/https.html
"https": {
"key": fs.readFileSync("/root/FCM-for-Mojo-Server/ssl/key.key"),
"ca": fs.readFileSync("/root/FCM-for-Mojo-Server/ssl/ca.crt"),
"cert": fs.readFileSync("/root/FCM-for-Mojo-Server/ssl/cert.crt")
}
};
module.exports = config;
这里我只修改了两个部分:一个是 http-auth ,即 http 基本认证,用于增强服务器账号密码效验;另一个是 https 加密,增强通信安全。其它任何参数都是不要修改的。
http 基本认证:按照上面配置的路径,我只需要在 /root/FCM-for-Mojo-Server/ssl/
目录内放一个名为 http-auth 的纯文本,里面放置 username:passsword
即可;
https 通信加密:同样按照上面配置的路径,在 /root/FCM-for-Mojo-Server/ssl/
目录放置域名的 ssl 文件即可。
为了保证消息的持续推送,必须保证 Mojo-Webqq 程序保持在后台运行。可它会在 SSH 断开之后自动停止,因此我们需要用到进程守护。这里我使用的是最简单 screen
。
#创建 screen 会话
screen -S <session>
#运行 FCM-for-Mojo-Server ,然后断开连接,自动挂到后台
cd FCM-for-Mojo-Server
npm start
#将会话从后台提出
screen -r <session>
注:
<session>
指会话名称,自己定义;screen
后加上 -U
即可(表示使用 Unicode 编码)。通过 GitHub Releases 或应用商店下载 apk 程序并安装。
首先,进入 Server settings ,在 Server URL 处填入你服务器地址(即刚才添加的 ssl 证书的域名)。
然后进入 Account settings 设置你的 QQ 账号和密码。
接下来,进入 Server settings 中的 Manage devices ,点击右上角的加号添加本机设备,然后点旁边的上传图标,将设备加入服务端。
然后我们返回 App 主页,点击顶部的 Server status 区域即可刷新服务端状态。当显示成绿色并有一个设备时,表明配置成功。
这下你应该就可以收到对应的消息提醒了!
效果如下:
进入 Notification settings 也可以设置通知相关的参数,例如通知方式,哪些群聊进行通知、哪些不通知,不再赘述。