APNS稳定性及成功率并不是那么高。大型app可以采用两种渠道提高通知用户的成功率。比如后面会讲到的voip Push的使用一般就是结合local Push使用。
Local Push比APNS更加灵活。参数更加多样。
......
如何选择
因为app不总是会运行的,Local Push提供了另一种提醒用户信息的方式。比如应用在后台没有被杀死的时候,从服务端拉取数据更新,本地就可以根据服务端返回的信息,删选出是否有用户感兴趣的部分,然后组织好消息,通过本地推送告诉用户。当然也可以用远程push。但是这个时候远程push并没有本地push可靠。
Remote Push一般在应用杀死的情况下才使用。用户主动去打开app,之后请求数据。
简单总结一下,如果能够直接拿到数据最好用本地push,如果拿不到,比如说应用被杀死采用远程push。
从用户角度,这两种Push没有任何区别,具体来讲我们可以控制Push的如下形式:
显示提示框还是横幅
app icon上显示的数字
显示横幅、数字、提示框所用的提示音
特别需要注意的几点:
App在前台运行的时候,通知不会展示出来(在iOS10之后可以在userNotificationCenter:willPresentNotification:
withCompletionHandler:进行处理,满足可以在前台显示通知)
点击通知,默认会自动打开推送通知的App
不管App是否打开,通知都可以发出
可以取消本地push
可以设定本地push的自定义处理action(控制点击Push是否打开App)
上面这几点注意事项可以在在UILocalNotification Class Reference找到(最好的资料还是官方文档)
本地推送(Local Push)
Local Push是不需要走APNS,让客户端更加灵活的控制。常见的比如一款闹钟App。app本地处理好推送逻辑,然后把推送逻辑交给系统。即使当app不在前台的时候也可以由系统发出通知告知用户。
App在启动的时候就需要对本地和远程推送进行设置,也就是不能晚于application:didFinishLaunchingWithOptions:调用。官方文档上说其实也可以,只要在处理只通知之前配置过就行。
配置推送
使用Push第一步需要向用户申请权限
iOS10之后直接用下面这代码
UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];
[center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert + UNAuthorizationOptionSound)
completionHandler:^(BOOL granted, NSError * _Nullable error) {
// Enable or disable features based on authorization.
}];
注意:因为系统会保存用户的授权状态,所以下次启动的时候虽然调用了这代码,依然不会再次提示用户。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/shouji/article-74387-2.html
难喝要死
应民
我必犯人
却在这雇佣这么多水军