分享下最近做推送工具用到的开源项目、云服务和遇到的坑

2015-09-09 15:56:38 +08:00
 easychen

最近做了一个推送工具( 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 做产品界面和本地功能

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

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

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 ,算算怎么都够用了。

在调试 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 酱」客户端

3983 次点击
所在节点    程序员
13 条回复
janxin
2015-09-09 18:32:43 +08:00
ionic 目前虽然也在用,但是 web 下库的大小绝对坑……
youxiachai
2015-09-09 22:48:44 +08:00
@janxin 你这个问题。。。用 ionic 一般都是做客户端吧。。。
easychen
2015-09-09 23:05:00 +08:00
@janxin 可以永久缓存上… 然后就快了
airyland
2015-09-09 23:38:42 +08:00
赞 正准备折腾 ionic
teannnn
2015-09-09 23:43:11 +08:00
楼主,你是我的偶像
oojiayu
2015-09-10 00:23:35 +08:00
@teannnn 偶像~ 楼主是一个做事情有规划也有很强的执行力的人~ 你也可以做到~
janxin
2015-09-10 07:56:05 +08:00
@youxiachai 因为 lz 提到了 web 开发....
janxin
2015-09-10 07:56:30 +08:00
@easychen 第一次会很坑,缓存肯定要加
hantsy
2015-09-10 08:23:37 +08:00
一般推送直接用 WebSocket 就行了。
hantsy
2015-09-10 08:26:52 +08:00
ionic 现在很成熟了。大约一年前我们在项目中使用了,感觉必须是新机最新系统才比较流畅,也会遇到一些诡异的 Web 问题。
easychen
2015-09-10 09:18:05 +08:00
@hantsy
Websocket 也没法推 iOS 的 push 啊,还不能常驻后台。
ionic 毕竟依赖于浏览器,性能始终不会到 90 分以上,再往上就看 react native 的成长了。
hantsy
2015-09-10 10:06:54 +08:00
@easychen React native 有 Android 支持了吗?最初好像只有 IOS 支持。如果它 IOS 和 Android 是分开的 API 有什么意义,它做工作也就翻译成原生 API ,还不如直接用原生方式开发。
easychen
2015-09-10 10:37:20 +08:00
@hantsy 如果按时间表是 10 月发布。如果你考虑到 React 本身可以做 Web APP 的话。 React Native 就只是换掉个模板而已。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/219401

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX