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

如何在App中实现IM功能

之四

创建稳健的消息发送模块

anIM聊天是以心跳的方式保持设备和服务器之间的在线连接,有时候会因为网络或其他原因导致连接中断,则在该设备登录的用户在服务器端会自动下线。那么此时发送消息的话,服务器会返回用户已经下线的异常,导致消息无法发送成功。

为了避免这个问题的发生,我们可以在代码中使用一些技巧来解决。

1. 设置变量

设置一个全局变量isFromSendMsg为false。 private boolean isFromSendMsg = false;

2. 判断用户是否在线

当点击界面的发送消息按钮时,首先判断用户是否在线。如果在线,则直接发送消息。如果不在线,则先登录再发送消息。

    //如果用户离线则先登录再发消息
    if (anIM.getCurrentStatus() == AnIMStatus.OFFLINE) {
        refreshUIView(); // 先刷新界面
        //登录
        anIM.connect(clientId);
        //将全局变量设置为true,意味着登录后马上发送消息,不走登录其他流程
        isFromSendMsg = true;
        } else {
            anIM.sendMessage(clientIds,msg);
        }
     }

3. 登录判断

登录的时候通过全局变量来判断这次登录是否需要立即发送消息。如果是,发送消息前把全局变量改回去。

    @Override
    public void statusUpdate(final AnIMStatusUpdateCallbackData data) {
        if (isFromSendMsg && data.getStatus() == AnIMStatus.ONLINE) {
        isFromSendMsg = false;
        anIM.sendMessage(clientIds, msg);
        } else {
            //正常的登录流程
        }
    }

4. 界面处理的技巧

点击发送消息按钮的时候,立即将数据存入数据库,刷新一次界面,用Loading动画来表示。当发送消息成功后,再修改一次数据,刷新一次界面,去掉Loading动画。

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

之一离线消息常见浅析

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

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

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

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

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

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

时间: 2024-09-29 16:43:10

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

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

如何在App中实现IM功能 之七 快速实现聊天列表排序模块 一台设备由于用户的使用习惯差异,可能导致设备的时间和实际收发消息的时间不同,这里与大家分享利用anIM收发消息时,如何根据数据中的msgId和timestamp来进行排序. 实现逻辑 发消息时,我们需要调用anIM的sendMessage方法(同类方法还有sendBinary, sendMessageToTopic等等),这个方法有一个返回数据为messageId,即当前这一条聊天消息的唯一标识,我们需要将这个messageId保存下来

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

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

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

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

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

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

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

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

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

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

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