国内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。
返回主界面,点右上角——选择安装。
终端输出“<< 安装时间大概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