最近做了一个推送工具( https://www.v2ex.com/t/218958#reply37 ),这里分享下用到的云服务和开源项目吧。
对于绝大部分移动客户端而言,推送功能是非常重要的用户到达和唤醒工具。但在 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 酱」客户端
1
janxin 2015-09-09 18:32:43 +08:00 via Android
ionic 目前虽然也在用,但是 web 下库的大小绝对坑……
|
2
youxiachai 2015-09-09 22:48:44 +08:00
@janxin 你这个问题。。。用 ionic 一般都是做客户端吧。。。
|
4
airyland 2015-09-09 23:38:42 +08:00
赞 正准备折腾 ionic
|
5
teannnn 2015-09-09 23:43:11 +08:00
楼主,你是我的偶像
|
7
janxin 2015-09-10 07:56:05 +08:00
@youxiachai 因为 lz 提到了 web 开发....
|
9
hantsy 2015-09-10 08:23:37 +08:00
一般推送直接用 WebSocket 就行了。
|
10
hantsy 2015-09-10 08:26:52 +08:00
ionic 现在很成熟了。大约一年前我们在项目中使用了,感觉必须是新机最新系统才比较流畅,也会遇到一些诡异的 Web 问题。
|
11
easychen OP |