自定义iOS消息通知
在iOS上,Chanify或者Bark是非常好用的自定义通知app。通过HTTP的形式,就可以给自己自定义发送通知,从而来实现服务器监控或者是消息转发。之前使用Chanify的官方服务器进行ddns的IP变更通知,现在使用SmsForwarder来进行短信的转发。不过默认使用官方服务器,也许有一定的安全隐患,幸好有空闲的服务器和域名,记录一下自建服务器的过程。
配置Chanify
可以从官网clone源码编译安装,或者是使用docker拉取镜像。我这里选择使用docker的方法,因为足够简单。
首先获取镜像,大陆dockerhub连不上自行解决或者参考上一篇文章Docker拉取镜像方法。
1 | docker pull wizjin/chanify:1.4.3 |
然后配置docker-compose.yml文件,替换/custom/your/path/为自己的目录,映射端口也可以按需修改。
1 | version: "3" |
配置同目录下的chanify.yml配置文件,替换endpoint为你自己的访问地址,例如你要是用IP进行访问,那么就改成自己的公网IP地址形式的URL,如果不使用https改成http,但是这样会不太安全,不建议使用,endpoint应该是给app等客户端来使用的,这里配置错误理论来说没有影响,在客户端使用的时候要检查地址、协议对不对。name就是节点名称,随意即可。datapath与上面一致。register这里是配置是否开放注册,如果不开放,设置仅白名单用户ID才能访问。如果你要提供公益服务,让大家都可以访问,那么enable为true就行。docker镜像默认使用sqlite保存用户ID信息,一般来说是够用了,有使用mysql需求可以根据官网文档增加一个dburl字段配置数据库连接方式,不过得先自己手动新建数据库才行,表会自动创建。
1 | server: |
最后配置Nginx服务,主要是为了开启https服务。我的nginx配置文件放在/etc/nginx/site-enabled/目录下,一个文件一个服务,因此配置文件会比官网的简单,官网的是使用了nginx的docker容器来进行代理,我由于服务器已经安装nginx了,所以方法稍有不同。修改下面的域名以及代理地址。
1 | server { |
我使用certbot来自动化配置ssl、申请免费证书,这里一条命令sudo certbot --nginx选择需要配置的域名、转发所有的http流量,就完成了所有配置。
检测
docker compose up -d就可以直接启动服务了,curl对应端口或者docker logs查看确认服务启动正常。如果没有正常启动请检查配置是否有误。新版的docker直接使用docker compose命令,不需要加短横线。
如果一切顺利,现在访问URL就可以在浏览器中看到一个二维码,手机端APP扫码添加节点。然后创建或者打开一个已经存在的频道,复制自建节点的token,使用curl来测试服务是否正常,能看到hello就表示配置成功。
1 | curl --form-string "text=hello" "http://<address>:<port>/v1/sender/<token>" |
这里顺便讲一下chanify的一些使用方法。主要是通过http的形式调用接口,可以通过GET和POST请求方式,GET请求比较简单,把参数都放在URL里面就完了。
1 | http://<address>:<port>/v1/sender/<token>/<message> |
主要是POST方式,一开始对http请求头设置的不对,所以不能正常访问。如果要通过json形式来配置的话,首先修改http头部的Content-Type为application/json; charset=utf-8。同样使用curl进行测试。
1 | curl -H "Content-Type: application/json; charset=utf-8" -X POST -d '{"title": "test_title", "text":"test_text", "copy":"copy_test", "autocopy": 1}' "https://api.chanify.net/v1/sender/token" |
1 | { |
在iOS14.5以上的系统中,只能通过下拉通知信息来手动复制,旧版系统可以在设置autocopy后直接复制消息。
这样的话,应该可以通过绝大多数的webhook方法调用自建的chanify节点了。Chanify我使用的比较多,Bark应该与之类似,都可以自建节点来保证安全性。
参考
https://github.com/chanify/chanify