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

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

     App :
          处于前台,不会展示横幅,可通过 didReceiveRemoteNotification(iOS 7 before)didReceiveRemoteNotification:fetchCompletionHandler:(iOS 7 after)获取通知内容(前台展示横幅的方法看这里)。
           处于后台,会展示横幅,无法获取通知内容。
           处于退出,会展示横幅,无法获取通知内容。
          点击图标启动,无法获取通知内容。
          点击通知横幅启动,在 didFinishLaunchingWithOptions 获取通知内容。
    通知内容类似如下:


{
 "_j_msgid" = 200806057; // 第三方附带的 id,用于统计点击
 aps =   {
  alert = "显示内容";
  badge = 1; // App 角标,可推送 n、+n、-n 来实现角标的固定、增加、减少
  sound = default; // 推送声音,默认系统三全音,如需使用自己的声音,需要将声音文件拖拽&拷贝至 Xcode 工程目录任意位置,并在推送时指定其文件名
 };
 key1 = value1; // 自定义字段,可设置多组,用于处理内部逻辑
 key2 = value2;
}

后台推送

各种显示效果跟普通推送完全一样。
必须携带 "content-available" = 1;
必须携带 alert、badge、sound 中 至少 1 个字段。
仅 iOS 7 以后支持。
必须在 Xcode 工程中 TARGETS - Capabilities - Background Modes - Remote notifications 开启该功能。

App:

处于前台,可通过didReceiveRemoteNotification(iOS 7 before)didReceiveRemoteNotification:fetchCompletionHandler:(iOS 7 after) 获取通知内容。
处于后台,可通过 didReceiveRemoteNotification:fetchCompletionHandler: 获取通知内容 // 获取情况中与普通推送的唯一不同点,此时 iOS 系统允许开发者在 App 处于后台的情况下,执行一些代码,大概提供几分钟的时间,可以用来偷偷的刷新 UI、切换页面、下载更新包等等操作。
处于退出,无法获取通知内容。
点击图标启动,无法获取通知内容。
点击推送横幅启动,在 didFinishLaunchingWithOptions 获取通知内容。

通知内容类似如下:


{
 "_j_msgid" = 2090737306;
 aps =   {
  alert = "显示内容";
  badge = 1;
  "content-available" = 1; // 必带字段
  sound = default;
 };
 key1 = value1;
}

​静默推送
没有任何展示效果。
必须携带 "content-available" = 1;,因此静默必然是后台的。
必须不携带 alert、badge、sound。
可携带自定义字段。