国内APP的相互之间唤醒十分严重,大多数用户在不root,没有xposed的情况下很难压制住应用之间的相互唤醒,虽然天猫、淘宝这些可以直接扔空调狗里面(如何免root使用空调狗请参见我之前写的文章),但是QQ,微信这些却不行(万一漏了小姐姐发来的消息怎么办),加上前一段时间换了手机,于是手里又有闲置的手机了,又看到酷安上面有一款GcmForMojo,可以通过自己的VPS来给自己的手机推送QQ收到的消息,于是我根据网上的一些资料,搭配找到的linux FOR arm的镜像用手机弄了一个服务端来推送消息

介绍:GcmForMojo这个功能是可以“将QQ和微信的消息通过FCM/GCM/MiPush/HwPush/MzPush推送到你的手机”,所以效果就是省电,省心,省流量,当然,美中不足的是你需要一台24小时不关机的电脑,但是太过于浪费,所以可以使用旧手机或者平板来干。

具体步骤:

1、配置安装Linux

2、SSH连接Linux

3、安装环境和程序

4、GCM客户端设置

5、修改配置文件并运行服务端

6.、GcmForMojo内回复功能

**前提:**服务端手机需要ROOT

软件:《GcmForMojo》《Linux Deploy》《JuiceSSH》《ES文件浏览器》

**需要常驻:**服务端手机Linux Deploy,客户端手机GcmForMojo启动运行,保持网络连接(黑域?绿色守护?神隐模式?电池优化?你需要让这些放过这两个APP)。

好了,教程开始。需要注意的是,P.S.G/Fcm均不推荐在国内使用。

一:服务端安装Linux Deploy github

安装地址:点此前往

Google Play:点此前往

P.S.因为自身网络原因无法访问的请到文章末尾,末尾有链接。

二:开始配置linux

1、配置安装Linux

Linux Deploy

左上角设置建议勾选锁定WIFI,其它保持默认。

右下角配置按钮。

**发行版:**CentOS。

**框架:**默认armhfp,手机CPU支持64位可以选aarch64,平板Atom处理器选x86_64。

源地址:科大

安装类型:“文件”或者“目录的”,安装路径默认即可。

镜像大小1500MB以上,尽量大些,以免出问题。

用户名默认Android,密码默认随机(均可自行设置,后面”新建认证”要用到)。

**root用户:**密码需ssh登陆后改

**本地化:**选择zh_CN.UTF-8

勾选Enable允许SSH服务器启动端口默认22。

返回主界面,点右上角——选择安装。

终端输出“<<<deploy”时,代表安装已完成。

安装时间大概10分钟左右,很短时间结束的话是没成功的。

如果安装失败可尝试把安装类型”文件”改为”目录的”。

配置过程以及内容截图如下:

重装Linux注意事项:

1、移除环境(右上角设置里)

2、删除文件夹”/data/user/0/ru.meefik.linuxdeploy”(re文件浏览器,或者es文件浏览器开root)

3、卸载重装Linux deploy

4、右下角设置更改之后,必须保证再进设置不会还原默认(如果还原请检查以上三步),可以随便改一项来测试,之后尝试重新安装linux

安装成功之后按启动

2.使用SSH来连接Linux

这里我们需要终端(在酷安里面直接搜索终端就行了,推荐21世纪的终端-NeoTerm)

运行命令

Ssh android@127.0.0.1

回车以后输入密码(就是先界面中的密码)

下面开始设置客户端

首先你需要修改root密码

Sudo passwd

回车,然后输入新的root密码

然后退出终端

重新执行

Ssh root@127.0.0.1

回车

输入密码,然后回车

这样,你就通过SSH连接到了你手机上的linux了

P.S.据说通过电脑指定手机IP也可以链接,不过没有尝试过

