一般意义上说推送就是指远程推送,本地推送一般可以用来提示长时间未进入应用的用户,也可以用来做闹铃。
(一个程序可以推送,首先你要向苹果公司注册推送证书)
下面详细说一下远程推送(Remote Notification)的流程:
1.当你的程序需要推送时,通过UIApplication中的registerUserNotification注册远程推送,注册后,你的程序会通过iOS系统向APNs服务器请求,APNs服务器接到请求后会将请求设备的device token(设备令牌)发送回你的应用,在UIApplication的代理方法中可以接收到device token,如果请求失败也会通过代理方法返回错误信息
2.当应用程序拿到device token后,就可以将device token回传给应用提供商服务器,服务器就知道了这台设备可以推送消息了,然后将device token储存在服务器内部,device token的生成算法只有苹果公司才知道,所以为了防止苹果修改算法造成推送失败,最好每次启动程序时都请求一次device token,在device token发生改变时,告诉服务器新的device token
(推送一般情况下是程序提供商向用户推送一些最新的消息或者资讯,不过比如QQ,微信等可以在离线的情况下进行消息的提醒,下面以qq推送离线消息为例,相比从服务器推送,qq离线消息的推送是由客户端编辑信息的)
3.现在如果程序要推送消息了,就可以将消息和要发送的对象的账号发送给程序提供商服务器,服务器会通过你要推送的对象的账号信息找到对应绑定的device token,然后将推送消息内容和device token传给APNs服务器
4.APNs服务器在接收到消息内容和device token后会查找已注册的设备然后将对应的信息和device token推送到指定的设备上,设备通过device token中的app id找到要推送的app,然后信息会按照app的推送设置显示信息
推送流程:
deviceToken:包括appID和UDID。手机在联网状态下,与苹果有个长连接,可以生成一个deviceToken,在appdelegate的didReceiveXXX方法里和可以获取deviceToken。
APNs:苹果的推送服务器.
1.在developer.apple.com上配置推送证书(和配置发布证书一个流程):1.配证书,2注册appid.3.生成Mobileprofile文件。
2.获取deviceToken,将deviceToken和要推送的消息,发送到公司服务器,公司服务器找不到对方的手机,所以要把deviceToken和要推送的消息推给苹果的APNs,苹果根据deviceToken把消息推给用户手机上的某个app.
补充;为了减小公司服务器的压力,一般用第三方JPush(激光推送)来做。