IMCenter.java 5.6 KB

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