IMCenter.java 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. package com.cooleshow.chatmodule.manager;
  2. import android.content.Context;
  3. import android.text.TextUtils;
  4. import com.alibaba.android.arouter.launcher.ARouter;
  5. import com.cooleshow.base.router.RouterPath;
  6. import com.cooleshow.base.utils.LOG;
  7. import com.cooleshow.chatmodule.constants.IMConstants;
  8. import com.cooleshow.chatmodule.contract.IUnReadMessageObserver;
  9. import com.cooleshow.usercenter.constants.UserConstants;
  10. import com.cooleshow.usercenter.helper.UserHelper;
  11. import com.tencent.imsdk.v2.V2TIMCallback;
  12. import com.tencent.imsdk.v2.V2TIMConversationListener;
  13. import com.tencent.imsdk.v2.V2TIMManager;
  14. import com.tencent.imsdk.v2.V2TIMMessage;
  15. import com.tencent.imsdk.v2.V2TIMSendCallback;
  16. import com.tencent.qcloud.tuicore.TUILogin;
  17. import com.tencent.qcloud.tuicore.interfaces.TUICallback;
  18. import com.tencent.qcloud.tuicore.interfaces.TUILoginListener;
  19. import com.tencent.qcloud.tuicore.util.ErrorMessageConverter;
  20. import com.tencent.qcloud.tuikit.timcommon.component.interfaces.IUIKitCallback;
  21. import com.tencent.qcloud.tuikit.tuiconversation.commonutil.TUIConversationLog;
  22. import com.tencent.qcloud.tuikit.tuiconversation.commonutil.TUIConversationUtils;
  23. import com.tencent.qcloud.tuikit.tuigroup.util.TUIGroupLog;
  24. import com.tencent.qcloud.tuikit.tuigroup.util.TUIGroupUtils;
  25. /**
  26. * Author by pq, Date on 2023/6/29.
  27. */
  28. public class IMCenter {
  29. public static final String TAG = "IMCenter";
  30. private TUILoginListener mListener = new TUILoginListener() {
  31. @Override
  32. public void onKickedOffline() {
  33. super.onKickedOffline();
  34. LOG.i("onKickedOffline");
  35. goLogin();
  36. }
  37. @Override
  38. public void onUserSigExpired() {
  39. super.onUserSigExpired();
  40. LOG.i("onUserSigExpired");
  41. goLogin();
  42. }
  43. };
  44. private IMCenter() {
  45. }
  46. public static IMCenter getInstance() {
  47. return IMCenterHolder.sCenter;
  48. }
  49. private static final class IMCenterHolder {
  50. private static IMCenter sCenter = new IMCenter();
  51. }
  52. public void loginIM(Context context, String imUserId, String imToken) {
  53. int loginStatus = V2TIMManager.getInstance().getLoginStatus();
  54. if (loginStatus == V2TIMManager.V2TIM_STATUS_LOGINED) {
  55. return;
  56. }
  57. if (loginStatus == V2TIMManager.V2TIM_STATUS_LOGINING) {
  58. return;
  59. }
  60. TUILogin.addLoginListener(mListener);
  61. TUILogin.login(context.getApplicationContext(), IMConstants.getSdkAPPId(), imUserId, imToken, new TUICallback() {
  62. @Override
  63. public void onError(final int code, final String desc) {
  64. LOG.i("im login onError:" + code + "--reason:" + desc);
  65. }
  66. @Override
  67. public void onSuccess() {
  68. LOG.i("im login success");
  69. }
  70. });
  71. }
  72. public void logoutIM() {
  73. TUILogin.removeLoginListener(mListener);
  74. TUILogin.logout(new TUICallback() {
  75. @Override
  76. public void onSuccess() {
  77. }
  78. @Override
  79. public void onError(int errorCode, String errorMessage) {
  80. }
  81. });
  82. }
  83. public void deleteConversation(String conversationId, IUIKitCallback<Void> callBack) {
  84. V2TIMManager.getConversationManager().deleteConversation(conversationId, new V2TIMCallback() {
  85. @Override
  86. public void onError(int code, String desc) {
  87. TUIConversationLog.e(TAG, "deleteConversation error:" + code + ", desc:" + ErrorMessageConverter.convertIMError(code, desc));
  88. TUIConversationUtils.callbackOnError(callBack, TAG, code, desc);
  89. }
  90. @Override
  91. public void onSuccess() {
  92. TUIConversationLog.i(TAG, "deleteConversation success");
  93. TUIConversationUtils.callbackOnSuccess(callBack, null);
  94. }
  95. });
  96. }
  97. public String getConversationIdFromId(String targetId, boolean isGroup) {
  98. if (isGroup) {
  99. return "group_" + targetId;
  100. }
  101. return "c2c_" + targetId;
  102. }
  103. /**
  104. * 消息免打扰
  105. *
  106. * @param groupId
  107. * @param isReceive
  108. * @param callBack
  109. */
  110. public void setGroupReceiveMessageOpt(String groupId, boolean isReceive, IUIKitCallback callBack) {
  111. int option;
  112. if (!isReceive) {
  113. option = V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE;
  114. } else {
  115. option = V2TIMMessage.V2TIM_RECEIVE_MESSAGE;
  116. }
  117. V2TIMManager.getMessageManager().setGroupReceiveMessageOpt(groupId, option, new V2TIMCallback() {
  118. @Override
  119. public void onSuccess() {
  120. TUIGroupUtils.callbackOnSuccess(callBack, null);
  121. TUIGroupLog.d(TAG, "setReceiveMessageOpt onSuccess");
  122. }
  123. @Override
  124. public void onError(int code, String desc) {
  125. TUIGroupUtils.callbackOnError(callBack, code, desc);
  126. TUIGroupLog.d(TAG, "setReceiveMessageOpt onError code = " + code + ", desc = " + ErrorMessageConverter.convertIMError(code, desc));
  127. }
  128. });
  129. }
  130. public void addUnReadMessageObserver(IUnReadMessageObserver unReadMessageObserver) {
  131. V2TIMManager.getConversationManager().addConversationListener(unReadMessageObserver);
  132. }
  133. public void removeUnReadMessageObserver(IUnReadMessageObserver unReadMessageObserver) {
  134. V2TIMManager.getConversationManager().removeConversationListener(unReadMessageObserver);
  135. }
  136. public void sendImageMessage(String targetId, boolean isGroup, String imgPath, V2TIMSendCallback<V2TIMMessage> sendCallback) {
  137. if (!TextUtils.isEmpty(targetId)) {
  138. V2TIMMessage imageMessage = V2TIMManager.getMessageManager().createImageMessage(imgPath);
  139. // 发送消息
  140. sendMessage(imageMessage,targetId,isGroup,sendCallback);
  141. }
  142. }
  143. public void sendMessage(V2TIMMessage message,String targetId, boolean isGroup,V2TIMSendCallback<V2TIMMessage> sendCallback){
  144. V2TIMManager.getMessageManager().sendMessage(message, isGroup ? null : targetId, isGroup ? targetId : null, V2TIMMessage.V2TIM_PRIORITY_DEFAULT, false, null, sendCallback);
  145. }
  146. private void goLogin() {
  147. ARouter.getInstance().build(RouterPath.UserCenter.PATH_VERIFY_LOGIN)
  148. .withString(UserConstants.PHONE_NUM_KEY, UserHelper.getUserPhone())
  149. .navigation();
  150. }
  151. }