当前使用腾讯云产品 即时通信IM离线推送功能的用户越来越多,在使用的过程中,难免遇到一些问题,这里就整理了一些常见case,供各位网友参考,如果不对之处,也请谅解!
1.关于即时通信IM中的用户的3种状态
- “Online”:客户端登录后和即时通信 IM 后台有长连接
- “PushOnline”:iOS 和 Android 进程被 kill 或因网络问题掉线,进入 PushOnline 状态,此时仍然可以接收消息的离线推送。(客户端切到后台,但是进程未被手机操作系统 kill 掉时,此时状态仍是 Online。)
- “Offline”:客户端主动退出登录或者客户端自上一次登录起7天之内未登录过
服务端依赖心跳包超时来进行判断,当客户端和服务端之间持续 400 秒没有心跳包时,即时通信 IM 服务端认为该用户异常下线(Android 版本较多出现此情况)
心跳:IM SDK 每隔2分钟发一个心跳包给服务器,以维持用户的在线状态。
即时通信 IM 后台只会保存 PushOnline 状态7天时间,若从掉线时刻起7天之内未登录过,则进入 Offline 状态。
当进入PushOnline状态时,消息才会通过离线推送的通道进行投递,所以需要关注下用户的状态。
2.控制台自助排查工具
可以在控制台输入用户ID,查询下用户状态,是否为PushOnline,当是PushOnline是,进行尝试检测下
3.常见问题整理
-
登录前设置token,还是登录成功后?
登录成功后,再调用接口去上报证书id和regid,顺序不要搞反了 -
安卓应用切到后台,为什么没有收到离线消息?
1)在手机厂商的官方控制台测试是否能收到推送
2)确认手机设置是否打开接收推送的开关
3)通过sendOnlineMessage发送的消息,或者restApi发送消息的时候设置了lifetime为0
4)更改推送证书时,有10-20min延时,此期间收不到推送
5)安卓app进程退到后台,并不会马上被系统kill,im还是Online在线状态,不会有离线消息投递下来;
将进程kill掉、或断网掉线持续400秒(客户端和服务端之间持续 400 秒没有心跳包时,即时通信 IM 服务端认为该用户异常下线),用户状态转为PushOnline,此时有离线消息投递下来;
即时通信 IM 后台只会保存 PushOnline 状态7天时间,若从掉线时刻起7天之内未登录过,则进入 Offline 状态。
使用辅助工具定位下:
https://console.cloud.tencent.com/im-detail/tool-push-check -
安卓应用切到后台,没kill掉时,如何让消息弹出提醒
应用切到后台,为Online状态,客户端和IM后台有长连接,消息会通过新消息接口触发onNewMessages,需要开发者在应用层判断当前是在前台还是后台,在后台时就弹出通知栏。 -
iOS用苹果官网推送可以收到离线消息,但是app发的离线消息收不到?
说明获取token没问题,有可能上报token错误、或者证书错误。
比较常见的原因是:
ios开发环境、生成环境用的证书不同,请先确认上报的是哪个环境的证书,容易弄混
苹果官网的证书过期、密码错误等原因 -
集成华为离线推送,为什么注册token时总是提示6003
指纹证书配置不一致,参考:
https://developer.huawei.com/consumer/cn/doc/development/HMS-References/push-ErrorEnum4
简单讲就是:必须用release包运行,才能注册token成功。这个release包的签名文件,必须是开通华为离线推送服务时填入的证书指纹。
1、检查是否在华为开发者联盟上配置了正确的证书指纹。
2、如果检查都正确,请联系华为方支持人员。 -
安卓点击通知栏,可以跳转到指定页面吗
可以的,参考文档:
https://cloud.tencent.com/document/product/269/35000#.E6.89.93.E5.BC.80.E5.BA.94.E7.94.A8.E5.86.85.E6.8C.87.E5.AE.9A.E7.95.8C.E9.9D.A2 -
通知栏显示离线消息,点击打开应用,进入到会话界面,怎么获取到这个离线消息?
离线推送的消息,不会触发onNewMessages,进入会话界面时,通过拉取漫游消息进行获取并进行ui展示。 -
已退出登录的用户,是否可以收到离线消息?
对于已经退出登录(主动登出或者被踢下线)的用户,不会收到任何消息通知。 -
系统消息是否可以通过离线推送通知?
目前,离线推送只提供 普通聊天消息 进行消息提醒,暂不提供对 系统消息 的消息提醒。 -
为什么有的群组消息收不到离线推送?
a.确认 TIMGroupReceiveMessageOpt 是否为关闭免打扰的状态:ReceiveAndNotify;
b.群组类型为聊天室(ChatRoom),音视频聊天室(AVChatRoom),广播大群(BChatRoom) 是不支持离线推送的; -
离线推送定位工具提示:“证书有误”
检查控制台证书配置的AppID、AppSecret信息是否配置的和对应厂商推送后台显示的信息是否一致 -
小米手机收到离线消息,点击后未打开应用?
1)是否有onNotificationMessageClicked配置打开应用
2)获得的intentUri,通过小米推送后台下发,能否打开自定义界面 -
安卓通知栏,可以定制样式吗,比如排版、图标、提示音等
暂时还不支持,只能根据系统默认的样式,其中小米是支持的,但也比较有局限性,具体参考小米官方离线推送文档。云通信sdk还在优化中,后续会考虑支持 -
iOS使用定位工具,显示:成功推送,但无法接收
按照提示检查设备通知功能是否开启 -
iOS端提示:接收方没有上报证书ID
可以检查下上报的证书ID是否正常。
确认正常可以看下证书环境是否正常。 -
iOS如何实现跳转指定页面
做消息跳转需要先了解点击推送触发的几个方法,可以参考下网上的文章:
https://juejin.im/post/5b4f0828e51d45195423c585
点击推送触发的几个方法如上,每个用户的需求都是不一样的,跳转指定页面需要业务侧自行实现,可以在推送扩展字段EXT携带信令
https://cloud.tencent.com/document/product/269/2720#.E8.87.AA.E5.AE.9A.E4.B9.89.E6.B6.88.E6.81.AF.E5.85.83.E7.B4.A0
举例说明: A给B发送了消息,ext携带了消息类型和发送方ID, B应用处于后台或者杀死状态 收到了离线通知,点击对应通知跳转到聊天页面
4.各平台错误码
(1) 服务端错误码参考(小米开放平台)
https://dev.mi.com/console/doc/detail?pId=1557
(2)错误码(华为推送服务)
https://developer.huawei.com/consumer/cn/doc/development/HMS-References/push-ErrorEnum4
https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/push-faq-v4#h1-1577153305362-0
(3)错误码参考(vivo开放平台)
https://dev.vivo.com.cn/documentCenter/doc/226
(4)错误码参考(oppo推送平台)
https://storepic.oppomobile.com/openplat/resource/201910/18/OPPO%E6%8E%A8%E9%80%81%E5%B9%B3%E5%8F%B0%E6%9C%8D%E5%8A%A1%E7%AB%AFAPI-V1.9.3.pdf
5.参考文档链接
IM产品概述
离线推送介绍
离线推送faq
收不到推送时,如何排查问题?
IMSDK离线推送
如有整理不对之处,还望指出,以便更改!