package com.cooleshow.chatmodule.manager; import android.content.Context; import android.text.TextUtils; import com.alibaba.android.arouter.launcher.ARouter; import com.cooleshow.base.router.RouterPath; import com.cooleshow.base.utils.LOG; import com.cooleshow.chatmodule.constants.IMConstants; import com.cooleshow.chatmodule.contract.IUnReadMessageObserver; import com.cooleshow.usercenter.constants.UserConstants; import com.cooleshow.usercenter.helper.UserHelper; import com.tencent.imsdk.v2.V2TIMCallback; import com.tencent.imsdk.v2.V2TIMConversationListener; import com.tencent.imsdk.v2.V2TIMManager; import com.tencent.imsdk.v2.V2TIMMessage; import com.tencent.imsdk.v2.V2TIMSendCallback; import com.tencent.qcloud.tuicore.TUILogin; import com.tencent.qcloud.tuicore.interfaces.TUICallback; import com.tencent.qcloud.tuicore.interfaces.TUILoginListener; import com.tencent.qcloud.tuicore.util.ErrorMessageConverter; import com.tencent.qcloud.tuikit.timcommon.component.interfaces.IUIKitCallback; import com.tencent.qcloud.tuikit.tuiconversation.commonutil.TUIConversationLog; import com.tencent.qcloud.tuikit.tuiconversation.commonutil.TUIConversationUtils; import com.tencent.qcloud.tuikit.tuigroup.util.TUIGroupLog; import com.tencent.qcloud.tuikit.tuigroup.util.TUIGroupUtils; /** * Author by pq, Date on 2023/6/29. */ public class IMCenter { public static final String TAG = "IMCenter"; private TUILoginListener mListener = new TUILoginListener() { @Override public void onKickedOffline() { super.onKickedOffline(); LOG.i("onKickedOffline"); goLogin(); } @Override public void onUserSigExpired() { super.onUserSigExpired(); LOG.i("onUserSigExpired"); goLogin(); } }; private IMCenter() { } public static IMCenter getInstance() { return IMCenterHolder.sCenter; } private static final class IMCenterHolder { private static IMCenter sCenter = new IMCenter(); } public void loginIM(Context context, String imUserId, String imToken) { int loginStatus = V2TIMManager.getInstance().getLoginStatus(); if (loginStatus == V2TIMManager.V2TIM_STATUS_LOGINED) { return; } if (loginStatus == V2TIMManager.V2TIM_STATUS_LOGINING) { return; } TUILogin.addLoginListener(mListener); TUILogin.login(context.getApplicationContext(), IMConstants.getSdkAPPId(), imUserId, imToken, new TUICallback() { @Override public void onError(final int code, final String desc) { LOG.i("im login onError:" + code + "--reason:" + desc); } @Override public void onSuccess() { LOG.i("im login success"); } }); } public void logoutIM() { TUILogin.removeLoginListener(mListener); TUILogin.logout(new TUICallback() { @Override public void onSuccess() { } @Override public void onError(int errorCode, String errorMessage) { } }); } public void deleteConversation(String conversationId, IUIKitCallback callBack) { V2TIMManager.getConversationManager().deleteConversation(conversationId, new V2TIMCallback() { @Override public void onError(int code, String desc) { TUIConversationLog.e(TAG, "deleteConversation error:" + code + ", desc:" + ErrorMessageConverter.convertIMError(code, desc)); TUIConversationUtils.callbackOnError(callBack, TAG, code, desc); } @Override public void onSuccess() { TUIConversationLog.i(TAG, "deleteConversation success"); TUIConversationUtils.callbackOnSuccess(callBack, null); } }); } public String getConversationIdFromId(String targetId, boolean isGroup) { if (isGroup) { return "group_" + targetId; } return "c2c_" + targetId; } /** * 消息免打扰 * * @param groupId * @param isReceive * @param callBack */ public void setGroupReceiveMessageOpt(String groupId, boolean isReceive, IUIKitCallback callBack) { int option; if (!isReceive) { option = V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE; } else { option = V2TIMMessage.V2TIM_RECEIVE_MESSAGE; } V2TIMManager.getMessageManager().setGroupReceiveMessageOpt(groupId, option, new V2TIMCallback() { @Override public void onSuccess() { TUIGroupUtils.callbackOnSuccess(callBack, null); TUIGroupLog.d(TAG, "setReceiveMessageOpt onSuccess"); } @Override public void onError(int code, String desc) { TUIGroupUtils.callbackOnError(callBack, code, desc); TUIGroupLog.d(TAG, "setReceiveMessageOpt onError code = " + code + ", desc = " + ErrorMessageConverter.convertIMError(code, desc)); } }); } public void addUnReadMessageObserver(IUnReadMessageObserver unReadMessageObserver) { V2TIMManager.getConversationManager().addConversationListener(unReadMessageObserver); } public void removeUnReadMessageObserver(IUnReadMessageObserver unReadMessageObserver) { V2TIMManager.getConversationManager().removeConversationListener(unReadMessageObserver); } public void sendImageMessage(String targetId, boolean isGroup, String imgPath, V2TIMSendCallback sendCallback) { if (!TextUtils.isEmpty(targetId)) { V2TIMMessage imageMessage = V2TIMManager.getMessageManager().createImageMessage(imgPath); // 发送消息 sendMessage(imageMessage,targetId,isGroup,sendCallback); } } public void sendMessage(V2TIMMessage message,String targetId, boolean isGroup,V2TIMSendCallback sendCallback){ V2TIMManager.getMessageManager().sendMessage(message, isGroup ? null : targetId, isGroup ? targetId : null, V2TIMMessage.V2TIM_PRIORITY_DEFAULT, false, null, sendCallback); } private void goLogin() { ARouter.getInstance().build(RouterPath.UserCenter.PATH_VERIFY_LOGIN) .withString(UserConstants.PHONE_NUM_KEY, UserHelper.getUserPhone()) .navigation(); } }