如何在App中实现IM功能之四创建稳健的消息发送模块——箭扣科技Arrownock
2015-10-27 11:02
225 查看
如何在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功能系列文章:
之一离线消息常见浅析
之二快速实现离线消息模块
之三快速实现离线消息推送模块
之四创建稳健的消息发送模块
之五快速实现图片接收和发送
之六快速实现群聊的高级功能
之七快速实现聊天列表排序模块
相关文章推荐
- 微信开发之、自定义菜单(测试)
- 如何在App中实现IM功能之三快速实现离线消息推送模块——箭扣科技Arrownock
- Android TextView中文字设置超链接、颜色、字体
- Android异常信息统计
- no dialect mapping for jdbc type:-9
- 在fragment中使用ViewPager:java.lang.IllegalStateException: Observer android.support.v4.view.ViewPager$
- 如何在App中实现IM功能之二快速实现离线消息模块——箭扣科技Arrownock
- CocoaPods的使用
- Android 最火的快速开发框架androidannotations配置详解
- Android AndroidStudio开发全部套件百度网盘下载
- ios如何将model转换成NSDictionary
- Android 实现图片轮播的三种方法
- 移动端页面开发的“坑”
- Tips:获取 APP 的 Launch Image
- iOS应用程序的生命周期
- ios ShareSDK 分享、登陆功能的实现
- ios 跳转传值 dismiss 回来 报错
- android studio集成微博出现错误multiple dex file define Lcon/sina/sso/RemoteSSO解决方法
- 关于获取ios系统版本号 与 获取iphone设备型号的相关代码搜集
- IOS中延时执行的几种方式的比较和汇总