码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-12-02 14:47:24      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:箭扣科技 arrownock im 即时通讯

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

之一离线消息常见浅析

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

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

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

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

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

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



本文出自 “箭扣科技Arrownock” 博客,转载请与作者联系!

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

标签:箭扣科技 arrownock im 即时通讯

原文地址:http://arrownock.blog.51cto.com/10638334/1718798

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!