请选择 进入手机版 | 继续访问电脑版

默认
发表评论 1
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已解决] 如何判断MobileIMSDK发送失败的消息是具体到哪一条?
Jack Jiang您好,我们最近的项目也想集成您的IM框架,但是有一个问题想不明白,我观察demo中的发送样例代码,在postexecute中只有errorcode回来,那如果多条消息发送失败了,lostmessages中也回调了发送失败的消息指纹,但是我如何拿这些指纹码和我那些发出去的消息一一对应。这个疑问是我在思考实现“将发送失败的消息使用感叹号标识为发送失败”的需求时遇到的,就是说我刚刚发出去的消息是没有指纹的,那我就算等下拿到了一条指纹,我也不能确定这个指纹是不是来自刚刚发送的那条消息,特别是在多条消息一起发送的情况下。

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

demo中的发送样例

demo中的发送样例
上一篇:对MobileIMSDK移动端sdk做了flutter封装代码分享下一篇:mobileimsdk 基于react native和java springboot的开发

本帖已收录至以下技术专辑

推荐方案
评论 1
我理解你的困惑了。你可以自已为每条消息生成指纹码(实际上当你不指定消息批评纹码时,sdk层会自已生成),并保存到你的全局消息数据模型中,回过来头来,你也就能通过指纹码反查到你刚才这条消息的数据对象了。

下面这段是RainbowChat中发送文本消息的代码,你参考一下:
    /**
     * 将指定的图片消息发送给聊天中的好友(异步方式).
     * <p>
     * 说明:安卓2.3及以后系统中规定:发送网络数据须在单独的线程中。
     * </p>
     *
     * @param message 文本消息,如果该文本为null或空字符串则不会真正执行发送过程
     * @return code:0 表示发送成功,否则错误码
     * @see #sendMessageAsync(Activity, int, String, String, String, Observer)
     */
    public static void sendPlainTextMessageAsync(final Activity activity
            , final String friendUID, final String message, final Observer sucessObsExtra)
    {
        // 先生成指纹码
        final String fingerPring = Protocal.genFingerPrint();

		// 消息指令通过网络发送成功后要通知的观察者
		Observer sendSucessObs = new Observer() {
			@Override
			public void update(Observable o, Object arg) {

				// 消息发送成功后,将此消息数据放到聊天列表的数据模型中(让UI进行显示)
				ChatDataHelper.addChatMessageData_outgoing(activity, friendUID
						, MessageExt.createChatMsgEntity_OUTGO_TEXT(message, fingerPring));

				// 消息发送调用者的额外要做的事
				if(sucessObsExtra != null)
					sucessObsExtra.update(null, null);
			}
		};

		// 调用真正的消息指令发送方法
        sendMessageAsync(activity, MsgBody4Friend.TYPE_TEXT, friendUID, message, fingerPring, sendSucessObs);
    }

评分

1

查看评分

签名: 《深入操作系统,一文读懂进程、线程、协程》http://www.52im.net/thread-3357-1-1.html
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部