Parcourir la source

1.添加直播间心跳上传接口

王鹏鹏 il y a 2 ans
Parent
commit
bb83ebf1dd

+ 60 - 10
livebroadcast/src/main/java/com/yingyang/livebroadcast/activity/list/LiveBroadcastListActivity.kt

@@ -1,6 +1,7 @@
 package com.yingyang.livebroadcast.activity.list
 
 import android.annotation.SuppressLint
+import android.text.TextUtils
 import android.view.MotionEvent
 import android.view.View
 import androidx.recyclerview.widget.GridLayoutManager
@@ -8,6 +9,9 @@ import com.alibaba.android.arouter.facade.annotation.Route
 import com.alibaba.android.arouter.launcher.ARouter
 import com.hjq.permissions.OnPermissionCallback
 import com.hjq.permissions.XXPermissions
+import com.tencent.bugly.crashreport.CrashReport
+import com.tencent.imsdk.v2.V2TIMCallback
+import com.tencent.imsdk.v2.V2TIMManager
 import com.yingyang.livebroadcast.R
 import com.yingyang.livebroadcast.adapter.LiveBroadcastAdapter
 import com.yingyang.livebroadcast.databinding.ActivityLiveBroadcastListBinding
@@ -22,6 +26,7 @@ import com.yingyangfly.baselib.permissions.EsayPermissions
 import com.yingyangfly.baselib.permissions.Permission
 import com.yingyangfly.baselib.router.RouterUrlCommon
 import com.yingyangfly.baselib.utils.JumpUtil
+import com.yingyangfly.baselib.utils.User
 
 /**
  * 直播列表
@@ -198,20 +203,12 @@ class LiveBroadcastListActivity :
     private fun initPermission(url: String, id: String) {
         val isHasPermission = XXPermissions.isGranted(this, permissions)
         if (isHasPermission) {
-            ARouter.getInstance().build(RouterUrlCommon.liveBroadcast)
-                .withString("url", url)
-                .withString("liveId", id)
-                .withTransition(R.anim.leftin, R.anim.leftout)
-                .navigation(mContext)
+            getUserSign(url, id)
         } else {
             XXPermissions.with(this).permission(permissions).request(object : OnPermissionCallback {
                 override fun onGranted(permissions: List<String>, all: Boolean) {
                     if (all) { // 全部获取权限成功
-                        ARouter.getInstance().build(RouterUrlCommon.liveBroadcast)
-                            .withString("url", url)
-                            .withString("liveId", id)
-                            .withTransition(R.anim.leftin, R.anim.leftout)
-                            .navigation(mContext)
+                        getUserSign(url, id)
                     } else { // 部分获取权限成功
                         // 需要弹框处理
                         showTipDialog()
@@ -273,4 +270,57 @@ class LiveBroadcastListActivity :
         }
         return true
     }
+
+    /**
+     * 获取腾讯IM密钥
+     */
+    private fun getUserSign(url: String, id: String) {
+        viewModel.getUserSign(User.getUserId(), fail = {
+        }, success = {
+            if (TextUtils.isEmpty(it).not()) {
+                loginIm(it!!, url, id)
+            }
+        })
+    }
+
+    /**
+     * 登录腾讯IM
+     */
+    private fun loginIm(sign: String, url: String, id: String) {
+        V2TIMManager.getInstance().login(User.getUserId(), sign, object : V2TIMCallback {
+            override fun onSuccess() {
+                ARouter.getInstance().build(RouterUrlCommon.liveBroadcast)
+                    .withString("url", url)
+                    .withString("liveId", id)
+                    .withTransition(R.anim.leftin, R.anim.leftout)
+                    .navigation(mContext)
+            }
+
+            override fun onError(p0: Int, p1: String?) {
+                CrashReport.postCatchedException(
+                    Throwable(
+                        User.getName() + "直播间IM登陆报错,直播间信息:" + id + " ,用户信息:" +
+                                User.getUserId() + "  \n" + User.getName() + " ,错误信息:" + p0
+                    )
+                )
+            }
+
+        })
+    }
+
+    override fun onDestroy() {
+        runOnUiThread {
+            val stastus = V2TIMManager.getInstance().loginStatus
+            if (V2TIMManager.V2TIM_STATUS_LOGINED == stastus) {
+                V2TIMManager.getInstance().logout(object : V2TIMCallback {
+                    override fun onSuccess() {
+                    }
+
+                    override fun onError(p0: Int, p1: String?) {
+                    }
+                })
+            }
+        }
+        super.onDestroy()
+    }
 }

+ 14 - 0
livebroadcast/src/main/java/com/yingyang/livebroadcast/activity/list/LiveBroadcastListViewModel.kt

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