经过对百度&友盟&极光&AVOS这几家的iOS推送的文档研读,demo试用,综合上述四者整理出一份简洁的功能需求要点。
添加应用页面
页面上应有上传p12证书和设置密码的功能。(分别为开发环境和正式环境)
AVOS和百度要求证书必须不设密码,但因为使用到的开源库的要求,还是应该要求设置密码。
其中友盟支持的证书格式为pem和p12两种,其他都只支持p12,为简单起见我们只支持p12。
页面上应该有链接来提示用户如何生成证书,这样显得比较友好。
应用设置&详情页面
展示了应用的一些数据,如AppKey,创建时间等。并能重新上传证书和设置密码。以及各平台的一些元数据,各平台的元数据是否在同一个页面展示有待商榷,下面只关注iOS的元数据。
Bundle ID(iOS) :这是从p12证书解析得到的,展示给用户可以提示用户设置好对应的Bundle ID。
APNS推送环境(iOS)的状态:
开发环境: ${status}
生产环境: ${status}
其中status的取值范围是:未上传,已验证,验证失败。
上传的证书很有可能是不符合要求的,比如:
- 当前上传的p12证书密码输入有误;
- 证书导出的时候展开了证书,把个人私钥导了出来,导证书的时候请不要展开证书;
- 当前上传的证书环境不对,如:在上传开发证书的地方上传了生产证书;
- 该证书已在本账号的其它应用使用;
- 现上传的证书与当前应用已上传成功的证书的bundle id不一致。
验证的流程是使用该证书来尝试连接APNS服务,如果连接成功表示通过验证。
其中已验证或者验证失败的情况应该出现一个刷新按钮,可通过点击该按钮来尝试重新验证。
最好能给用户准确的错误提示,显得更有诚意,因为一开始在证书方面难免出错。
最后有一个保存按钮,点击则更新数据。
发送APNS推送页面
此页面用来发送推送消息。主要元素如下:
- 文本框:推送文本,alert字段的内容。AVOS支持json格式的编辑模式。
- 消息剩余字节提示:因为APNS消息有长度限制,限制为256字节,如果编辑发送消息时有任何的对于消息的改动,都要刷新这个提示,如果大于限制,则不允许发送,另外判断长度需采用UTF-8编码。
- 所见即所得的slider:跟Android版本类似,具体可参考极光的做法。
- 推送环境:一组check box,分为开发环境和正式环境,用来选择向哪个环境发送推送。极光还有Android和WinPhone选项,是否把发送页面整合到一起还有待商榷。
- 推送对象:分为广播,标签,指定用户(device token)。此外极光和友盟还支持设备别名(Alias),极光支持Registration ID,如有必要后续也可加上。
- 发送时间:为分即使和定时,不赘述。
可选设置 - 过期时间:单位待定,指定推送的过期时间。如果给关机或者断掉网络的设备推送,那么APNS会把消息暂存起来,如果消息过期,APNS则丢弃,如果有多条离线消息,则APNS会保存最新的一条。此外最新协议可设置消息的优先级,APNS使用这个优先级来判断应该保留哪一条离线推送而不是简单的保存最后推送的那条,不过现在没有竞品支持这一选项。
- sound:设置提示音效。
- badge:设置app icon上的红色数字。另外极光支持badge+1功能,详情参考:http://blog.jpush.cn/ios_apns_badge_plus/,另外AVOS也支持这个功能,后续有必要也可实现。
- slient_push & content-available(可选):只有极光支持,详情参考:http://docs.jpush.cn/display/dev/iOS+7+Background+Remote+Notification。
- 附加:用来设置用户自定义的key&value值,用来实现用户自己的业务逻辑,多添加多个。
发送应用内消息推送页面(可选)
目前只有极光实现了应用内消息推送,这是为了弥补APNS的局限,这里也一并介绍,后续考虑实现。
应用内发送的优点有以下几点:
- 突破256字节的限制,不过也有迂回的方式,比如AVOS就支持推送时顺便上传个小文件,把这个小文件的下载地址推送给用户进行后续处理。
- 支持更多的离线消息,APNS只支持1条。
- 推送速度,特别是网络部分也许更快更稳定。因为可以自己定义。
另外以下摘自极光文档:
应用内消息
应用内消息:为了保证推送的可靠性,JPush SDK 提供了应用内消息,当应用打开后可以直接从JPush server 获取推送消息。此消息不经过 APNS 服务器。
APNs消息与应用内消息对比
如果只需要发送通知,则可以忽略应用内消息的处理。对于两种消息的代码处理可以参考API部分的描述。
|
APNS |
应用内消息 |
---|---|---|
推送原则 | 每次推送都会发给APNS 服务器发送经由APNS服务器下发到手机。 | 每次推送都会尝试发送,如果用户在线则立即发送。 |
离线消息 | 离线消息由APNS服务器缓存按照apple的逻辑处理。 | 用户不在线JPush server 会保存离线消息。离线消息保留5条。 |
是否有APNS生产和开发环境区别。 | 是,只有证书和应用环境匹配才可以收到。 | 否,应用内消息与iOS 环境这是状态无关。 |
接收方式 | 应用退出,后台或者是打开是都会收到APNS | 需要应用打并与jpush 建立连接,然后接收离线消息和在线消息。 |
展示效果 | 如果应用后台或退出,会以系统通知方式展现。 如果应用处于打开状态,不展示。 | 默认不展示。 |
处理函数 | didReceiveRemoteNotification | networkDidReceiveMessage |
发送页面跟发送APNS消息相比有以下不同之处,其他地方都一样:
- 应用内消息不会自动触发UI方面的提示,所以没有所见即所得的slider,slient_push & content-available,sound和badge。
- 没有开发和生产环境之分,所以没有推送环境。
统计 & 定时消息 & 历史消息页面
统计页面大同小异,这里不赘述。