Bigheart 2014-12-10
经过对百度&友盟&极光&AVOS这几家的iOS推送的文档研读,demo试用,综合上述四者整理出一份简洁的功能需求要点。
添加应用页面
页面上应有上传p12证书和设置密码的功能。(分别为开发环境和正式环境)
AVOS和百度要求证书必须不设密码,但因为使用到的开源库的要求,还是应该要求设置密码。
其中友盟支持的证书格式为pem和p12两种,其他都只支持p12,为简单起见我们只支持p12。
页面上应该有链接来提示用户如何生成证书,这样显得比较友好。
应用设置&详情页面
展示了应用的一些数据,如AppKey,创建时间等。并能重新上传证书和设置密码。以及各平台的一些元数据,各平台的元数据是否在同一个页面展示有待商榷,下面只关注iOS的元数据。
Bundle ID(iOS) :这是从p12证书解析得到的,展示给用户可以提示用户设置好对应的Bundle ID。
APNS推送环境(iOS)的状态:
开发环境: ${status}
生产环境: ${status}
其中status的取值范围是:未上传,已验证,验证失败。
上传的证书很有可能是不符合要求的,比如:
验证的流程是使用该证书来尝试连接APNS服务,如果连接成功表示通过验证。
其中已验证或者验证失败的情况应该出现一个刷新按钮,可通过点击该按钮来尝试重新验证。
最好能给用户准确的错误提示,显得更有诚意,因为一开始在证书方面难免出错。
最后有一个保存按钮,点击则更新数据。
发送APNS推送页面
此页面用来发送推送消息。主要元素如下:
发送应用内消息推送页面(可选)
目前只有极光实现了应用内消息推送,这是为了弥补APNS的局限,这里也一并介绍,后续考虑实现。
应用内发送的优点有以下几点:
另外以下摘自极光文档:
应用内消息:为了保证推送的可靠性,JPush SDK 提供了应用内消息,当应用打开后可以直接从JPush server 获取推送消息。此消息不经过 APNS 服务器。
如果只需要发送通知,则可以忽略应用内消息的处理。对于两种消息的代码处理可以参考API部分的描述。
APNS
应用内消息
推送原则
每次推送都会发给APNS 服务器发送经由APNS服务器下发到手机。
每次推送都会尝试发送,如果用户在线则立即发送。
离线消息离线消息由APNS服务器缓存按照apple的逻辑处理。用户不在线JPush server 会保存离线消息。离线消息保留5条。是否有APNS生产和开发环境区别。
是,只有证书和应用环境匹配才可以收到。
否,应用内消息与iOS 环境这是状态无关。
接收方式
应用退出,后台或者是打开是都会收到APNS
需要应用打并与jpush 建立连接,然后接收离线消息和在线消息。
展示效果
如果应用后台或退出,会以系统通知方式展现。
如果应用处于打开状态,不展示。
默认不展示。
处理函数
didReceiveRemoteNotification
networkDidReceiveMessage
发送页面跟发送APNS消息相比有以下不同之处,其他地方都一样:
统计 & 定时消息 & 历史消息页面
统计页面大同小异,这里不赘述。
因为App的功能需要,最近一直在调研苹果的APNs推送,开始时觉得超麻烦,现在感觉还是比较easy,“难者不会,会者不难”,自己踩过了这么多的坑终于会了,不出来吐槽(装X)一下对不起自己,23333。