现阶段来看,直播软件中的即时通讯是非常重要的一个部分,毕竟直播过程中的交流和沟通是非常重要的,所以在Android直播软件开发时需要接入相关的IM服务。
通常我们选择的即时聊天服务,会选择集成简单方便、系统稳定、可靠性好、开发成本小的一方,目前比较常见的IM服务商有极光、环信、腾讯、融云等等,本文以选择腾讯IM为例,简单说下如何在Android直播软件开发时集成腾讯IM。
先登录腾讯云官网 https://cloud.tencent.com/,在产品中搜索即时通信IM。

登录进入控制台,并创建应用

创建应用成功,按照文档说明进行相应的配置

样就完成应用的创建和配置。
编写android代码,集成IM

@Override
public void init() {TIMManager timManager = TIMManager.getInstance();//判断是否是在主线程 初始化 SDK 基本配置if (SessionWrapper.isMainProcess(CommonAppContext.sInstance)) {TIMSdkConfig config = new TIMSdkConfig(CommonAppConfig.TX_IM_APP_Id).enableLogPrint(false).setLogLevel(TIMLogLevel.OFF);timManager.init(CommonAppContext.sInstance, config);}//基本用户配置TIMUserConfig userConfig = new TIMUserConfig();//设置用户状态变更事件监听器userConfig.setUserStatusListener(new TIMUserStatusListener() {@Overridepublic void onForceOffline() {L.e(TAG, "被其他终端顶掉了---->");RouteUtil.forwardLoginInvalid(WordUtil.getString(R.string.login_status_Invalid));}@Overridepublic void onUserSigExpired() {L.e(TAG, "用户签名过期了,需要重新登录---->");}});//设置连接状态事件监听器userConfig.setConnectionListener(new TIMConnListener() {@Overridepublic void onConnected() {L.e(TAG, "连接成功---->");if (mHandler != null) {mHandler.removeCallbacksAndMessages(null);}}@Overridepublic void onDisconnected(int code, String desc) {L.e(TAG, "连接断开---->");if (mHandler != null) {mHandler.sendEmptyMessageDelayed(0, 2000);}}@Overridepublic void onWifiNeedAuth(String name) {L.e(TAG, "onWifiNeedAuth");}});//设置会话刷新监听器userConfig.setRefreshListener(new TIMRefreshListener() {@Overridepublic void onRefresh() {//L.e(TAG, "刷新会话---onRefresh----->");}@Overridepublic void onRefreshConversation(List<TIMConversation> conversations) {// L.e(TAG, "刷新会话---onRefreshConversation---->size: " + conversations.size());}});timManager.setUserConfig(userConfig);timManager.addMessageListener(TxImMessageUtil.this);// 设置离线推送监听器timManager.setOfflinePushListener(this);
}@Override
public void loginImClient(String uid) {String sign = SpUtil.getInstance().getStringValue(SpUtil.TX_IM_USER_SIGN);if (TextUtils.isEmpty(sign)) {ToastUtil.show("腾讯IM登录失败! 签名错误!");return;}TIMManager.getInstance().login(uid, sign, new TIMCallBack() {@Overridepublic void onError(int code, String desc) {L.e(TAG, "登录失败 : " + code + " errmsg: " + desc);CommonAppConfig.getInstance().setLoginIM(false);ToastUtil.show("IM 登录失败:" + code + " errmsg: " + desc);}@Overridepublic void onSuccess() {L.e(TAG, "登录成功!!");CommonAppConfig.getInstance().setLoginIM(true);refreshAllUnReadMsgCount();ConfigBean configBean = CommonAppConfig.getInstance().getConfig();if (configBean != null) {String groupId = configBean.getTxImGroupId();L.e(TAG, "群组ID------> " + groupId);if (!TextUtils.isEmpty(groupId)) {mGroupId = groupId;TIMGroupManager.getInstance().applyJoinGroup(groupId, "login", new TIMCallBack() {@java.lang.Overridepublic void onError(int code, String desc) {L.e(TAG, "加入群组失败 : " + code + " errmsg: " + desc);}@java.lang.Overridepublic void onSuccess() {L.e(TAG, "加入群组成功!!");}});}}}});
}@Override
public void logoutImClient() {TIMManager timManager = TIMManager.getInstance();timManager.logout(null);CommonAppConfig.getInstance().setLoginIM(false);L.e(TAG, "退出登录--->");
}/*** 设置消息监听器,收到新消息时,通过此监听器回调** @param list* @return*/
@Override
public boolean onNewMessages(List<TIMMessage> list) {if (list == null || list.size() == 0) {return true;}for (TIMMessage msg : list) {onReceiveMessage(msg);}return true; //返回true将终止回调链,不再调用下一个新消息监听器
}
/*** 标记所有会话为已读  即忽略所有未读*/
@Override
public void markAllConversationAsRead() {List<TIMConversation> list = TIMManagerExt.getInstance().getConversationList();if (list != null && list.size() > 0) {for (TIMConversation conversation : list) {if (conversation != null) {TIMConversationExt conExt = new TIMConversationExt(conversation);conExt.setReadMessage(null, mEmptyCallBack);}}}EventBus.getDefault().post(new ImUnReadCountEvent("0"));
}@Override
public ImMessageBean createTextMessage(String toUid, String content) {TIMMessage msg = new TIMMessage();TIMTextElem elem = new TIMTextElem();elem.setText(content);if (msg.addElement(elem) != 0) {L.e(TAG, "发送文本消息失败----->");return null;}return new ImMessageBean(CommonAppConfig.getInstance().getUid(), msg, ImMessageBean.TYPE_TEXT, true);
}@Override
public ImMessageBean createImageMessage(String toUid, String path) {TIMMessage msg = new TIMMessage();TIMImageElem elem = new TIMImageElem();elem.setPath(path);if (msg.addElement(elem) != 0) {L.e(TAG, "发送图片消息失败----->");return null;}return new ImMessageBean(CommonAppConfig.getInstance().getUid(), msg, ImMessageBean.TYPE_IMAGE, true);
}@Override
public ImMessageBean createLocationMessage(String toUid, double lat, double lng, int scale, String address) {TIMMessage msg = new TIMMessage();TIMLocationElem elem = new TIMLocationElem();elem.setLatitude(lat);elem.setLongitude(lng);elem.setDesc(address);if (msg.addElement(elem) != 0) {return null;}return new ImMessageBean(CommonAppConfig.getInstance().getUid(), msg, ImMessageBean.TYPE_LOCATION, true);
}@Override
public ImMessageBean createVoiceMessage(String toUid, File voiceFile, long duration) {TIMMessage msg = new TIMMessage();TIMSoundElem elem = new TIMSoundElem();elem.setPath(voiceFile.getAbsolutePath());elem.setDuration(duration / 1000);if (msg.addElement(elem) != 0) {return null;}return new ImMessageBean(CommonAppConfig.getInstance().getUid(), msg, ImMessageBean.TYPE_VOICE, true);
}/*** 发送自定义消息** @param toUid* @param data  要发送的数据*/
@Override
public void sendCustomMessage(String toUid, String data, final boolean save) {final TIMMessage customMsg = new TIMMessage();TIMCustomElem elem = new TIMCustomElem();elem.setData(data.getBytes());if (customMsg.addElement(elem) != 0) {return;}TIMConversation conversation = TIMManager.getInstance().getConversation(TIMConversationType.C2C, getImUid(toUid));if (conversation != null) {if (mSendCustomCallback == null) {mSendCustomCallback = new TIMValueCallBack<TIMMessage>() {//发送消息回调@Overridepublic void onError(int code, String desc) {//发送消息失败L.e(TAG, "发送自定义消息失败---> code: " + code + " errmsg: " + desc);if (!save) {removeMessage(customMsg);}}@Overridepublic void onSuccess(TIMMessage msg) {//发送消息成功L.e(TAG, "发送自定义消息成功!!");if (!save) {removeMessage(customMsg);}}};}conversation.sendMessage(customMsg, mSendCustomCallback);}
}@Override
public void sendMessage(String toUid, ImMessageBean bean, SendMsgResultCallback callback) {if (bean == null || TextUtils.isEmpty(toUid)) {return;}TIMMessage msg = bean.getTimRawMessage();if (msg == null) {return;}TIMConversation conversation = TIMManager.getInstance().getConversation(TIMConversationType.C2C, getImUid(toUid));if (conversation != null) {mSendMsgResultCallback = callback;if (mSendCompleteCallback == null) {mSendCompleteCallback = new TIMValueCallBack<TIMMessage>() {//发送消息回调@Overridepublic void onError(int code, String desc) {//发送消息失败L.e(TAG, "发送消息失败---> code: " + code + " errmsg: " + desc);if (mSendMsgResultCallback != null) {mSendMsgResultCallback.onSendFinish(false);}mSendMsgResultCallback = null;}@Overridepublic void onSuccess(TIMMessage msg) {//发送消息成功if (mSendMsgResultCallback != null) {mSendMsgResultCallback.onSendFinish(true);}mSendMsgResultCallback = null;}};}conversation.sendMessage(msg, mSendCompleteCallback);}}/*** 删除消息*/
private boolean removeMessage(TIMMessage msg) {if (msg != null) {TIMMessageExt timMessageExt = new TIMMessageExt(msg);return timMessageExt.remove();}return false;
}

这样就实现了私信聊天功能。
以上就是在Android直播软件开发时集成腾讯IM的流程,感兴趣可持续关注。
声明:本文由作者原创,转载须备注文章来源与作者。

Android直播软件开发中接入腾讯IM大概流程是怎样的相关推荐

  1. 一对一直播软件开发中,如何进行推流?

    推流环节对直播链路的影响非常大,如果推流网络不稳定,就算前期在音视频处理.编码和封装上做何种优化,用户体验都会很糟糕.因此接下来,小编就以一对一直播软件开发为例,为大家讲述下推流过程中涉及的协议.实现 ...

  2. 视频互动直播软件开发中的连麦问题分析

    直播行业发展至今,我们经常会听到很多朋友谈论"互动直播".那么何谓互动直播呢?其实互动直播的核心在于通过连麦技术,让视频直播有一个超过文字的更深层次的互动交流. 在视频互动直播软件 ...

  3. Android直播软件搭建中实用的录制编辑方案有哪些

    Android直播软件搭建中实用的录制编辑方案有哪些 经大量数据显示,直播已经发展成为一种全民参与.共享和生产的文化现象.它的火爆不仅丰富了大众的艺术审美水平和精神文化,而且也影响了一代人的世界观.人 ...

  4. 视频互动直播软件开发中的连麦问题分析 1

    直播行业发展至今,我们经常会听到很多朋友谈论"互动直播".那么何谓互动直播呢?其实互动直播的核心在于通过连麦技术,让视频直播有一个超过文字的更深层次的互动交流. 在视频互动直播软件 ...

  5. 视频直播软件开发中关于极光用户修改 [头像、昵称] 的教程

    视频直播软件开发中一定会用到推送或IM即时通讯,但是正常情况下更新用户信息只会更新数据库的信息,并不会同步更新到服务器,那么接下来我们就以极光为例,讲述该如何修改用户头像及昵称.基本步骤如下: 1.上 ...

  6. 在视频直播软件开发中,这样做才能实现svga格式礼物动画

    在线直播源码中,礼物功能的开发是必不可少的,它不但可以作为用户对主播的喜爱度的评判标准,还是直播平台变现的方式之一,那么在直播源码中,svga格式礼物动画是如何实现的呢?以云豹的金山demo为例,实现 ...

  7. 【Android】软件开发中遇到的LUT

    提到LUT,很多人可能都会觉得这是一个很专业很高深的词汇,LUT其实就是Lookup Table(颜色查找表)的缩写,简单点儿理解就是:通过LUT,你可以将一组RGB值输出为另一组RGB值,从而改变画 ...

  8. 直播软件开发:直播APP源码的重要程度

    在这个时代,如果你想做一款属于自己手机直播APP,就必须了解直播软件开发中的直播APP源码.如果在你下定决心去做手机直播APP了,那么通过事先的了解,你也不会显得局促,反而游刃有余. 直播APP源码到 ...

  9. 如何评判在线直播源码优劣?视频直播软件开发经验之谈

    直播经过这些年的不断发展,使用者逐渐增加,在视频直播软件开发行业从业者的不断努力下,在线直播源码变得越来越完善,甚至已有了一些开发窍门的积累和判断视频直播软件优劣性的指标,本篇文章就来讲讲,该如何评判 ...

最新文章

  1. 如何设计一款地震高岗一派溪山千古秀的反爬虫?
  2. 观点 | 有区块链就一定能创新吗?区块链改变了什么、改变不了什么?
  3. GPS模块输出的NMEA数据ddmm.mmmm转换成dd.ddddd,在google Earth Pro中描点
  4. mysql windows 安装 错误
  5. php ajax loading图片居中显示,php-通过ajax框架加载漂亮照片
  6. 淮阴工学院计算机专业的考研率,淮阴工学院江淮学院(淮阴工学院考研录取率)...
  7. 几个常用JAVA开源项目的地址荟萃
  8. java的num的数据类型_Java基础---Java数据类型
  9. 关于SQL注入及防御
  10. [已解决]罗技鼠标驱动打不开问题
  11. 炒股杠杆-API智能交易软件基本函数
  12. 【LeetCode】求众数(四种方法)
  13. CTFSHOW-MISC入门
  14. 描写计算机老师上课的神态,描写老师上课的神态的作文300字
  15. 解决报错:info There appears to be trouble with your network connection. Retrying...
  16. ABAP术语-ALE
  17. UI设计中最重要的元素和原则是什么
  18. Laravel OAuth2 (二) ---配置与数据库设计
  19. 为什么曾经优秀的老员工被辞退了?
  20. Java--JSP四大作用域、九大内置对象

热门文章

  1. 【微信小程序模板】可以用微信小程序模板制作小程序吗?
  2. idea无法正常显示配置文件图标
  3. 阿里云服务器ICP备案流程概述
  4. Softing参加ASAM中国区域大会暨C-ASAM技术论坛会议
  5. 库克放大招啦!一张照片生成3D头像,新模型击败StyleGAN2!
  6. xxl-job任务调度平台
  7. java毕业设计鞍山丘比特房屋租赁管理系统Mybatis+系统+数据库+调试部署
  8. 移动端网页签名,附上DOM,效果图
  9. ubuntu服务器dns修改,如何在 Ubuntu 16 中修改 DNS 服务器?
  10. 如何计算用户生命周期天数?