直播系统代码接入极光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






鲁公网安备 37090202000844号

