IM即时通信中的离线推送
1. 即时通信IM(instant message)中的用户的3种状态
“Online”(在线):客户端登录后和即时通信 IM 后台有长连接,在线推送消息。此时客户端在前台运行,或者客户端切到后台,但是进程未被手机操作系统 kill 掉,此时状态仍是 Online。
“PushOnline”(离线):iOS 和 Android 进程被 kill 或因网络问题掉线,进入 PushOnline 状态,此时可以接收消息的离线推送。
“Offline”(未登录):客户端主动退出登录或者客户端自上一次登录起7天之内未登录过。(此时接收不到IM的在线或离线推送,除非使用系统消息,通过识别客户端设备号进行离线推送。)
服务端依赖心跳包超时来进行判断,以腾讯云为例,当客户端和服务端之间持续 400 秒没有心跳包时,即时通信 IM 服务端认为该用户异常下线(Android 版本较多出现此情况)
心跳:IM SDK 每隔2分钟发一个心跳包给服务器,以维持用户的在线状态。
即时通信 IM 后台只会保存 PushOnline 状态7天时间,若从掉线时刻起7天之内未登录过,则进入 Offline 状态。
2. Android离线推送
即时通信 IM 的终端用户需要随时都能够得知最新的消息,而由于移动端设备的性能与电量有限,当 App 处于后台时,为了避免维持长连接而导致的过多资源消耗,即时通信 IM 推荐您使用各厂商提供的系统级推送通道来进行消息通知,系统级的推送通道相比第三方推送拥有更稳定的系统级长连接,可以做到随时接受推送消息,且资源消耗大幅降低。
这里的离线(PushOnline)是指在没有退出登录的情况下,应用被系统或者用户关闭。在这种情况下,如果还想收到 IM SDK 的消息提醒,可以集成即时通信 IM 离线推送。对于已经退出登录(主动登出或者被踢下线)的用户,不会收到任何消息通知。
当客户端 App 在即时通信 IM 没有退出登录的情况下被系统或者用户 kill 时,即时通信 IM 服务端会将其他帐号发来的消息通过厂商的通道推送下去。
2.1 常见问题说明
(1)安卓应用切到后台,没kill掉时,如何让消息弹出提醒
应用切到后台,为Online状态,客户端和IM后台有长连接,消息会通过新消息接口触发onNewMessages,需要开发者在应用层判断当前是在前台还是后台,在后台时就弹出通知栏。
(2)通知栏显示离线消息,点击打开应用,进入到会话界面,怎么获取到这个离线消息?
离线推送的消息,不会触发onNewMessages,进入会话界面时,通过拉取漫游消息进行获取并进行ui展示。
(3)已退出登录的用户,是否可以收到离线消息?
对于已经退出登录(主动登出或者被踢下线)的用户,不会收到任何消息通知。
3. IOS离线推送
在 App 退后台或者进程被 kill 的情况下,有新消息需要提醒用户时,可使用离线推送功能,在 iOS 端会有 APNs 推送。(Android 端则需要用户注册离线消息回调)
iOS APNs 推送,推送格式说明
上图为一条单聊消息和一条群聊消息的示例。
对于单聊消息,APNs 推送规则如下,其中昵称是发送方用户昵称,如果未设置昵称,则只显示内容。
昵称:内容
对于群聊消息,APNs 推送规则如下,其中名称展示优先级为消息发送者的群名片
>群昵称
,如果都没有,则不展示。
名称(群名):内容
自定义角标
- 默认情况下,当 APP 进入后台后,IMSDK 会将当前 IM 未读消息总数设置为角标。 如果想自定义角标,可按照如下步骤设置:
- App 调用
- (void)setAPNSListener:(id<V2TIMAPNSListener>)apnsListener
接口设置监听。 - App 实现
- (uint32_t)onSetAPPUnreadCount
接口,并在内部返回需要自定义的角标。 - 如果 App 接入了离线推送,当接收到新的离线推送时,App 角标会在基准角标(默认是 IM 未读消息总数,如果自定义了角标,则以自定义角标为准)的基础上加 1 逐条递增。
自定义离线推送展示
请在调用 sendMessage 发送消息的时候设置 offlinePushInfo 的title
和 desc
字段,其中 title
设置后,会在默认的推送内容上多展示 title
内容,desc
设置后,推送内容会变成 desc
内容。
自定义离线推送点击跳转逻辑
请在调用 sendMessage 发送消息的时候设置 offlinePushInfo 的ext
字段,当用户收到离线推送启动 APP 的时候,可以在 AppDelegate -> didReceiveRemoteNotification
系统回调获取到 ext
字段,然后根据 ext
字段内容跳转到指定的 UI 界面。
参考链接:
即时通信 IM 产品概述 - 产品简介 - 文档中心 - 腾讯云 (tencent.com)
即时通信 IM 离线推送 - 产品简介 - 文档中心 - 腾讯云 (tencent.com)
使用腾讯云即时通信IM离线推送过程中经常遇到的一些问题_YK-CSDN博客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!