如何在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功能系列文章:

之一离线消息常见浅析

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

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

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

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

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

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

时间: 2025-01-04 05:47:15

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

如何在App中实现IM功能之四创建稳健的消息发送模块——箭扣科技Arrownock

如何在App中实现IM功能 之四 创建稳健的消息发送模块 anIM聊天是以心跳的方式保持设备和服务器之间的在线连接,有时候会因为网络或其他原因导致连接中断,则在该设备登录的用户在服务器端会自动下线.那么此时发送消息的话,服务器会返回用户已经下线的异常,导致消息无法发送成功. 为了避免这个问题的发生,我们可以在代码中使用一些技巧来解决. 1. 设置变量 设置一个全局变量isFromSendMsg为false. private boolean isFromSendMsg = false; 2. 判断

如何在App中实现IM功能之五快速实现图片接收和发送——箭扣科技Arrownock

如何在App中实现IM功能 之五 快速实现图片接收和发送 社交App中,用户聊天发送或接收图片,是一个非常常见的场景,这里给大家介绍如何利用Arrownock的anSocial的Photo API与anIM结合,来实现发送和接收图片. 发送端详情 当发送方选择好图片点击发送时,为了不影响用户聊天过程中的体验,我们一般会将消息先插入到sqlite数据库中,刷新界面,给这条消息加上Loading动画,表示发送中.而这背后的操作为了能够节省流量的消耗,开发时因为图片往往比较大,所以并不是直接将图片的二

如何在App中实现IM功能之二快速实现离线消息模块——箭扣科技Arrownock

如何在App中实现IM功能 之二 快速实现离线消息模块 一个App在实际使用聊天功能的时候,并非是一直呆在一个界面的,在等待好友发消息来的同时,有可能已经跳转到其他界面,也有可能切换到其他App. 在当前的App进入后台.好友发来消息时,需要给设备推送一条消息.以安卓为例,收取离线消息通知需要绑定anPush,具体做法是调用anIM.bindAnPushService(anID, AppKey, anPushType). 在App进入后台时,调用anIM.disconnect():在App回到前

如何在App中实现IM功能之三快速实现离线消息推送模块——箭扣科技Arrownock

如何在App中实现IM功能 之三 快速实现离线消息推送模块 推送是社交功能里最常见的功能之一,许多使用IM++平台的开发者都会用到,本节我们将为大家带来如何使用IM++平台快速实现离线推送. 使用过Arrownock产品的开发者应该知道,如果要实现离线消息推送在Android设备上有4个步骤,iOS设备上有3个步骤. Android的步骤是: l anIM.connect,anPush.register,anPush.enable,anIM.bindAnPushService iOS的步骤是:

如何在App中实现朋友圈功能之二快速实现用户信息的自定义——箭扣科技Arrownock

如何在App中实现朋友圈功能 之二 快速实现用户信息的自定义 自我关联社交元素: anSocial中很多的社交元素API,如帖子(Post).相册(Album).文件(File)等,这些API的可选参数中允许传入其他社交元素的id. 当我们传了这些id时,服务器数据库里保存的是id,但是在返回结果里,会将这些id以对象的形式返回. 这样就大大提升了查询效率,原本需要查询两次的功能,现在可以一次实现,比如接下来要说的用户头像功能开发里可以利用的字段. 用户头像: 当我们在APP上创建用户,需要调用

如何在App中实现朋友圈功能之五点赞、评论属性详细解析——箭扣科技Arrownock

如何在App中实现朋友圈功能 之五 点赞.评论属性详细解析 快速查看评论和点赞数量: 当我们创建一个墙贴后,这个墙贴会自动带有评论数量commentCount.赞数量likeCount.讨厌数量dislikeCount三个属性. 当有用户对这个墙贴进行了评论,该墙贴的commentCount属性会自动增长,无需开发者来手动操作实现. 如果用户建立的Like中like=true,那么likeCount会自动增长,反之,dislikeCount会自动增长. 如果用户把评论删除了,或者是把点赞撤销了,

如何在App中实现朋友圈功能之七快速实现上拉加载朋友圈功能——箭扣科技Arrownock

如何在App中实现朋友圈功能 之七 快速实现上拉加载朋友圈功能 逻辑分析: 取出缓存postList里的最后一条数据postList a. 如果lastPost存在,说明缓存里有数据,接着取出数据库中与lastPost时间最接近的一条latestPost,以它们的created_at作为关键查询条件,去服务器取limit条(比如10)数据: 1. 如果服务器返回的Post数量大于0,将Post存入数据库,之后需要做两个查询动作: 查询出新的Like和Comment:根据本地数据库里的最新一条Li

如何在App中实现朋友圈功能之一朋友圈实现原理浅析——箭扣科技Arrownock

如何在App中实现朋友圈功能 之一 朋友圈实现原理浅析 微信朋友圈.新浪微博.知乎等知名朋友圈类型功能,大家有没有想过其实现的逻辑呢? 本文以微信朋友圈功能为例,解析实现逻辑. 朋友圈的结构: 朋友圈从总体上来说会分为6块结构,分别是墙.用户.图片.墙贴.评论与点赞. 墙:一块公共的墙,所有的墙贴都位于其上,如果APP只实现朋友圈功能,那么墙贴其实是可以不用的,但是如果APP要实现朋友圈.新闻圈等等其他各种墙贴类型消息的话,那么墙就显得很有必要了,这时候我们需要通过建立不同的墙来展示不同类型的墙

如何在App中实现朋友圈功能之三快速实现双向好友功能——箭扣科技Arrownock

如何在App中实现朋友圈功能 之三 快速实现双向好友功能 在社交APP的使用中,用户相互添加好友是一个必要的场景,本期技术分享在这里给大家介绍如何利用AnSocial的Friend来实现微博粉丝和微信好友机制. 微博粉丝机制: 微博是一个单向的好友关系链,从单个用户出发,他拥有关注者和粉丝.利用Friend可以实现以下场景:用户A关注了B,用户C关注了A,即B拥有粉丝A,A拥有粉丝C. 具体实现方式: 用户A关注B,调用新建Friend(friends/add.json),参数中target_f