客户端新注册用户收到了全部历史消息

kaito 4月前 273

后端使用野火im发送活动通知消息给安卓/ios客户端用户,可以指定用户id,发送消息,现在有个问题,给已经注册后的指定用户发消息都能接收到,但是新注册的用户一登陆系统,就有很多历史消息发过来,但是我没有给新注册的用户发过消息

最新回复 (10)
  • x86 4月前
    引用 2
    是不是你们注册逻辑有问题,新注册用户,其实用了之前的用户 id?
  • kaito 4月前
    引用 3
    这个肯定不会的,id是唯一自增的,用户删除也是逻辑删除
  • HeavyRain 4月前
    引用 4
    野火的消息机制是每个用户(实际上是个用户ID,可以不注册用户,也可以给这个ID发消息)都有一个消息队列,当有消息分发给这个用户时,就在这个用户的队列上添加一个记录。当客户端连接上或者收到消息通知时,会发起同步操作,带上客户端本地的位置,把服务器上指定位置之后的新消息同步下来。野火有个配置是是否支持漫游,如果支持漫游,会把自己最近的几千条消息同步下来,如果不支持漫游,会把最近5分钟的消息同步下来。

    从这个野火的消息分发和同步机制来看,如果之前给这个用户id发过消息,就不可能同步下来历史消息的
  • HeavyRain 4月前
    引用 5
    这个队列保存在数据库的t_user_messages_y中,是128个分表的,分表方法请参考 https://gitee.com/wfchat/im-server/blob/wildfirechat/sdk/src/main/java/cn/wildfirechat/sdk/Main.java 中的 testMessageSharding 方法,找到表后检查这个用户id是否有记录
  • kaito 4月前
    引用 6
    这2个表中可以查到我新注册的用户id的消息记录,也就是客户端一注册就会生成这些消息记录,但是我并没有给这些新用户发过这些消息,这些消息是怎么产生的
  • kaito 4月前
    引用 7
    t_messages_7表中的时间_dt 都是今天相同的时间, _content_type 为1008, 我的客户端发消息都有指定用户conversation.setTarget,但是新注册的用户会收到本来没有发给过他的消息,或者在哪里能看到这些消息的属性,是否有可能是广播形式的消息

    下面是客户端发送的代码

        public IMResult<SendMessageResult> sendCustomMessage(String senderId, MessageDTO messageDTO) throws Exception {
            Conversation conversation = new Conversation();
            conversation.setTarget(messageDTO.getTargetId().toString());
            conversation.setType(ProtoConstants.ConversationType.ConversationType_Private);
            MessagePayload payload = new MessagePayload();
            payload.setType(messageDTO.getType());
            payload.setContent(messageDTO.getContent());
            IMResult<SendMessageResult> result = MessageAdmin.sendMessage(senderId, conversation, payload, null);
            if (result == null || result.getErrorCode() != ErrorCode.ERROR_CODE_SUCCESS) {
                log.error("MessageServiceImpl.sendTextMessage failed:senderId = {},messageDTO = {}", senderId, JSON.toJSONString(messageDTO));
            }
            return result;
        }
  • HeavyRain 4月前
    引用 8
    kaito t_messages_7表中的时间_dt 都是今天相同的时间, _content_type 为1008, 我的客户端发消息都有指定用户conversation.setTarget,但是新注册的用户会收 ...
    这个代码是发单聊消息的,是一对一的消息。

    你可以查一下消息的发送者是谁,还有查一下消息的时间
  • kaito 4月前
    引用 9
    我们这一块就是使用的一对一消息,后台管理系统中指定给一些用户发送消息,使用循环的方式给这些指定的用户发送消息
  • kaito 4月前
    引用 10
    消息的时间全部都是相同的
  • HeavyRain 4月前
    引用 11
    看看发送者是谁,再根据时间检查一下调用的日志,肯定是你们自己发的,im服务不会自己发消息的
返回