默认
发表评论 5
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] 请教MobileIMSDK退出登录后重新登录出现异常
阅读(475) | 评论(5 收藏 淘帖
2024-11-12 15:07:59.383 31720-32150 LocalDataSender          D  【IMCORE-TCP】发送登陆指令时,socket连接未就绪,首先开始尝试发起连接(登陆指令将在连接成功后的回调中自动发出)。。。。
2024-11-12 15:07:59.386 31720-32150 LocalSocketProvider    D  【IMCORE-TCP】tryConnectToHost并获取connection开始了...
2024-11-12 15:07:59.389 31720-31720 ClientCoreSDK             I    【IMCORE-TCP】【本地网络通知】检测本地网络已连接上了!
2024-11-12 15:07:59.389 31720-32150 LocalSocketProvider    D  【IMCORE-TCP】tryConnectToHost并获取connectio已完成。 .... continue ...
2024-11-12 15:07:59.393 31720-32151 LocalSocketProvider    I    【IMCORE-TCP】channel优雅退出开始。。。
2024-11-12 15:07:59.393 31720-32151 LocalSocketProvider    I    【IMCORE-TCP】channel优雅退出结束。

经过查看代码 net.x52im.mobileimsdk.android.ClientCoreSDK 设置的网络监听会触发 LocalSocketProvider.getInstance().closeLocalSocket(); 直接关闭了登录请求

有正常调用init与release方法

private final BroadcastReceiver networkConnectionStatusBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            ConnectivityManager connectMgr = (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);
            NetworkInfo mobNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
            NetworkInfo wifiNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            NetworkInfo ethernetInfo = connectMgr.getNetworkInfo(9);
            if (!(mobNetInfo != null && mobNetInfo.isConnected())
                    && !(wifiNetInfo != null && wifiNetInfo.isConnected())
                    // ## Bug FIX 20170228: 解决当Android系统用有线网连接时没有判断此网事件的问题
                    && !(ethernetInfo != null && ethernetInfo.isConnected())
            ) {
                Log.w(TAG, "【IMCORE-TCP】【本地网络通知】检测本地网络连接断开了!");
                LocalSocketProvider.getInstance().closeLocalSocket();
            } else {
                if (ClientCoreSDK.DEBUG)
                    Log.i(TAG, "【IMCORE-TCP】【本地网络通知】检测本地网络已连接上了!");
                LocalSocketProvider.getInstance().closeLocalSocket();   //暂时注释了这段代码没问题了 根据日志来看注册广播后马上会触发一次网络变化
            }
        }
    };

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:[已回复] 求教MobileIMSDK中用udp协议在4G网络登陆不上问题
推荐方案
评论 5
你做两件事:

1)把你的这个功能完整操作交互逻辑,拍个视频,我看看是什么样的产品功能逻辑
2)贴出你init 和release 的完整代码,我帮你分析分析是否有什么时机不合适
引用:JackJiang 发表于 2024-11-12 17:46
重新登陆前,init是在哪调用的

你可以参考这个帖子:《[已解决] 求助MobileIMSDK 退出登录再重新登录 ...

init是在fragment的create生命周期中调用

释放是再fragment的destroy中调用
引用:tom0gao 发表于 2024-11-12 17:40
目前IM类似微信嵌入了Fragment中 重新登录后会重新打开MainActivity 走生命周期流程去登录

在本地网络 ...

重新登陆前,init是在哪调用的

你可以参考这个帖子:《[已解决] 求助MobileIMSDK 退出登录再重新登录后出现203错误
引用:JackJiang 发表于 2024-11-12 16:30
不要去改sdk层的代码,跟这个无关。

你把你的代码贴出来,尤其是Init和release的调用时机

目前IM类似微信嵌入了Fragment中 重新登录后会重新打开MainActivity 走生命周期流程去登录

在本地网络通知那里 还有一个 Connection attempt cancelled by user 打印

Fragment->onViewCreated 调用了
object : SendLoginDataAsync(
            PLoginInfo(
                loginName,
                loginToken,
                ""
            )
        ) {
            /**
             * 登陆信息发送完成后将调用本方法(注意:此处仅是登陆信息发送完成
             * ,真正的登陆结果要在异步回调中处理哦)。
             *
             * @param code 数据发送返回码,0 表示数据成功发出,否则是错误码
             */
            override fun fireAfterSendLogin(code: Int) {}
        }.execute()

Fragment->onDestroyView 调用了
object : MBAsyncTask() {
            override fun doInBackground(vararg params: Any): Int {
                IMClientManager.getInstance().resetInitFlag()
                var code = -1
                try {
                    code = LocalDataSender.getInstance().sendLoginout()
                } catch (e: java.lang.Exception) {
                    e.printStackTrace()
                }
                return code
            }

            override fun onPostExecute(code: Int) {
                if (code == 0) {

                } else {

                }
            }
        }.execute()
不要去改sdk层的代码,跟这个无关。

你把你的代码贴出来,尤其是Init和release的调用时机
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部