以下是在终端里SSH执行的内容(前面有#号的为命令,请在执行时勿输入#)

现在开始教程

首先安装依存关系

yum -y groupinstall "Development Tools"

yum install vim git openssl-devel perl cpan make gcc g++

由于我们需要 Mojo::WebQQ 这个Perl语言项目作为主机端接收QQ消息的平台,同时CentOS 6.8自带yum源没有Cpanm包管理,所以接下来需要安装Cpanm

cpan -i App::cpanminus

由于我们是第一次使用Cpan,程序会要求我们进行最基础的设定,一路回车即可,直到你看到

CPAN needs access to at least one CPAN mirror.

As you did not allow me to connect to the internet

you need to supply a valid CPAN URL now.

Please enter the URL of your CPAN mirror

不要惊慌,这是Cpan要求你设定一个Cpan仓库源,到这里找一个就可以,国内的主机可以去 China 列寻找,选择一个镜像服务器节点离你最近的地方,墙外的服务器可以直接用主站作为镜像源

Cpanm安装完毕后,我们就可以安装 Mojo::WebQQ 了

cpanm Mojo::Webqq

如果你的手机不能直通国际互联网,一般情况下下载速度会非常慢或者完全无法安装,这时候你可以这样做

cpanm --mirror http://mirrors.163.com/cpan/ Mojo::Webqq

如果出现了安装错误,一般情况下是 Mojolicious 未成功安装造成的,这时候你需要手动安装

curl -L https://cpanmin.us | perl - -M https://cpan.metacpan.org -n Mojolicious

成功安装 Mojolicious 之后再次执行

cpanm Mojo::Webqq

cpanm --mirror http://mirrors.163.com/cpan/ Mojo::Webqq

应该就可以成功安装了

Mojo::Weixin的安装方法大致相同

3.设定

Mojo::WebQQ安装完毕后,就可以开始进行设定了

首先我们需要新建一个 Perl 脚本文件来执行

touch GCM.pl

我们使用 vim 对文件进行操作

vi GCM.pl

可能有人还不是很熟悉 vim 的使用方法,这里简单介绍一下会用到的功能

i进入编辑模式

ESC退出编辑模式

在非编辑模式下

:wq存盘退出vim

:q!不存盘退出vim

这里给出一个 Perl 脚本文件的模板,具体内容请根据实际情况替换更改

use Mojo::Webqq;

微信使用use Mojo::Weixin

my $client = Mojo::Webqq->new(log_encoding=>"utf-8");

$client->load("ShowMsg");

请根据自己所需的推送服务进行选择并删除或注释不需要的部分,填写格式请仿照GCM的方式填写

以下为GCM推送

$client->load("GCM",data=>{

api_url => 'https://gcm-http.googleapis.com/gcm/send',

api_key=>'AIzaSyB18io0hduB_3uHxKD3XaebPCecug27ht8',

registration_ids=>["输入你自己从GCMForMojo APP中获取到的令牌"],

allow_group=>["接受群消息的号码,如需要推送全部群消息可删除这一行,每个群号码之间使用"",分隔"],

ban_group=>[],

allow_discuss=>[],

ban_discuss=>[],

此处为讨论组,填写格式同上

});

以下为MiPush推送

$client->load("MiPush",data=>{

registration_ids=>[""],

allow_group=>[""],

ban_group=>[],

allow_discuss=>[],

ban_discuss=>[],

});

以下为HwPush推送

$client->load("HwPush",data=>{

registration_ids=>[""],

allow_group=>[""],

ban_group=>[],

allow_discuss=>[],

ban_discuss=>[],

});

以下为FmPush推送

$client->load("FmPush",data=>{

registration_ids=>[""],

allow_group=>[""],

ban_group=>[],

allow_discuss=>[],

ban_discuss=>[],

});

$client->load("Openqq",data=>{

如果是微信改为Openwx

listen => [{host=>"0.0.0.0",port=>5000}, ] ,

如果是推送微信的话需要保证端口不重复,并请保证所设定的端口已经在防火墙内放行,同时需要在APP内设定好推送服务器的地址和端口

});

不需要APP内回复功能请删除以上三行(不包括被#号注释掉的几行)

$client->run();

保存退出后执行

perl GCM.pl

这时候你的 GCMForMojo APP应该会弹出一条检测到二维码事件的通知,点击它,使用手机端QQ扫描这个二维码,你的 GCMForMojo 就跑起来了

注意事项

Perl进程并不会后台运行!!!同时如果你的SSH连接中断的话当前终端下运行的全部会话均会被杀死,若想保持后台运行且断掉SSH连接后依旧可正常工作,请使用 screen 命令

screen -S docker

perl GCM.pl

然后请按 Ctrl+A ,再按 D 键使此 screen 进入后台驻守,然后就可以中断SSH连接了,如果需要恢复此 screen 的话,请执行

screen -r docker

如果你没有能在 /storage/emulated/0/gcmformojo/ 里找到下载的二维码图片或接收到 GCMForMojo 的二维码事件通知,那么很可能你的 Mojo::WebQQ 版本过旧,如果需要升级 Mojo::WebQQ 的话,有两种方式

Cpanm仓库更新

cpanm Mojo::Webqq

cpanm --mirror http://mirrors.163.com/cpan/ Mojo::Webqq

Git仓库源编译安装升级

yum install perl-ExtUtils-MakeMaker git

git clone https://github.com/sjdy521/Mojo-Webqq.git

cd Mojo-Webqq

perl Makefile.PL

make

make install

make clean

以后更新时

cd Mojo-Webqq

git pull

perl Makefile.PL

make

make install

make clean

Mojo::Weixin 的更新方式类似,请自行替换相应字符串

然后再执行

perl GCM.pl

应该就可以看到二维码图片或接收到通知了

由于 OpenQQ 组件使用 HTTP 请求而不是更安全的 HTTPS 请求,这样会很容易被他人监听,并有可能以你的身份发送消息,所以为了安全起见,强烈建议以加盐或开启 HTTPS 加密的方式增强安全性

感谢Milkice同学整理增强安全性的方法,原文链接在此

加盐

在 GCM.pl 文件内加入以下内容

use Mojo::Webqq;

use Digest::MD5 qw(md5 md5_hex md5_base64);

请确保上一行加入在文件头行,否则会报错

以下略

$client->load("Openqq",data=>{

listen => [{host=>"0.0.0.0",port=>5000}, ] ,

auth => sub {

my(param,controller) = @_;

my $secret = 'salt';

请将该行salt改为你自定义的盐值,并在Android端内设定好你所自定义的盐值

my $text='';

foreach key (sort keys %param){

if($key ne 'sign'){

value =param->{$key};

text.=value;

}

}

if(param->{sign} eq md5_hex(text.$secret) ){

return 1;

}

else{

return 0;

}

}

});

以下略

加盐有什么用呢?

盐(Salt),在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。

(Via Wikipedia)

通俗来讲,这就是一个很简单的校验,如同一个密码,这样就可以很简单的解决之前提到的盗用问题,如果需要解决监听问题,你需要开启 HTTPS 加密

HTTPS 加密

在 GCM.pl 文件内加入以下内容

以上略

$client->load("Openqq",data=>{

listen => [{

host =>"0.0.0.0",

port =>443,

请求监听端口,默认443,也可以自定义

tls =>1,

开启https请求支持

tls_ca =>"/etc/tls/ca.crt"

可选,ca证书路径

tls_cert=>"/etc/tls/server.crt"

服务器证书路径

tls_key =>"/etc/tls/server.key"},],

证书对应的key文件

});

HTTPS 证书可以使用 Let's Encrypt 这个免费的证书签发机构的证书,可信赖度不像之前 StartSSL 那么差,除了三个月需要续签一次以外没有什么大问题,签发和续期证书的步骤网上有很多,自行 Google 一下就好

服务端设定好后把 Android 端的服务器上将 http://xxxxxxxx:xxxx 改为 https://xxxxxxxx:xxxx 即可

注意,如果需要 HTTPS 加密,你需要申请一个域名并绑定在你的 推送服务器 上,否则你是无法签发可被信任的证书的,除非你选择了 自签发证书 ,但这样做会更麻烦

P.S.如果cpanm安装不成功,可以试试

发现yum安装perl无效,编译安装perl后安装cpanm包管理才行。

wget http://www.cpan.org/src/5.0/perl-5.24.1.tar.gz

tar -xzf perl-5.24.1.tar.gz

cd perl-5.24.1

./Configure -des -Dprefix=$HOME/localperl

make

make install


P.S.

通过HTTP代理连接Google FCM推送服务器

由于众所周知的原因,中国大陆无法直连FCM推送服务器。这种情况下为了能够向FFM客户端推送消息,可以在 config.js中的 push_proxy 选项中指定FFM服务端连接Google FCM推送服务器时所使用的HTTP代理。具体思路请参考 这个issue 。

客户端内回复功能:

https://www.ngrok.cc/#down-client一般手机(高通、联发科)选择Linux ARM版本,x86架构选Linux 32Bit版本

下载解压然后(sunny文件)上传到linux目录,这里我是扔到了root目录

注册并登陆: https://www.ngrok.cc

购买开通隧道,端口为配置文件设置的(例如我的5000)

复制隧道id粘贴替换到下文

Ssh连接Linux逐条运行下面命令

screen -S n

cd /root

chmod a+x sunny

./sunny clientid +你的隧道ID

在转发一行出现你当时注册的网址时就好了

把网址复制到GCM客户端即可回复消息。

文中所提到的工具下载链接


P.S.本文中涉及到的引用均遵循知识共享署名-非商业性使用-相同方式共享4.0国际许可协议

其中涉及到的原作品地址以及作者如下

作者kotomei

链接:https://gist.github.com/kotomei/5367a003cd16d05e075c21a7f360b09a

作者Rikka,原作品链接:https://github.com/RikkaApps/FCM-for-Mojo/blob/master/README.md

其中第一篇作者在文章中注明按照该协议进行许可,第二篇作者回复按照该协议进行许可