Android直播软件开发中接入腾讯IM大概流程是怎样的
16lz
2021-01-26
现阶段来看,直播软件中的即时通讯是非常重要的一个部分,毕竟直播过程中的交流和沟通是非常重要的,所以在Android直播软件开发时需要接入相关的IM服务。
通常我们选择的即时聊天服务,会选择集成简单方便、系统稳定、可靠性好、开发成本小的一方,目前比较常见的IM服务商有极光、环信、腾讯、融云等等,本文以选择腾讯IM为例,简单说下如何在Android直播软件开发时集成腾讯IM。
先登录腾讯云官网 https://cloud.tencent.com/,在产品中搜索即时通信IM。
登录进入控制台,并创建应用
创建应用成功,按照文档说明进行相应的配置
样就完成应用的创建和配置。
编写android代码,集成IM
@Overridepublic 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() { @Override public void onForceOffline() { L.e(TAG, "被其他终端顶掉了---->"); RouteUtil.forwardLoginInvalid(WordUtil.getString(R.string.login_status_Invalid)); } @Override public void onUserSigExpired() { L.e(TAG, "用户签名过期了,需要重新登录---->"); } }); //设置连接状态事件监听器 userConfig.setConnectionListener(new TIMConnListener() { @Override public void onConnected() { L.e(TAG, "连接成功---->"); if (mHandler != null) { mHandler.removeCallbacksAndMessages(null); } } @Override public void onDisconnected(int code, String desc) { L.e(TAG, "连接断开---->"); if (mHandler != null) { mHandler.sendEmptyMessageDelayed(0, 2000); } } @Override public void onWifiNeedAuth(String name) { L.e(TAG, "onWifiNeedAuth"); } }); //设置会话刷新监听器 userConfig.setRefreshListener(new TIMRefreshListener() { @Override public void onRefresh() { //L.e(TAG, "刷新会话---onRefresh----->"); } @Override public void onRefreshConversation(List conversations) { // L.e(TAG, "刷新会话---onRefreshConversation---->size: " + conversations.size()); } }); timManager.setUserConfig(userConfig); timManager.addMessageListener(TxImMessageUtil.this); // 设置离线推送监听器 timManager.setOfflinePushListener(this);}@Overridepublic 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() { @Override public void onError(int code, String desc) { L.e(TAG, "登录失败 : " + code + " errmsg: " + desc); CommonAppConfig.getInstance().setLoginIM(false); ToastUtil.show("IM 登录失败:" + code + " errmsg: " + desc); } @Override public 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.Override public void onError(int code, String desc) { L.e(TAG, "加入群组失败 : " + code + " errmsg: " + desc); } @java.lang.Override public void onSuccess() { L.e(TAG, "加入群组成功!!"); } }); } } } });}@Overridepublic void logoutImClient() { TIMManager timManager = TIMManager.getInstance(); timManager.logout(null); CommonAppConfig.getInstance().setLoginIM(false); L.e(TAG, "退出登录--->");}/** * 设置消息监听器,收到新消息时,通过此监听器回调 * * @param list * @return */@Overridepublic boolean onNewMessages(List list) { if (list == null || list.size() == 0) { return true; } for (TIMMessage msg : list) { onReceiveMessage(msg); } return true; //返回true将终止回调链,不再调用下一个新消息监听器}/** * 标记所有会话为已读 即忽略所有未读 */@Overridepublic void markAllConversationAsRead() { List 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"));}@Overridepublic 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);}@Overridepublic 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);}@Overridepublic 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);}@Overridepublic 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 要发送的数据 */@Overridepublic 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() {//发送消息回调 @Override public void onError(int code, String desc) {//发送消息失败 L.e(TAG, "发送自定义消息失败---> code: " + code + " errmsg: " + desc); if (!save) { removeMessage(customMsg); } } @Override public void onSuccess(TIMMessage msg) {//发送消息成功 L.e(TAG, "发送自定义消息成功!!"); if (!save) { removeMessage(customMsg); } } }; } conversation.sendMessage(customMsg, mSendCustomCallback); }}@Overridepublic 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() {//发送消息回调 @Override public void onError(int code, String desc) {//发送消息失败 L.e(TAG, "发送消息失败---> code: " + code + " errmsg: " + desc); if (mSendMsgResultCallback != null) { mSendMsgResultCallback.onSendFinish(false); } mSendMsgResultCallback = null; } @Override public 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面试资料了吧
- 三方库 之 分分钟集成腾讯 TBS X5 。。。
- 高德地图Android错误码1008、32和7;错误提示invalid_user_scode;返
- 腾讯、百度、华为、搜狗和滴滴Android面试题汇总
- setOntouchListener和setOnKeyListener
- android 获取经纬度
- android调用JS失败时可能的原因
- Android安装应用失败UID 和 PID
- android Button 的按下和抬起事件监听