嗯,我又写工具玩了。以前报警邮件收不到的时候就嚷着要写个推送工具,后来换Slack用得还不错,但再后来国内各种访问不到。想起来自己需要的也不是特别多。无非就是个消息推送工具而已嘛。
正好有同学放出了LeanCloud的PUSH插件,所以就用ionic写了一个,叫做「Server酱」大概是这样工作的:
在 V2EX的同学们的建议 下加了微信支持,然后用起来就非常顺滑了,开通只要一分钟:
更多说明请访问官方网站:http://sc.ftqq.com/,这里重点说说用到的云服务和开源项目吧。
对于绝大部分移动客户端而言,推送功能是非常重要的用户到达和唤醒工具。但在Hybrid APP的解决方案里边,Cordova一直没有国内能用的推送插件。之前JobDeer做APP时,我们是自己用Parse的SDK改了一个LeanCloud的插件出来用,本来正考虑要不要改改开源了,发现已经有同学做的挺不错了,于是就直接用了。
https://github.com/BenBBear/cordova-plugin-leanpush
这个插件的说明已经写的挺细致了,按部就班来就可以。温馨提示三点:
这次客户端推送主要用的是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 最近成长了不少,已经可以非常方便的完成漂亮的产品界面的。
用下来有几个地方需要注意:
由于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,算算怎么都够用了。
在调试TaskQueue请求时,是没有办法看到页面吐出的数据的。于是我直接把数据在输出前通过Server酱发送到了手机上。终于在开发Server酱的时候用到了Server酱,这算自举么 ^_^
最后还有一个技巧就是用到了SAE的MC来做API配额控制。
比如一个用户每10秒只能发送一条消息,只需要在MC里边建立一个以用户UID为Key,10秒钟过期的记录就好了。当下次发送时,只要检查这个key是否存在即可,用起来各种方便。
关于微信消息下行,也挺多同学问的。用的是微信的「 模板通知 」接口,这个接口可以不受时间限制的给关注了公众账号用户通过openID发送通知,每天上限10万条。申请要求必须是「微信认证服务号」,发送消息时,有固定的模板,只能修改关键字。
这个我没做,但其实做起来非常简单,把ionic直接封进去,然后修改Cordova的接口为Electron的就好。详细的方法推荐阅读这篇文章: http://get.jobdeer.com/7870.get
到这里,你会发现其实用ionic可以把几乎所有平台的应用都做了。ionic的代码还可以直接放到微信浏览器里边,作为H5版本。真正的一次编写,到处(修改后可以)运行。
如果你在给创业项目做早期产品的话,非常建议用这个方案来试试水。
至于ionic现在的性能表现,你下载个「Server酱」客户端,随着消息的增多,就能亲身体会到啦~