服务器报警推送工具「Server酱」用到的云服务和开源项目

嗯,我又写工具玩了。以前报警邮件收不到的时候就嚷着要写个推送工具,后来换Slack用得还不错,但再后来国内各种访问不到。想起来自己需要的也不是特别多。无非就是个消息推送工具而已嘛。

正好有同学放出了LeanCloud的PUSH插件,所以就用ionic写了一个,叫做「Server酱」大概是这样工作的:

scgif

V2EX的同学们的建议下加了微信支持,然后用起来就非常顺滑了,开通只要一分钟:

  1. 登入:用GitHub账号登入网站,就能获得一个SCKEY(在「发送消息」页面)
  2. 绑定:点击「微信推送」,扫码关注同时即可完成绑定;不喜欢微信的同学也可以下载手机客户端,扫描「客户端」页面的「绑定用二维码」绑定
  3. 发消息:往 http://sc.ftqq.com/SCKEY.send 发GET请求,就可以在手机上收到消息啦

更多说明请访问官方网站:http://sc.ftqq.com/ ,这里重点说说用到的云服务和开源项目吧。

推送组件

对于绝大部分移动客户端而言,推送功能是非常重要的用户到达和唤醒工具。但在Hybrid APP的解决方案里边,Cordova一直没有国内能用的推送插件。之前JobDeer做APP时,我们是自己用Parse的SDK改了一个LeanCloud的插件出来用,本来正考虑要不要改改开源了,发现已经有同学做的挺不错了,于是就直接用了。

https://github.com/BenBBear/cordova-plugin-leanpush

这个插件的说明已经写的挺细致了,按部就班来就可以。温馨提示三点:

  1. Android打包失败时记得回来看页面最下边的Fix。
  2. 安装插件之前尽量先把包名确定好再装,因为你再修改包名后,它不会同步修改代码。如果你遇到推送点击后呼叫不出来应用,记得去检查下Java文件里边的包名。
  3. iOS上如果取不到InstallationID,也没有任何错误提示,那么去检查下你的证书和包名的权限是否对应。

推送云服务

这次客户端推送主要用的是LeanCloud,因为个人感觉比较成熟,文档也写得比较细。

LeanCloud采用InstallationID来代表一个安装,对iOS来说,这个ID是唯一的,把应用卸了再装还是一样的。但对Android来说,貌似每次安装一遍应用就会有一个新的值。只要知道InstallationID,就可以向手机推送消息了。

对Android而言,是不需要证书的。哦,不对,其实Google的服务是需要证书的,但国内的手机很多都没有Google的服务,所以国外的推送云服务,在国内往往没法用。

但iOS服务是需要证书的,配置证书可以参考LeanCloud的说明:https://leancloud.cn/docs/ios_push_cert.html#配置和下载证书

需要说明的是,如果你用的是测试证书,在LeanCloud页面上进行发送测试时,记得要点「iOS」,然后才会出来证书类型选项,选择「测试证书」。

LeanCloud的消息发送文档里边有一个Channel的概念,就是可以给一组人推送消息的容器。但我找遍了文档中心也没找到怎么创建。最后发现这货不需要创建,直接写就好了 T__T

所有东西都配置好以后,就可以推送消息了。

用ionic做产品界面和本地功能

ionic最近成长了不少,已经可以非常方便的完成漂亮的产品界面的。

  • 有几个非常不错的功能:实时真机调试:在命令行下: ionic run android -live 当你修改代码后,自动把修改部署到测试机,好用。
  • 热部署。这是ionic推出的新服务,还在内测。可以不用重新安装就升级应用内容,我还没试,但用在iOS上会很赞,不信的你多等几次审核就会信了。这个服务是收费的,现在可以免费使用,不过好像不会太贵。

用下来有几个地方需要注意:

  • 如果ajax请求发不出去,记得安装whitelist插件。
  • 修改android的启动画面,需要安装splash插件。
  • iOS8下的IndexedDB是残缺的。
  • ionic的list控件已经自带了下拉刷新,不用自己做:http://ionicframework.com/docs/api/directive/ionRefresher

用到的插件列表:

  • cordova-plugin-device 1.0.1 “Device”
  • cordova-plugin-inappbrowser 1.0.1 “InAppBrowser”
  • cordova-plugin-leanpush 0.3.1 “Cordova LeanCloud Push”
  • cordova-plugin-splashscreen 2.1.0 “Splashscreen”
  • cordova-plugin-whitelist 1.1.1-dev “Whitelist”
  • phonegap-plugin-barcodescanner 4.0.1 “BarcodeScanner”

SinaAppEngine和微信推送

由于LeanCloud不支持PHP,我也不喜欢文档式数据库,做微信推送时还是在SAE上完成了。

推荐一个PHP的微信SDK: https://github.com/dodgepudding/wechat-php-sdk 在SAE可以很好的运行。顺便说一个坑:一定要先 $we->getRev()以后,再执行$we->text(‘答复文字’)->replay 等操作。不然会没有任何错误提示的不返回内容。

在推送服务里边推送队列是很重要的,虽然LeanCloud这边自己会排队,但API调用时应该及时返回,所以我们应该把发送行为做成异步的,让请求尽快返回以避免阻塞。

所以这里用了SAE的TaskQueue来存放要发送的信息。SAE的队列最高可以并发16,各长度1024,算算怎么都够用了。

Screen Shot 2015-09-09 at 2.19.19 PM

在调试TaskQueue请求时,是没有办法看到页面吐出的数据的。于是我直接把数据在输出前通过Server酱发送到了手机上。终于在开发Server酱的时候用到了Server酱,这算自举么 ^_^

最后还有一个技巧就是用到了SAE的MC来做API配额控制。

比如一个用户每10秒只能发送一条消息,只需要在MC里边建立一个以用户UID为Key,10秒钟过期的记录就好了。当下次发送时,只要检查这个key是否存在即可,用起来各种方便。

关于微信消息下行,也挺多同学问的。用的是微信的「模板通知」接口,这个接口可以不受时间限制的给关注了公众账号用户通过openID发送通知,每天上限10万条。申请要求必须是「微信认证服务号」,发送消息时,有固定的模板,只能修改关键字。

用Electron开发桌面应用

这个我没做,但其实做起来非常简单,把ionic直接封进去,然后修改Cordova的接口为Electron的就好。详细的方法推荐阅读这篇文章:http://get.jobdeer.com/7870.get

到这里,你会发现其实用ionic可以把几乎所有平台的应用都做了。ionic的代码还可以直接放到微信浏览器里边,作为H5版本。真正的一次编写,到处(修改后可以)运行。

如果你在给创业项目做早期产品的话,非常建议用这个方案来试试水。

至于ionic现在的性能表现,你下载个「Server酱」客户端,随着消息的增多,就能亲身体会到啦~

 

服务器报警推送工具「Server酱」用到的云服务和开源项目