在app的后端设计中,免不了消息的推送,短信,邮件等服务,下面就个人的开发经验谈谈这方面。

(1)最重要的是,各种推送一定要放在队列系统中处理,不然会严重影响api的响应时间。

(2)短信方面

以前我们是用亿美软通的短信服务,但在三大运营商收紧了短信服务后,亿美软通的短信延迟非常厉害,后来我们找到了这家短信服务商 http://luosimao.com,这家发送短信到联通,电信,移动手机很快就到了(直到2014.01.24)。

如果发送到移动的短信还没有改善,最后的后备方案:发送到联通,电信的短信使用国内的服务商,发送到移动的短信就只能使用国外的短信服务商(国外发短信到移动手机3毛一条,好贵啊!!!)

注:现在sharesdk提供了免费的短信验证码服务(http://mob.com/sms),试运营期间为开发者提供每个App每天10000条免费短信验证。

(3)邮件

在一开始时使用服务器自身的postfix发送邮件的,但我们发现邮件被很多邮件服务商当成垃圾邮件了,而且没有重发机制,不能保证邮件的准确到达。

后来查了一下各大网站,发现知乎和github 都是使用http://www.mailgun.com/ 的邮件服务,看了一下文档,价格很公道,而且每月有1万封的免费邮件额度,非常适合创业型的公司。

(4)推送服务

在这方面,我考虑的重点是:在创业初期,能用第三方就尽可能多使用第三方的服务,自身只处理业务逻辑本身,快速的开发产品。

android篇:

android方面,我们使用过3种消息推送机制:

1.极光推送,现在放弃了。我们使用的过程中,发现极光的机制有点古怪,一般来说,一个app在极光服务器中是固定一个id,但在极光中是通过广播来通知app这个id,而且在文档中居然说明这个id会不定期变化。

2.openfire服务器。app通过连接openfire服务器来获取各种消息,但是openfire有个机制,当app连接openfire后空闲就自动断开,没法保持连接的的稳定性,而修改这个openfire的机制成本太高了,后来也放弃使用openfire。

3.百度推送。已现在使用一段时间的情况来说,推送及时快速,挺满意百度的推送服务。

iphone篇:

apns是iphone推送的不二选择。但如果自身开发apns的服务,会遇到无效token而需要重发,这样需要维护一个队列并建立重发机制,考虑到项目的时间和研发成本,最后也是使用了百度推送的服务。

当用户在iphone上卸载了app后,device token会失效,所以应该定期访问苹果的feedback服务器,把无效的token去掉。

app后端系列文章总目录

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

修改记录:

2014.01.24:短信服务提供商现在3大运营商很快就收到了。

2014.12.05:增加了sharesdk的免费短信验证码信息

如果您觉得这系列的文章对你有所帮助,欢迎打赏。

支付宝账号:190678908@qq.com 收款人:曾健生

[文章作者]曾健生

[作者邮箱]h6k65@126.com

[作者QQ]190678908

[新浪微博] @newjueqi

[博客]http://blog.csdn.net/newjueqi

http://blog.sina.com.cn/h6k65

版权声明:本文为博主原创文章,未经博主允许不得转载。

app后端设计(3)--短信,邮件,推送服务(2014.12.05更新)的更多相关文章

  1. (转)短信vs.推送通知vs.电子邮件:app什么时候该用哪种方式来通知用户?

    转:http://www.360doc.com/content/15/0811/00/19476362_490860835.shtml 现在,很多公司都关心的一个问题是:要提高用户互动,到底采取哪一种 ...

  2. app后端设计(11)-- 系统架构(2014.12.05更新)

    个人认为,在小型的创业团队中,特别是以应用产品为主,在架构后台的时候,需要集中精力解决自身业务上的问题,不是花时间解决第三方已经解决的问题,简单点来说,就是能用第三方服务就使用第三方的服务.基于这个原 ...

  3. 解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题

    在博问中(.net core怎么实现邮件发送)知道了MailKit无法使用阿里云邮件推送服务发送邮件的问题,自已实测也遇到同样的问题,而用自己搭建的邮件服务器没这个问题. 于是,向阿里云提交了工单.. ...

  4. Laravel 下结合阿里云邮件推送服务

    最近在学习laravel做项目开发,遇到注册用户推送邮件的问题,之前用java做的时候是自己代码写的,也就是用ECS推送邮件,但是现在转php的laravel了就打算用php的邮件发送功能来推送邮件, ...

  5. wordpress使用阿里云邮件推送服务实现发送邮件

    之前用腾迅云时,配置了wordpress是可以使用邮件服务的,然而到了阿里云,却无法使用了,有人说是因为阿里云关了25端口,但腾迅好像也关了. 百度看看有没有其他方法,最终让我找到个方法,可惜不是很完 ...

  6. python 阿里云短信群发推送

    本篇文章是使用Python的Web框架Django提供发送短信接口供前端调用,Python版本2.7 阿里云入驻.申请短信服务.创建应用和模板等步骤请参考:阿里云短信服务入门 1.下载sdk 阿里云短 ...

  7. java-阿里邮件推送服务开发 -- 发送邮箱验证码

    参考文档: 如何在 DNS 服务器上配置域名:https://help.aliyun.com/knowledge_detail/39397.html?spm=5176.2020520150.102.d ...

  8. app后端设计--总目录 (转)

    特此说明,我转载的!!! app后端设计(1)--api app后端设计(2)--xmpp的使用 app后端设计(3)--短信,邮件,推送服务 app后端设计(4)-- 通讯的安全性 app后端设计( ...

  9. app后端设计--总目录

    做了3年app相关的系统架构,api设计,先后在3个创业公司中工作,经历过手机网页端,android客户端,iphone客户端,现就职于app云后端平台bmob(想了解bmob点击这里).其中的乐与苦 ...

随机推荐

  1. IP封包的封装 - 首部内容

    IP 封包的封装 目前因特网社会的 IP 有两种版本,一种是目前使用最广泛的 IPv4 (Internet Protocol version 4, 因特网协定第四版), 一种则是预期未来会热门的 IP ...

  2. Cocoa公历和中国农历直接的转换

    看过某书上面的做法是先生成一个公历的calendar,使用的是: NSCalendar *cal = [NSCalendar currentCalendar]; 然后用它生成一个NSDateCompo ...

  3. ubunut在系统恢复模式下无法修改root密码的分析和解决

    前些日子本猫的ubuntu 14.10貌似出了点问题,想修改下root密码,但是无奈原系统有错正常情况下无法修改啊,这是逼我重装的节奏吗? 在ubuntu开机后立即按住left_shift不放,调出g ...

  4. 关于并发下内存及CPU使用情况的思考

    鉴于昨天的文章<<使用Interlocked在多线程下进行原子操作,无锁无阻塞的实现线程运行状态判断>>里面有一个封装好的无锁的类库可以判断并发下的结束状况,我们可以完成并发时 ...

  5. Map 遍历分析

    1. 阐述 对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多.理由是:entrySet方法一次拿到所有key和value的集合:而keySet拿到的 ...

  6. weblogic上服务器建立

    weblogic上服务器建立

  7. java四大特性理解(封装继承多态抽象)

    封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口.面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治.封装的对象,这些对象通过一个受保护的接口访问其他对象.封装是一 ...

  8. Centos 7 卸载自带的openjdk

    [root@localhost ~]# rpm -qa|grep jdk java-1.6.0-openjdk-1.6.0.0-1.50.1.11.5.el6_3.x86_64 java-1.7.0- ...

  9. android传值

    需求 OneActivity向TwoActivity传值name=hzs,然后TwoActivity向OneActivity传值sex=Y 第一步:OneActivity向TwoActivity传值n ...

  10. get请求URL的转码

    String name = new String(json.getString("name").getBytes("iso8859-1"),"UTF- ...