默认
发表评论 9
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] 已经返回走了丢失回调的消息紧接着又走了发送成功的回调
阅读(39193) | 评论(9 收藏 淘帖
android 端。
我发送消息,先是走了发送失败的回调,返回了消息给我,然后又提示了成功发送(消息的确发送成功)。
[已回复] 已经返回走了丢失回调的消息紧接着又走了发送成功的回调_99999999991816.png

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

标签:MobileIMSDK
上一篇:[已解决] 求助关于MobileIMSDK聊天消息指纹码的生成以及其它疑问下一篇:[已回复]请问同一客户端,MobileIMSDK服务端推离线消息同时有别人发消息会冲突么?
推荐方案
评论 9
你这个Log看起来很诡异。

你把你的消息发送代码,完整贴给出来,我帮你看看。

消息发送的代码:
/**
     * 发送消息
     */
    private void sendMsg(String msg) {

        IMSendMsgBean sendMsgBean = new IMSendMsgBean();
        sendMsgBean.setMsgContent(msg);
        sendMsgBean.setSendTime(TimeUntils.getNowMills());
        sendMsgBean.setFromUserId(mFromUserId);
        sendMsgBean.setFromUserName(mFromUserName);
        sendMsgBean.setFromUserHeadUrl(mFromUserHeadUrl);
        sendMsgBean.setToUserId(mToUserId);
        sendMsgBean.setToUserName(mToUserName);
        sendMsgBean.setToUserHeadUrl(mToUserHeadUrl);
        sendMsgBean.setMsgTag(sendMsgBean.getSendTime()+"-"+random());

        upMsgTime = sendMsgBean.getSendTime();

        new LocalDataSender.SendCommonDataAsync(new Gson().toJson(sendMsgBean), getToUserId()) {
            @Override
            protected void onPostExecute(Integer code) {
                if (code == 0) {
                    mEtEditMsg.setText("");
                    sendMsgBean.setMsgOwnAccount(mFromUserId);
                    sendMsgBean.setMsgOtherAccount(mToUserId);
                    sendMsgBean.setIsRead(true);//已读
                    sendMsgBean.saveAsync().listen(new SaveCallback() {
                        @Override
                        public void onFinish(boolean success) {
				mAdapter.addData(newMsg);

       				 //如果当前屏幕最下边的item是最后五个,则滑动到底部,否则不滑动
       				 if (mLayoutManager.findLastVisibleItemPosition() >= (mAdapter.getItemCount() - 5)) {
         				rvScrollTobottom();//滑动到底部
      				 }
                        }
                    });
                } else {
                    Logger.d("数据发送失败。错误码是:" + code + "!");
                }
            }
        }.execute();

    }


--------------
消息未送达的监听就是用的 SDK 中的 MessageQoSEventImpl 类了
引用:暄落 发表于 2020-09-24 15:36
消息发送的代码:
[mw_shl_code=java,true]/**
     * 发送消息

发送代码,看起来没有问题。

你把你截图上的log完整复制到一个文本文件里,不要截图,我要看到完整内容,包括log的时间。
数据错误.rar (852 Bytes , 下载次数: 0 )
这是其中一条的消息内容。
我们做了离线缓存,逻辑是:如果接收方不在线,则消息缓存在服务器端,等待接收方上线之后,将缓存的消息推给接收方。
这个问题出现的状况是在:
接收方不在线       -   发送方发送消息
                            ↓
接收方连接网络   -   发送方继续发送消息。
                            ↓
出现文件中的情况。
引用:暄落 发表于 2020-09-24 16:06
这是其中一条的消息内容。
我们做了离线缓存,逻辑是:如果接收方不在线,则消息缓存在服务器端,等待接 ...

你说的“发送方继续发送消息”:
1)发送方指的是发送消息的客户端?
2)如果1)指的是客户端,那客户端如何时知道对方不在线?
引用:JackJiang 发表于 2020-09-24 23:21
你说的“发送方继续发送消息”:
1)发送方指的是发送消息的客户端?
2)如果1)指的是客户端,那客户 ...

是指的发送消息的客户端,
客户端发送后,由服务端处理是否在线,不在线就进行离线缓存
引用:暄落 发表于 2020-09-25 08:53
是指的发送消息的客户端,
客户端发送后,由服务端处理是否在线,不在线就进行离线缓存

“接收方连接网络   -   发送方继续发送消息。”
》这个逻辑是怎么实现的?为什么不直接存离线,让对方上线后,通过htttp拉取?
引用:JackJiang 发表于 2020-09-25 11:17
“接收方连接网络   -   发送方继续发送消息。”
》这个逻辑是怎么实现的?为什么不直接存离线,让对方 ...

我们用的是推的方法,今天看到了您昨天的回复,现在正在改为拉的方式试一下
引用:暄落 发表于 2020-09-25 11:24
我们用的是推的方法,今天看到了您昨天的回复,现在正在改为拉的方式试一下

嗯嗯 一定要跟着主流的技术方法走,不然就会走弯路,因为你现在想的就是大家已经走过的弯路
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部