Background Remote Notification 消息详细解读

iOS 的通知一般需要点击了通知栏消息才会走对应的方法,才可以取到消息内容!仅点击 icon 这个操作不会走任何获取消息的方法

  • 如果需要在不点击通知栏的情况下,可以获取到消息内容,可以推送 Background Remote Notification
    这类消息的规则是:

    • 客户端需要处于Background 或 Suspended 状态, 被杀死后无法调起该方法

    • 如果是推送 Silent Remote Notifications 消息,不保证成功,在 Apple 那边有频率控制,具体情况不详。

    • 该类消息被收到后,Background 方法就会被调用,获得信息内容。

    • 如果你在完全按照说明配好了客户端和服务端后,收到消息时并没有走 Background 方法,那么一般是 iOS 系统问题、Apple 服务器下发消息的问题。(因极光 apns 消息只是对原生方法的封装,最终消息由 Apple 服务器下发,iOS系统直接展示)。如果在配好后,连上 xcode 会走方法,断开 xcode 后不走方法,请根据 本帖末尾客户端的配置说明检查客户端的设置

    • 点击了展示该消息的通知栏,会再次调用 Background 方法。

    • 点击了图标 这个操作并不会 再次调用 Background 方法。

  • 经官方 @aoyy 测试结果如下 :

推送的时候怎么设置 content-available

  • 官网-控制台-推送-发送通知-目标平台选择iOS平台-下翻,点可选设置,即可看到选项,勾选即可
  • 服务端 API-Notification-iOS 里有字段 content-available。json 示例如下:
    {
      "platform": "all",
      "audience": {
          "tag": ["深圳"]
      },//注意 audience 不要传成了字符串
      "notification": {
          "android": {
              "alert": "Hi, JPush!",
              "title": "Send to Android"
          },
          "ios": {
              "alert": "Hi, JPush!",
              "sound": "default",
              "badge": "+1",
              "content-available": true, //此处设置 content-available
              "extras": {
                  "newsid": 321
              }
          }
      },
      "options": {
          "time_to_live": 6000,//离线保存时间,单位是 秒
          "apns_production": false //注意环境问题,false 代表开发环境
      }
    }

注:客户端也必须同步配置才会有效,请阅读上述链接中的详细说明!

有必要勾选 background modes >remote Notification的选项(或可能还需要勾选 background fetch ),通知设置会增加 后台应用刷新按钮,请注意手机端不要关闭该开关

间接的方法:

  • 同时推送通知+自定义消息

  • 自定义消息前台接收,不展示,可用来传递数据

  • 自己服务端保存推送信息,进入前台后向自己的服务器去获取历史信息展示在页面上

注:如果是要在收到消息后做一点处理再展示,iOS 10 开始提供的 service extension 功能可以满足需求,阅读文档,并自行看Apple的文档研究 iOS 10 新特性如何配置。



如果对你有帮助,点个赞 呗ლ(╹◡╹ლ)

点这里返回常见问题目录,不吹不黑,收藏本帖可以解决你 90% 的问题 (ノ◕ω◕)ノଘ_ଘ