如何在App中实现IM功能之七快速实现聊天列表排序模块——箭扣科技Arrownock

如何在App中实现IM功能

之七

快速实现聊天列表排序模块

 

一台设备由于用户的使用习惯差异,可能导致设备的时间和实际收发消息的时间不同,这里大家分享利用anIM收发消息时,如何根据数据中的msgId和timestamp来进行排序。

 

实现逻辑

发消息时,我们需要调用anIM的sendMessage方法(同类方法还有sendBinary, sendMessageToTopic等等),这个方法有一个返回数据为messageId,即当前这一条聊天消息的唯一标识,我们需要将这个messageId保存下来。

 

iOS代码为例:

    //msgId是消息的唯一标识
    NSString *msgId = [anIM sendMessage:message
    customData:customData
    toClients:clientId
    needReceiveACK:YES];

调用完sendMessage方法后,SDK会统一回调messageSent方法,这个方法里的输入参数在Android SDK中是AnIMMessageSentCallbackData,里面包含两个主要字段分别为String类型的msgId和long型的timestame,而在iOS SDK中是NSString类型的msgId和NSNumber类型的timestamp。

    (void)anIM:(AnIM *)anIM messageSent:(NSString *)messageId at:(NSNumber *)timestamp
    {
        //messageId即调用sendMessage等方法时返回的消息唯一标识
        //在这里根据messageId进行消息的判断,然后保存聊天消息数据到本地数据库
    };

收消息时,对不同类型的消息,会执行不同的方法,不管是哪个方法,方法的输入参数里都会有2个和发消息时同样的字段msgId和timestamp。

    (void)anIM:(AnIM *)anIM didReceiveMessage:(NSString *)message customData:(NSDictionary *)customData from:(NSString *)from parties:(NSSet *)parties messageId:(NSString *)messageId at:(NSNumber *)timestamp
    {
        //messageId即对方发送消息时的消息唯一标识
    }

timestamp是13位的时间戳格式,都是从服务器返回的,而不是设备本地产生的,这样就避免了因为用户本身的使用习惯而导致收发消息时的顺序错乱了。最后,根据timestamp字段进行排序,但是别忘了界面显示时需要转换一下。

 

如何在App中实现IM功能系列文章:

之一离线消息常见浅析

之二快速实现离线消息模块

之三快速实现离线消息推送模块

之四创建稳健的消息发送模块

之五快速实现图片接收和发送

之六快速实现群聊的高级功能

之七快速实现聊天列表排序模块

 


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值