iOS10 推送完整剖析和注意事项

2020-01-18 16:35:40王旭

3.如果注册成功,则可以在 AppDelegate.m 的如下方法中获取到 deviceToken,它是对 该手机+该App 组合的一个唯一标识,当使用远程推送时,只需将推送消息发给指定的 deviceToken 即可使推送信息传达给指定手机的指定 App 上。因此如果你使用第三方,就需要在这个方法里将 deviceToken 传给第三方。(在 iOS 9 为了更好的保护用户隐私,会出现多次重复删除/安装 App 导致 deviceToken 不断变化的情况。有时会出现一条推送手机会收到 2 次的问题,属于 iOS 9 系统问题)。


 -(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
   [JPUSHService registerDeviceToken:deviceToken];//将 deviceToken 传给极光推送
 }

4.如果以上步骤均成功,此时你能够取到第三方提供的设备注册 id。能否取到该 id 值,可以作为判断设备是否能够成功推送的标准(见 Tip 6 - Registration ID)。因为当你取到该值时必然:

推送证书配置正确(你拥有了推送权限)。
设备成功在 APNs 注册并返回了 deviceToken(APNs 能识别你的设备了)。
返回 的 deviceToken 传给第三方,成功在第三方生成了唯一标识注册 id(第三方能将你的设备信息传给 APNs 了)。

5.综上,注册及接收推送必须使用真机,必须连网。

Tip 4:推送通知从 服务端 --> App 代码 的过程

1.使用你们公司或第三方的服务端向 APNs 发送推送请求(请参考苹果 APNs 相关资料,或者第三方推送提供了更简单的 REST API)。
2.APNs 接收并验证推送请求。
3.APNs 找到设备下发推送。
4.手机收到推送通知,系统根据 App 状态进行处理:
前台收到:
系统会将通知内容传到 didReceiveRemoteNotification
后台收到:
如果开启了 Remote Notification ,系统将推送传到 didReceiveRemoteNotification:fetchCompletionHandler:(见 Tip 5 - 后台推送),否则此时代码中收不到推送。
展示横幅、通知中心、声音、角标。
退出收到:
如果点击推送横幅/通知中心而启动 App,系统将通知传到 didFinishLaunchingWithOptions。
展示横幅、通知中心、声音、角标。

推送通知内容篇

Tip 5:推送通知分为 本地/远程 2 种类型:

本地通知,可指定推送时间,在该时间准时弹出推送通知。
远程推送通知,分为 普通推送/后台推送/静默推送 3 种类型。存在延迟问题(由于 Tip 1 第 2 点,APNs 的不稳定及高峰时段的巨量请求所致)。
    普通推送
      就是我们在手机上平时见到的推送通知。
     包含声音、横幅、角标、自定义字段。