默认
发表评论 32
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
引用:JackJiang 发表于 2017-07-14 15:14
不理解什么是快速登陆。

你可以在客户端收到被踢指令时立即调用sedLoginout指令退出网络。

请问下, 我在V3版mobileimsdk实现同一账号多设备登录踢调功能遇到的问题

问题1:    我在客户端调用sendLoginout后,新登录的设备也会掉线(之后会再重连),怎么解决?

服务端代码:
	//TODO 同一账号的重复登陆情况可在此展开处理逻辑
			try {
				LocalSendHelper.sendData(session,ProtocalFactory.createCommonData(
						"OUT", "0", user_id, false, null, 5));
			} catch (Exception e) {
				// TODO 尚未处理异常
				e.printStackTrace();
			}


客户端代码
@Override
	public void onTransBuffer(String fingerPrintOfProtocal, String userid, String dataContent, int typeu)
	{
		Log.d(TAG, "【DEBUG_UI】[typeu="+typeu+"]收到来自用户"+userid+"的消息:"+dataContent);

		if(mainGUI != null)
		{
            if(dataContent.equals("OUT")){
                mainGUI.doLogout();
            }else {
                Toast.makeText(mainGUI, userid+"说:"+dataContent, Toast.LENGTH_SHORT).show();
                this.mainGUI.showIMInfo_black(userid+"说:"+dataContent);
            }
		}
	}

评论 32
引用:JackJiang 发表于 2017-07-16 22:09
你详细理解一下我在10楼的回答。同一账号和重复登陆问题你需要自已去实现相关的逻辑(在UserProcessor里 ...

谢谢回复,我想要的逻辑是,同一账号只能在一个设备登录,后登录的把之前登录的踢掉 (新登录的设备无感知).
我看了10楼的您的回复了,我是在OnlineProcessor里中putUser方法您的TODO注释中 添加的退出指令(推送普通消息)然后客户端收到推送内容判断是否是退出,然后调用退出方法
                                try{
                                        code = LocalUDPDataSender.getInstance(MainActivity.this).sendLoginout();
                                }
                                catch (Exception e){
                                        Log.w(TAG, e);
                                }
                                IMClientManager.getInstance(MainActivity.this).resetInitFlag();
                                return code;


实际效果就是新登录的设备也会退出一次,之后再重连
看了下源码,OnlineProcessor中putUser被调用之时,新登录的session已经建立了(存了同样的user_id)
所以在putUser方法或在onUserLoginAction_CallBack中进行重复登录逻辑处理没有什么区别,不知道这样理解是否正确?
你提供的LogicProcessor源码--processLogin方法
                                {
                                        session.setAttribute(OnlineProcessor.USER_ID_IN_SESSION_ATTRIBUTE, loginInfo.getLoginUserId());
                                        OnlineProcessor.getInstance().putUser(loginInfo.getLoginUserId(), session);
                                        
                                        serverCoreHandler.getServerEventListener().onUserLoginAction_CallBack(
                                                        loginInfo.getLoginUserId(), loginInfo.getExtra(), session);
                                }


Ps:没有找到你说的UserProcessor在哪.

引用:tiandao 发表于 2017-07-14 16:27
搜嘎,我去研究up的最新版

你好,你实现功能了吗?能否贴个示例代码?
引用:JackJiang 发表于 2017-07-17 10:20
UserProcessor只在MobileIMSDK v2版里有,在v3里对应的是OnlineProcessor,我说错了。

我有空了在下一 ...

非常希望您能提供一个实现互踢逻辑的demo.

我之前有试过,没有达到效果,(刚接触这个sdk没多久,理解的不是很透)

遇到的问题 1:  服务器主动断开之前登录的socket,如何能保证旧设备收到"被踢"指令(以便Release---释放客户端监听)?
问题2:如果想要不影响新登录的账号,应该在建立新的session之前,处理掉之前旧设备的session,不知道如何做到
问题3:有想过把之前设备登录的userId重命名,然后让它自己慢慢处理退出指令,不知道能不能这样做?

总之 还是希望您能提供一个demo
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部