没有比这里更全的了,看我就好了
面试官 :你是否了解apple-app的消息推送机制?
iOS中消息推送分为两大类:一:本地推送(不讲解),二:远程推送。
远程推送机制:
一:获取设备的deviceToken
当应用启动时候,我们可以注册远程推送(registerForRemoteNotifications方法)向苹果的APNS服务器请求deviceToken。(请求成功回调方法didRegisterForRemoteNotificationsWithDeviceToken执行)。
deviceToken是app安装到手机上的唯一标志符,由deviceID,bundleid和安装时的相关信息生成的。一个app在不同设备上deviceToken不一样,app的升级操作deviceToken不变,卸载重装app后deviceToken会发生变化。
二:将deviceToken保存到本地,并且发送给自己的服务器保存使用
一般将获取到的二进制的deviceToken转为16进制的字符串存储在本地,并发送给自己的服务器保存使用。
三:推送消息
当需要推送消息的时候,自己的服务器将需要推送的消息和deviceToken组合成一定的格式发送到APNS。APNS验证deviceToken和数据格式成功,APNS将推送消息推送到指定到客户端app。
面试官 :你是否了解APNS中的双层信任机制?
APNS采用双层信任机制,连接信任和deviceToken(令牌)信任。
连接信任:服务器与APNS之间,APNS与设备之间。
服务器与APNS之间的连接信任:
一:基于令牌(JWT: Json Web Tokens)的连接信任。
二:基于证书(推送证书)的连接信任。
1,服务器通过TLS向APNS请求连接,
2,APNS返回给服务器一个APNS证书,
3,服务器发送推送证书给APNS,
4,APNS验证推送证书是否正确,如果正确,则服务器与APNS建立信任连接,此时服务器就可以向APNS发送推送消息了。
APNS与设备之间的连接信任:
APNS与每个设备之间的连接时自动建立的,不需要app做什么。
面试官 :如何保证推送消息的准确性呢?
一个设备可能登陆多个用户,或者一个用户在多个设备上登录过,那么这种情况怎么保证推送消息的准确性。
当我们需要给不同用户推送不同消息的时候,除了保存deviceToken之外,还因该保存用户ID与deviceToken的映射关系。我们可以在用户登陆成功后的时机更新用户ID与deviceToken的映射关系,用户推出后取消映射关系,只保存用户最后登陆的deviceToken,避免一个设备收到多个重复通知和一个用户在不同设备收到多个通知的情况。