说一下远程推送的流程。苹果怎么知道远程推送给哪台设备?又如何知道推送给哪个应用?
iOS远程推送通过APNs
实现。APNs
是Apple Push Notification service
的简称,它由Apple独家提供。远程推送的服务的实现依据的是服务器和客户端的长连接,信息通过服务器主动推送(push)给客户端(我们的手机)。
iOS的远程推送需要在真机上调试。使用SmartPush调试。
- 详细流程:(以今日头条为例)
1、在今日头条App的AppDelegate的didFinishLaunchingWithOptions
方法中注册远程推送通知,此时只要iOS设备正常联网能够访问到外网,iOS设备默认就会和APNs
建立长连接,就会把iOS设备的UDID(Unique Device Identifier:
唯一设备标识码,用来标识唯一一台苹果设备)和今日头条的Bundle Identifier
通过长连接发送给APNs
服务器,然后苹果通过这两个的值根据一定的加密算法得出deviceToken
,并将deviceToken
返回给iOS设备。(注:APNs服务器会留有UDID+Bundle Identifier+deviceToken
的映射表)
2、实现UIApplicationDelegate
代理中的有关于注册远程通知的相关方法,包括注册成功、注册失败、对接收到通知的处理等。
3、如果注册成功,实现注册成功的代理方法,就能够接收到deviceToken
,并将deviceToken
发送给今日头条服务器,今日头条服务器将此deviceToken
存储在数据库中(一般如果是及时通讯类应用那么还会与用户的账号进行映射)。
4、如果注册失败,那么实现注册失败的协议方法,处理失败后的事情(包括发送给今日头条服务器注册失败等)。
5、今日头条服务器接收到deviceToken
之后,就可以根据这些deviceToken
向APNs发送推送一条新闻简要消息。
6、APNs
接收到deviceToken
和新闻简要消息之后,根据deviceToken
查找映射表找到对应的UDID
和Bundle Identifier
,根据UDID
找到唯一一台苹果设备,再在找到的苹果设备上根据Bundle Identifier
找到唯一的应用(此处为今日头条),然后推送消息。
7、当设备接收到消息的时候,如果今日头条在前台也就是用户正在使用今日头条,那么不会在设备上方弹出横幅(如果使用了音效,还会触发音效的播放),直接调用我们实现的UIApplicationDelegate
中的接收消息的方法。反之如果今日头条在后台或者未运行时就会在设备的上方弹出横幅(如果使用了音效,还会触发音效的播放),点击横幅才会触发调用我们实现的UIApplicationDelegate
中的接收消息的方法,这个时候你直接点击应用图标进来是不会调用的。
网友评论