iOS 推送(APNs)

iOS 的离线提醒通过 Apple Push Notification service(APNs)投递:IM 服务端在用户离线时把通知交给 APNs,APNs 推送到设备;客户端负责申请通知权限、上报 deviceToken、决定前台是否展示,以及点击通知后跳转到对应会话。

链路与职责

服务端:持有 APNs 证书或 Auth Key(.p8),按 deviceToken 投递;推送内容由消息触发。

客户端:申请权限 → 拿到 deviceToken → 调用 IMLib 推送令牌接口登记 → 处理前台 / 后台 / 点击三类回调。

IMLib 不直接连接 APNs:推送投递由服务端完成,客户端只负责令牌登记与展示策略。

能力地图​

主题内容文档
APNs 集成开启 Push Notifications 能力、注册远程通知、拿到 deviceToken集成 APNs
令牌登记`registerPushToken` / `getPushTokens` / `unregisterPushToken`,多设备与换绑推送令牌登记
前台展示前台收到通知是否展示、当前会话去重、声音与角标前台通知处理
后台与静默`content-available` 静默推送、后台补收、系统节流后台与静默推送
角标未读总数计算、清零时机、多端一致角标(badge)
排障权限、环境、证书、deviceToken 失效的排查顺序推送排障

客户端生命周期​

Text
App 启动
  → UNUserNotificationCenter.requestAuthorization(首次弹权限)
  → UIApplication.registerForRemoteNotifications()
  → didRegisterForRemoteNotificationsWithDeviceToken(拿到 APNs token)
  → client.registerPushToken({ platform: "ios", token, deviceId, appVersion })
  → 服务端离线时经 APNs 投递通知
  → didReceiveRemoteNotification / willPresent(前台)
  → 用户点击 → 打开会话(本地历史 + 云端补齐)

与 IMKit 的配合​

  • IMKit 会话页正在展示的会话收到推送时不弹系统通知(避免重复打扰),只更新未读与角标。
  • 免打扰会话(level=2)不展示通知与红点,但保留未读数(见「免打扰」页)。
  • 点击通知进入会话后调用 `clearUnreadCount` 清零,并同步角标。
模拟器限制

iOS 模拟器从 Xcode 14 起支持本地通知,但远程 APNs 推送仍需真机验证;文档中的推送链路以真机为准。