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 未读消息总数设置为角标。
  • 如果想自定义角标,可按照如下步骤设置:
    1. App 调用 - (void)setAPNSListener:(id<V2TIMAPNSListener>)apnsListener 接口设置监听。
    2. 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博客

 

posted @   Niskae  阅读(1861)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示