Browse Source

1.添加收到IM消息展示弹窗功能

王鹏鹏 2 years ago
parent
commit
298f80a8c3

+ 27 - 1
app/src/main/java/com/yingyangfly/MyApplication.kt

@@ -5,11 +5,13 @@ import android.util.Log
 import androidx.multidex.MultiDex
 import com.tencent.imsdk.v2.V2TIMManager
 import com.tencent.imsdk.v2.V2TIMSDKConfig
+import com.tencent.imsdk.v2.V2TIMSDKListener
 import com.tencent.rtmp.TXLiveBase
 import com.tencent.rtmp.TXLiveBaseListener
 import com.yingyangfly.baselib.BaseApplication
 import com.yingyangfly.baselib.config.AccountConfig
 
+
 class MyApplication : BaseApplication() {
 
     override fun attachBaseContext(base: Context?) {
@@ -20,7 +22,8 @@ class MyApplication : BaseApplication() {
 
     override fun onCreate() {
         super.onCreate()
-        TXLiveBase.getInstance().setLicence(this, AccountConfig.TENCENT_LICENCEURL, AccountConfig.TENCENT_LICENCEKEY)
+        TXLiveBase.getInstance()
+            .setLicence(this, AccountConfig.TENCENT_LICENCEURL, AccountConfig.TENCENT_LICENCEKEY)
         TXLiveBase.setListener(object : TXLiveBaseListener() {
             override fun onLicenceLoaded(result: Int, reason: String) {
                 Log.i("wpp", "onLicenceLoaded: result:$result, reason:$reason")
@@ -29,6 +32,29 @@ class MyApplication : BaseApplication() {
 
         val config = V2TIMSDKConfig()
         config.logLevel = V2TIMSDKConfig.V2TIM_LOG_DEBUG
+        V2TIMManager.getInstance().addIMSDKListener(object : V2TIMSDKListener() {
+            override fun onConnecting() {
+                Log.e("wpp", "IM onConnecting")
+            }
+
+            override fun onConnectSuccess() {
+                Log.e("wpp", "IM onConnectSuccess")
+            }
+
+            override fun onConnectFailed(code: Int, error: String?) {
+                Log.e("wpp", "IM onConnectFailed")
+                Log.e("wpp", "IM onConnectFailed code------------------>         $code")
+                Log.e("wpp", "IM onConnectFailed code------------------>         $error")
+            }
+
+            override fun onKickedOffline() {
+                Log.e("wpp", "IM onKickedOffline")
+            }
+
+            override fun onUserSigExpired() {
+                Log.e("wpp", "IM onUserSigExpired")
+            }
+        })
         V2TIMManager.getInstance().initSDK(this, AccountConfig.TENCENT_IM_APPID, config)
     }
 }

+ 1 - 38
home/src/main/java/com/yingyangfly/home/activity/HomeActivity.kt

@@ -9,14 +9,12 @@ import androidx.recyclerview.widget.GridLayoutManager
 import com.alibaba.android.arouter.facade.annotation.Route
 import com.alibaba.android.arouter.launcher.ARouter
 import com.bumptech.glide.Glide
-import com.tencent.imsdk.v2.V2TIMCallback
 import com.tencent.imsdk.v2.V2TIMManager
 import com.tencent.imsdk.v2.V2TIMSimpleMsgListener
 import com.tencent.imsdk.v2.V2TIMUserInfo
 import com.yingyang.home.R
 import com.yingyang.home.databinding.ActivityHomeBinding
 import com.yingyangfly.baselib.bean.GetSaveGameRecordBean
-import com.yingyangfly.baselib.bean.MessageBean
 import com.yingyangfly.baselib.bean.Record
 import com.yingyangfly.baselib.db.VoicePlayerBean
 import com.yingyangfly.baselib.dialog.TaskFragment
@@ -122,18 +120,13 @@ class HomeActivity : BaseMVVMActivity<ActivityHomeBinding, HomeViewModel>(),
     }
 
     override fun initData() {
+        addSimpleMsgListener()
         initLiveData()
     }
 
     override fun onResume() {
         super.onResume()
         runOnUiThread {
-            val stastus = V2TIMManager.getInstance().loginStatus
-            if (V2TIMManager.V2TIM_STATUS_LOGINED != stastus) {
-                //IM未登录
-                V2TIMManager.getInstance().removeSimpleMsgListener(simpleMsgListener)
-                getUserSign()
-            }
             //获取app升级信息
             selectNewVersion()
             //获取脑力值和训练时长接口
@@ -153,36 +146,6 @@ class HomeActivity : BaseMVVMActivity<ActivityHomeBinding, HomeViewModel>(),
         }
     }
 
-    /**
-     * 获取腾讯IM密钥
-     */
-    private fun getUserSign() {
-        viewModel.getUserSign(User.getUserId(), fail = {
-        }, success = {
-            if (TextUtils.isEmpty(it).not()) {
-                loginIM(it!!)
-            }
-        })
-    }
-
-    /**
-     * 登录腾讯IM
-     */
-    private fun loginIM(sign: String) {
-        runOnUiThread {
-            V2TIMManager.getInstance().login(User.getUserId(), sign, object : V2TIMCallback {
-                override fun onSuccess() {
-                    "IM登陆成功".loge()
-                    addSimpleMsgListener()
-                }
-
-                override fun onError(p0: Int, p1: String?) {
-                    getUserSign()
-                }
-            })
-        }
-    }
-
     /**
      * IM消息监听
      */

+ 1 - 0
login/build.gradle

@@ -15,6 +15,7 @@ android {
 
 dependencies {
     implementation project(path: ':baselib')
+    implementation project(path: ':tuichat')
     implementation(rootProject.ext.androidx.kotlin_lib)
     implementation(rootProject.ext.androidx.kotlin_core)
     implementation(rootProject.ext.androidx.appcompat)

+ 6 - 0
login/src/main/java/com/yingyang/login/net/LoginApiService.kt

@@ -37,4 +37,10 @@ interface LoginApiService {
      */
     @POST("app/getCheckCode")
     suspend fun sendCode(@Query("mobile") mobile: String): BaseResp<UserInfoBean>
+
+    /**
+     * 获取腾讯IM密钥
+     */
+    @POST("im/user_sign")
+    suspend fun getUserSign(@Query("userId") userId: String): BaseResp<String>
 }

+ 35 - 4
login/src/main/java/com/yingyang/login/ui/login/LoginActivity.kt

@@ -6,6 +6,7 @@ import android.os.Build
 import android.text.InputType
 import android.text.SpannableString
 import android.text.Spanned
+import android.text.TextUtils
 import android.text.style.ForegroundColorSpan
 import android.view.MotionEvent
 import android.view.View
@@ -13,6 +14,8 @@ import android.widget.TextView
 import com.alibaba.android.arouter.facade.annotation.Route
 import com.alibaba.android.arouter.launcher.ARouter
 import com.google.android.material.tabs.TabLayout
+import com.tencent.imsdk.v2.V2TIMCallback
+import com.tencent.imsdk.v2.V2TIMManager
 import com.yingyang.login.R
 import com.yingyang.login.databinding.ActivityLoginBinding
 import com.yingyangfly.baselib.ext.getEndAnimation
@@ -190,10 +193,7 @@ class LoginActivity : BaseMVVMActivity<ActivityLoginBinding, LoginViewModel>(),
                 if (it.firstLogin.isEmpty().not()) {
                     User.saveFirstLogin(it.firstLogin)
                 }
-                ARouter.getInstance().build(RouterUrlCommon.home)
-                    .withTransition(R.anim.leftin, R.anim.leftout)
-                    .navigation(mContext)
-                finish()
+                getUserSign()
             }
         })
     }
@@ -342,4 +342,35 @@ class LoginActivity : BaseMVVMActivity<ActivityLoginBinding, LoginViewModel>(),
         super.onDestroy()
     }
 
+    /**
+     * 获取腾讯IM密钥
+     */
+    private fun getUserSign() {
+        viewModel.getUserSign(User.getUserId(), fail = {
+        }, success = {
+            if (TextUtils.isEmpty(it).not()) {
+                loginIM(it!!)
+            }
+        })
+    }
+
+    /**
+     * 登录腾讯IM
+     */
+    private fun loginIM(sign: String) {
+        runOnUiThread {
+            V2TIMManager.getInstance().login(User.getUserId(), sign, object : V2TIMCallback {
+                override fun onSuccess() {
+                    ARouter.getInstance().build(RouterUrlCommon.home)
+                        .withTransition(R.anim.leftin, R.anim.leftout)
+                        .navigation(mContext)
+                    finish()
+                }
+
+                override fun onError(p0: Int, p1: String?) {
+                    "IM登陆失败".toast()
+                }
+            })
+        }
+    }
 }

+ 14 - 0
login/src/main/java/com/yingyang/login/ui/login/LoginViewModel.kt

@@ -61,4 +61,18 @@ class LoginViewModel : BaseViewModel() {
         success,
         fail
     )
+
+    /**
+     * 获取腾讯IM密钥
+     */
+    fun getUserSign(
+        id: String,
+        fail: ((msg: String) -> Unit)? = null,
+        success: ((success: String?) -> Unit)? = null,
+    ) = launchFlow(true) {
+        LOGIN_API.getUserSign(id)
+    }.runUI(
+        success,
+        fail
+    )
 }