集成登录-Windows
简介
在做登录操作之前请先保证已经完成SDK初始化,你必须先集成登录才能实现通信等功能。
实现登录流程
1.创建并获取JCEngine实例
创建JCEngine请参考导入SDK。 获取JCEngine实例需要调用JCEngineManager.getInstance().getJCEngine();
2.登录
login 登录会首先查询用户名是否已经创建过帐号,如果没有,则创建帐号然后再发起登录服务器的操作。如果帐号已经存在,则直 接发起登录服务器的操作。
如果您已集成您自己的帐号体系,则终端流程与帐号已经存在的方式相同,将会直接发起登录。此时 JusTalk Cloud 服务器将向您的鉴权服务器发起鉴权请求。用户名将是帐号用户名的完整形式,帐号密码作为鉴权临时码。
例如,调用 mJCEngine.login 的 userId参数为 “alice”,您的域为 example.com,则鉴权请求中的用户名为 "[username:alice@example.com]"。鉴权临时码为 password 的值。
当前版本使用的是免鉴权系统。
登录操作调用如下接口
mJCEngine.login(userId, password);
处理登录后回调
当开发者调用login接口后,登录成功后界面会收到onConnected(string userId)的回调。界面可以在这个回调函数里做出界面处理。具体代码可以参考关键代码解析。
登录成功之后 SDK 会自动保持与服务器的连接状态。直到用户主动调用登出接口,或者因为帐号在其他设备登录导致该设备登出。现有帐号体系中一个用户名只能同时登录在一台设备上。后一个登录的设备登录成功之后,将会把前一个设备踢下线。
登录之后,您可以开始操作其他业务,具体集成请参考:Windows 集成通信。
3.登出
登出操作调用登出接口:mJCEngine.logout();
4.查询登录状态
调用接口isOnline() 来查询当前登录状态, 接口返回true时,表示终端处于登录状态。返回false时,表示未登录。
关键代码解析
...
using JcApi.Api;
...
namespace MyLoginPresenter
{
public class LoginPresenter
{
//登录界面view
private ILoginControlView loginView;
//JCEngine实例
private JCEngine mJCEngine;
//事件管理器
private MyEventHandler mEventHandler;
public LoginPresenter()
{
}
//获取JCEngine实例
protected JCEngine engine()
{
return JCEngineManager.getInstance().getJCEngine();
}
//获取事件管理器实例
protected USEventHandler eventHandler()
{
return JCEngineManager.getInstance().getEventHandler();
}
//初始化
public LoginPresenter(ILoginControlView iLoginView)
{
this.loginView = iLoginView;
mJCEngine = engine();
mEventHandler = new MyEventHandler(this);
//添加事件管理器
eventHandler().addEventHandler(mEventHandler);
}
//登录接口
public void Login(string userId, string password)
{
mJCEngine.login(userId, password);
...
}
//销毁接口
public void Dispose()
{
//登出
mJCEngine.logout();
//移除事件管理器
eventHandler().removeEventHandler(mEventHandler);
mJCEngine = null;
}
//事件管理器子类
public class MyEventHandler : SimpleEventHandler
{
private LoginPresenter mLoginPresen
public MyEventHandler(LoginPresenter baseLoginPresenter)
{
mLoginPresenter = baseLoginPresenter;
}
//登录成功的回调
public override void onConnected(string userId)
{
//登录成功后的界面处理
...
}
...
}
}