Android 连接不上im 服务,

nicklee 2月前 158

    private suspend fun init(context: Context): Boolean = withContext(Dispatchers.Main) {
        suspendCancellableCoroutine { continuation ->
            Timber.i("初始化 野火 ${isInitialized}")
            if (!isInitialized) {

                ChatManager.init(context, "192.168.224.165")
                ChatManager.Instance().addIMServiceStatusListener(object : IMServiceStatusListener {
                    override fun onServiceConnected() {
                        Timber.e("野火 im服务链接成功")
                        isInitialized = true
                        continuation.resume(isInitialized)
                    }

                    override fun onServiceDisconnected() {
                        Timber.e("野火 Im服务断开了")
                        continuation.resume(false)
                    }

                })

                ChatManager.Instance().apply {
                    startLog()
                    //发送日志命令,当发送此文本消息时,会把协议栈日志发送到当前会话中,为空时关闭此功能。
                    setSendLogCommand("*#marslog#")
                    addRecallMessageListener {
                        //撤回消息监听
                        Timber.i("撤回消息监听:${it.messageId}")
                    }
                    addOnMessageUpdateListener {
                        //消息更新监听
                        Timber.i("消息更新监听:${it.messageId}")
                    }
                    addConnectionChangeListener { status ->
                        //链接状态监听
                        Timber.i("链接状态监听:${status}")
                    }
                }

            } else {
                continuation.resume(true)
            }
        }
    }
        val initResult = init(context)
        Timber.i("野火是否初始化 ${initResult} 线程 ${Thread.currentThread().name} ")

        if (!initResult) {
            return false
        }
        Timber.i("初始化野火成功 ")
        if (isLogin(userId)) {
            return true
        }
        this.userId = userId
        val clientId= ChatManager.Instance().clientId
        Timber.i("野火 clientId = ${clientId}")
        val imToken = imTokenProvider.getWildfireIMTokenOrNull(clientId)
            ?: return false
        //这是阻塞的,并且没有回调,所有链接结果需要在主动获取一边
        Timber.i("野火 开始链接 userid= ${userId} token = ${imToken}")
        val time = ChatManager.Instance().connect(userId, imToken)
        Timber.i("野火  链接使用的时间:${time}")
最新回复 (6)
  • x86 2月前
    引用 2
    看下这儿第 12 个问题:

    https://docs.wildfirechat.cn/faq/general.html?h=-6

    还有一种可能是,app-server 配置里面配置的 im-server 地址,和你客户端去连的不是同一个
  • nicklee 2月前
    引用 3
    我是都是动态获取的token, 每次都是通过SDK的 getClientId去获取的token,然后执行的connect
  • nicklee 2月前
    引用 4
    x86 看下这儿第 12 个问题: https://docs.wildfirechat.cn/faq/general.html?h=-6 还有一种可能是,app-server 配置里面配置的 im ...
    我是都是动态获取的token, 每次都是通过SDK的 getClientId去获取的token,然后执行的connect
  • x86 2月前
    引用 5
    现在是能访问到im-server,但是token不对,你跟着一楼的说明排查下
  • nicklee 2月前
    引用 6
    解决了 ,不好意思,后端的userId做了拼接,导致userId 对不上
  • HeavyRain 2月前
    引用 7
    最近常见的一种可能是客户端连接的IM服务和获取token的IM服务不是一个,可以从应用服务检查一下请求的地址跟客户端配置的IM服务地址是不是一致
返回