ios苹果推送-APNS
2017-07-03 16:20
323 查看
什么是远程推送通知
顾名思义,就是从远程服务器推送给客户端的通知(需要联网)远程推送服务,又称为APNs(ApplePush Notification Services)
为什么需要远程推送通知
传统获取数据的局限性 只要用户关闭了app,就无法跟app的服务器沟通,无法从服务器上获得最新的数据内容远程推送通知可以解决以上问题 不管用户打开还是关闭app,只要联网了,都能接收到服务器推送的远程通知
远程推送通知使用须知
所有的苹果设备,在联网状态下,都会与苹果的服务器建立长连接 什么是长连接 只要联网了,就一直建立连接长连接的作用 时间校准 系统升级 查找我的iPhone ..
...
长连接的好处 数据传输速度快 数据保持最新状态
推送原理
苹果推送其实就是借助了苹果的APNS来推送的。步骤:
1:向apns请求注册通知,需不需要要进行通知发送。(一般都在didFinishLaunchingWithOptions方法里)
2:请求完毕,apns同意,返回给你token,(代码是didReceiveRemoteNotification方法,如果是第三方,则把token传给第三方保存,如果是你们自己写的,则传给你们的服务器保存。)
3:现在要发通知了:服务器把token和消息一起发送给apns,apns根据token查找对应的设备,然后发送。
4:当设备已接收到远程通知,
* 程序运行状态,:调用application:didReceiveRemoteNotification:方法
* 当程序处于后台或者被杀死状态,当你进入(aunch)程序时:调用application:didReceiveRemoteNotification:fetchCompletionHandler:来处
理你需要做的事情,比方:除了badge、保存数据、发送消息、弹框等等。
总:apns就是一个中转站,你的所有的消息不是直接发送,需要经过apns这个中转站倒手才能发送过去。
具体图例
根据图片我们可以概括一下:
1、应用程序注册APNS消息推送。
2、ios从APNS
Server获取devicetoken,应用程序接收device token。
3、应用程序将device token发送给程序的PUSH服务端程序。
4、服务端程序向APNS服务发送消息。
5、APNS服务将消息发送给iPhone应用程序。
问题
1:Device token for an iPhone device生成之后就永远不变吗?
不是,if a device is wiped (应该是重装系统),
it will get a new device token.
官方网站是这样写的: If
the user restores backup data to a new device or computer, or reinstalls the operating system, the device token changes
正是因为device有可能改变,所以建议在app start时(即在didFinishLaunchingWithOptions
里)调用registerForRemoteNotificationTypes来获取device
token以检查device token是否改变,如果改变了就应该把新token传给push provider。(官方描述:An application should register every time it launches and give its provider the current token)
device token应该存储在NSUserDefaults来达到新旧比较的目的
那么旧device token在push provider对应的record怎么办?
方案1:把旧device token send to provider and request delete record
方案2:使用apns feedback
service。
方案2可能更好些,因为总是需要使用apns feedback service来处理用户在device里删除app的情况。
调用registerForRemoteNotificationTypes方法后,成功注册后,APNS就会返回一个device
token,然后回调delegate methoddidRegisterForRemoteNotificationsWithDeviceToken,
如果注册失败,则回调delegate method didFailToRegisterForRemoteNotificationsWithError。
注意:
* 在第一次调用registerForRemoteNotificationTypes方法时没有联网,则既不会调用didRegisterForRemoteNotificationsWithDeviceToken,也不会调用didFailToRegisterForRemoteNotificationsWithError
*在第一次调用registerForRemoteNotificationTypes注册成功后,之后即使没有联网,再调用registerForRemoteNotificationTypes时都会以最上一次的device
token作为参数回调didRegisterForRemoteNotificationsWithDeviceToken方法。
其他
准备证书类的工作都是一样的,可以查看这个连接
友情链接 http://www.51testing.com/html/46/249846-857789.html
相关文章推荐
- IOS 苹果推送 APNS(一)
- [IOS开发] 苹果推送机制APNs(一)
- IOS 苹果推送 APNS(二)
- iOS 苹果推送(APNS)注意事项
- 苹果推送(APNs)ios push小结
- APNS IOS PHP 苹果推送
- IOS学习笔记—苹果推送机制APNs
- IOS学习笔记41——苹果推送机制APNs(二)
- IOS学习笔记40——苹果推送机制APNs(一)
- IOS学习笔记34——苹果推送机制APNs(二)
- iOS:苹果推送(APNS)-pem/p12证书的生成
- 苹果iOS APNS消息推送通知
- IOS学习笔记—苹果推送机制APNs
- IOS学习笔记40——苹果推送机制APNs(一)
- 苹果推送(APNs)ios push小结
- IOS学习笔记40——苹果推送机制APNs(一)
- [IOS开发]苹果推送机制APNs(二)
- IOS 苹果推送 APNS(三)
- iOS 设备通过 java-apns 组件实现苹果 APNs 消息推送实现
- PHP实现 苹果IOS APNS服务器推送消息