您好,请问 offlinepeers 是什么意思?
如果使用的是实时通信服务,Android 应用进入后台后还处在运行当中,需要您在 onMessage 中写逻辑代码,判断如果此时应用在后台,就弹出通知。

是我们在leancloud后台日志中看到的,发消息会有日志说明会话中哪些用户离线

这里有两个问题:
1、offlinepeers 应该是您公司自己写的,和消息推送没有直接关系。
2、客户端收不到离线消息通知
实时通信在 Android 中的离线消息通知的逻辑是:
Android 应用进入后台后还处在运行当中,需要您在 onMessage 中写逻辑代码,判断如果此时应用在后台,就弹出通知。

现在的问题是,安卓和iOS同时登录一个用户以后,都切换到后台,iOS收到消息不出现在offlinepeers,我们是在hook中判断如果在offlinepeers中才回发送push。

也就是说安卓登录后,leancloud认为这个用户始终在线。如何解决

安卓登录后,leancloud认为这个用户始终在线

如果安卓的应用没有被杀掉,那么这个应用就一直在运行状态,代表着这个用户还在登录。除非主动调用 close 方法或者应用被杀掉,那么这个用户是一直处在在线状态的。

您可以讲一下现在具体需求是什么, offlinepeers 的逻辑是怎么写的,在哪个 hook 中实现的什么逻辑。

我们希望的是,即使是安卓和ios同时登录一个用户,进入后台的时候都能在offlinepeers中,都能收到push

如果两者有其一在线,那么我们就会认为这个用户是在线的。
如果两者都不在线,我们才会认为这个用户是不在线的。
至于 offlinepeers ,不知道你们是怎么写的?

onlinePeers offlinepeers是你们维护的吧,我们是在云引擎的日志中看到的

这个应该是您自己维护的,请您检查一下云引擎的相关代码。

messageSent 和receiversOffline 这两个hook中有offlinepeers,我们没有修改过。

抱歉,如果是这两个 Hook 的话,其中的 offlinepeers 确实是我们维护的。
逻辑像刚才说的:
如果两者有其一在线,那么我们就会认为这个用户是在线的。
如果两者都不在线,我们才会认为这个用户是不在线的。

其实消息的推送完全可以这样做,不需要自己再通过 Hook 发一遍 push:
Android 应用进入后台后还处在运行当中,在 onMessage 中写逻辑代码,判断如果此时应用在后台,就弹出通知。
iOS 使用离线消息通知:
https://leancloud.cn/docs/realtime_v2.html#离线推送通知3

现在就是这样做的,但是不能满足要求,还是不方便,你再重新看一遍最初的描述

Android 进入后台后,由于 App 还在运行中,相当于这个用户还在线,所以 offlinePeers 不会有这个安卓用户。这个是安卓自身的机制造成的。
如果您希望安卓手机进入后台后像 iOS 一样推送通知,可以在 onMessage 中写逻辑代码,判断如果此时应用在后台,弹出通知。

我们希望的是安卓收到消息以后,ios也能收到push

安卓收到消息以后,ios也能收到push

两个设备登录的是同一个 ClientID?
如果是登录的同一个 ClientID,只要安卓的应用没有被杀掉且用户没有主动退出登录,我们就认为这个用户是在线的,就不会给 iOS 推送消息。

您可以在安卓应用进入后台之后手动调用 close 方法退出登录,同时 iOS 也在后台,我们就会认为这个用户离线了,offlinePeers 里面就会有这个用户了。

那安卓就收不到通知了,我们希望安卓和ios同时在线,并且同时收到通知

我看不太懂您的需求,请描述下具体的需求场景。
一个 ClientID 同时登录安卓和 ios 两个设备?
两个设备应用都进入后台的时候,收到消息时弹出通知?
两个设备其中一个都进入后台的时候,收到消息时弹出通知?

希望
两个设备应用都进入后台的时候,收到消息时弹出通知。