自己的老爷机已经坚持了两年,电池续航、运行内存等各方面都赶不上持续更新的 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-MojoGcm 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

安装 Mojo-Webqq

#通过 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 即可更新

搭建 FCM for Mojo 服务端

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>

注:

  1. 上面代码中的 <session> 指会话名称,自己定义;
  2. 进个人使用发现部分系统在使用 screen 时,会存在中文不兼容并乱码的现象。经研究,只需在创建和提取会话时,在输入 screen 后加上 -U 即可(表示使用 Unicode 编码)。

配置 Android 客户端

通过 GitHub Releases 或应用商店下载 apk 程序并安装。

首先,进入 Server settings ,在 Server URL 处填入你服务器地址(即刚才添加的 ssl 证书的域名)。

FCM for Mojo-WebQQ 安卓端1.jpg

然后进入 Account settings 设置你的 QQ 账号和密码。

FCM for Mojo-WebQQ 安卓端2.jpg

接下来,进入 Server settings 中的 Manage devices ,点击右上角的加号添加本机设备,然后点旁边的上传图标,将设备加入服务端。

FCM for Mojo-WebQQ 安卓端3.jpg

然后我们返回 App 主页,点击顶部的 Server status 区域即可刷新服务端状态。当显示成绿色并有一个设备时,表明配置成功。

FCM for Mojo-WebQQ 安卓端4.jpg

这下你应该就可以收到对应的消息提醒了!

效果如下:

FCM for Mojo-WebQQ 安卓端5.jpg

FCM for Mojo-WebQQ 安卓端6.jpg
(emmm……小姐姐真可爱)

进入 Notification settings 也可以设置通知相关的参数,例如通知方式,哪些群聊进行通知、哪些不通知,不再赘述。

FCM for Mojo-WebQQ 安卓端7.jpg

优化提示:

  1. 记得要把本机的 QQ/TIM 客户端关闭,否则会出现重复通知;
  2. 登录时如果出现服务端提示“更群扩展信息授权失败”,建议用服务器的 ip 多访问登录几次 qun.qq.com 这个网站,从而消除异地登录造成的失败提示。(详见:#183【重要通知】关于账号密码登录以及无法成功获取到uid的问题
  3. Android 端要求具备完整的 Google 服务套件,因此在安装使用客户端前需准备好 Google 四件套;
  4. 第一次打开 Android 端时需保持外网连接,使程序连接 Google 云端推送服务器获取设备 ID ,获取成功后可以断开代理,国内能够正常访问(由于国内数据连接的设置,其实还是有点不够稳定,可以通过 PNF Root for GCM 这款程序修改 GCM 的心跳值来保活消息连接,使用程序推荐值即可)

参考资料

  1. 折腾 Mojo-WebQQ 以及 Rikka 的 FCM for Mojo : https://love4taylor.me/archives/mojo-fcm-qq.html (直接借用了截图和部分教程内容)
  2. FCM-for-Mojo 项目主页: https://github.com/RikkaApps/FCM-for-Mojo
文章目录