直播系统代码接入极光IM,实现即时聊天功能
随着直播系统代码的持续火热,直播间用户如何进行沟通交流就成为必须解决的问题,这时候就直播系统代码可以用到即时通讯功能。云豹科技作为优质的直播平台源码提供商,在即时聊天功能方面有着独到之处,下面为大家从解答一下即时聊天功能如何实现。
即时聊天这个需求存在于很多直播系统代码中,也是公认的技术难点。大部分网站都普遍采用http协议进行网络通信,而http协议的特点是只能由客户端主动向服务器发送消息,可是服务器无法主动向客户端发送消息。即时聊天要求服务器和客户端都可以主动发送消息,这就给实现即时聊天这个功能带来了根本上的困难。
常见的即时聊天实现方式是自建socket服务器,使用各种socket框架,编写服务端、客户端代码,其中涉及到消息发送、转发、用户在线判定、离线消息存储、未读消息提醒、会话列表、好友列表、拉黑、单点登录、并发量等问题,实现起来非常复杂,而且对开发和运维的要求非常高。
自建socket服务器的实现方式比较适合那些技术能力强,并且对即时聊天有大量自定义需求的公司。我们这里选择接入三方即时聊天服务,好处是集成简单方便,系统稳定,可靠性好,开发成本小。市面上常见的IM服务商有极光,环信,融云,腾讯等等。我们这里选择极光IM。
一、集成极光IM。
1、先登录极光官网 https://www.jiguang.cn/
2、进入控制台,并创建应用
3、创建应用成功,按照文档说明进行相应的配置
这样就完成应用的创建和配置。
4、编写android代码,集成IM
/** * 登录极光IM */ public void loginImClient(String uid) { final String imUid = getImUid(uid); JMessageClient.login(imUid, imUid + PWD_SUFFIX, new BasicCallback() { @Override public void gotResult(int code, String msg) { L.e(TAG, "登录极光回调---gotResult--->code: " + code + " msg: " + msg); if (code == 801003) {//用户不存在 L.e(TAG, "未注册,用户不存在"); registerAndLoginJMessage(imUid); } else if (code == 0) { L.e(TAG, "极光IM登录成功"); // SpUtil.getInstance().setBooleanValue(SpUtil.IM_LOGIN, true); JMessageClient.registerEventReceiver(JimMessageUtil.this); CommonAppConfig.getInstance().setLoginIM(true); //EventBus.getDefault().post(new ImLoginEvent(true)); refreshAllUnReadMsgCount(); } } }); } //注册并登录极光IM private void registerAndLoginJMessage(final String uid) { JMessageClient.register(uid, uid + PWD_SUFFIX, new BasicCallback() { @Override public void gotResult(int code, String msg) { L.e(TAG, "注册极光回调---gotResult--->code: " + code + " msg: " + msg); if (code == 0) { L.e(TAG, "极光IM注册成功"); loginImClient(uid); } } }); } /** * 登出极光IM */ public void logoutImClient() { JMessageClient.unRegisterEventReceiver(JimMessageUtil.this); JMessageClient.logout(); CommonAppConfig.getInstance().setLoginIM(false); L.e(TAG, "极光IM登出"); EventBus.getDefault().post(new ImUnReadCountEvent("0")); } /** * 获取会话列表用户的uid,多个uid以逗号分隔 */ public String getConversationUids() { List<Conversation> conversationList = JMessageClient.getConversationList(); if (conversationList != null) { List<String> uidList = new ArrayList<>(); for (Conversation conversation : conversationList) { Object targetInfo = conversation.getTargetInfo(); if (targetInfo == null || !(targetInfo instanceof UserInfo)) { continue; } List<Message> messages = conversation.getAllMessage(); if (messages == null || messages.size() == 0) { String userName = ((UserInfo) targetInfo).getUserName(); JMessageClient.deleteSingleConversation(userName); continue; } String from = getAppUid(conversation); if (!TextUtils.isEmpty(from)) { uidList.add(from); } } if (uidList.size() > 0) { Collections.sort(uidList, mUidComparator); StringBuilder sb = new StringBuilder(); for (String s : uidList) { sb.append(s); sb.append(","); } String uids = sb.toString(); if (uids.endsWith(",")) { uids = uids.substring(0, uids.length() - 1); } return uids; } } return ""; } /** * 获取会话的最后一条消息的信息 */ public List<ImUserBean> getLastMsgInfoList(List<ImUserBean> list) { if (list == null) { return null; } for (ImUserBean bean : list) { Conversation conversation = JMessageClient.getSingleConversation(getImUid(bean.getId())); if (conversation != null) { bean.setHasConversation(true); Message msg = conversation.getLatestMessage(); if (msg != null) { bean.setLastTime(getMessageTimeString(msg)); bean.setUnReadCount(conversation.getUnReadMsgCnt()); bean.setMsgType(getMessageType(msg)); bean.setLastMessage(getMessageString(msg)); bean.setLastMsgId(msg.getId()); } } else { bean.setHasConversation(false); } } return list; }
5、最后实现效果如下:
通过集成极光IM,我们实现了直播系统代码的私信聊天功能。以上代码皆出自于直播系统代码,想要了解更多相关内容,可以关注一下我们。
声明:以上内容为云豹科技原创,未经作者本人同意,禁止转载,否则将追究相关法律责任www.yunbaokj.com