IM 登录最佳实践
更新时间: 2024/04/17 15:00:34
登录对于 IM 产品来说至关重要,是后续业务顺利进行的前提条件。开发者集成 NIM SDK 的各项能力时,如果未能正确使用登录接口或处理登录状态,将引发不必要的问题,影响开发进度。
本文介绍如何以最佳姿势实现 IM 登录。
- 本文中的登录均指调用
login
方法登录,如需自动登录请自行在应用层实现。 - 本文以静态 Token 鉴权为例,更多登录方式请参见登录及登出 IM。
前提条件
-
已在云信控制台创建应用,获取 App Key。
-
已集成 SDK。
-
已通过服务端注册 IM 账号 ,获取 IM 账号和对应的静态
token
。如果仅需要测试和调试,您可通过控制台注册 IM 测试账号。线上生产环境必须将测试账号及其 Token 替换为服务端生成的正式 IM 账号和
token
。
实现方案
登录一般是在用户登录应用,即在应用的登录界面点击登录按钮时进行。通用的登录方案是先实现应用自身账号体系的登录,成功后再使用返回的 IM 账号和 token
进行 IM 登录。
实现步骤
- 调用
login
方法手动登录 IM。 - 调用后处理逻辑:
- 如果登录成功,保存 IM 账号和
token
到本地,用于下次应用启动时自动登录。 - 如果登录失败,清理本地保存的用户登录信息,防止下次应用启动时自动登录。
- 如果登录成功,保存 IM 账号和
请自行在应用层实现自动登录逻辑。
示例代码
Android
javaNIMClient.getService(V2NIMLoginService.class).login("account", "token", null, new V2NIMSuccessCallback<Void>() {
@Override
public void onSuccess(Void unused) {
// TODO
}
},
new V2NIMFailureCallback() {
@Override
public void onFailure(V2NIMError error) {
int code = error.getCode();
String desc = error.getDesc();
// TODO
}
});
iOS
objective-c- (void)login
{
NSString *account = @"account";
NSString *token = @"token";
[[NIMSDK sharedSDK].v2LoginService login:account token:token
option:nil
success:^{
NSLog(@"login succ");
}
failure:^(V2NIMError * _Nonnull error) {
NSLog(@"login fail: error = %@", error);
}];
}
macOS/Windows
cppV2NIMLoginOption option;
loginService.login(
"accountId",
"token",
option,
[]() {
// login succeeded
},
[](V2NIMError error) {
// login failed, handle error
});
Web/uni-app/小程序/uni-app/小程序
typescripttry {
await nim1.V2NIMLoginService.login("ACCOUNT_ID", "TOKEN", {
"forceMode": false
})
} catch (err) {
// TODO failed, check code
// console.log(err.code)
}
获取登录状态
通过调用 getLoginStatus
获取登录状态,如果用户已经处于已登录和登录中状态,请勿再频繁调用登录接口登录。
登录状态 | 描述 |
---|---|
V2NIM_LOGIN_STATUS_LOGOUT(0) | 已登出 |
V2NIM_LOGIN_STATUS_LOGINED(1) | 已登录 |
V2NIM_LOGIN_STATUS_LOGINING(2) | 正在登录 |
Android
javaV2NIMLoginStatus status = NIMClient.getV2NIMLoginService().getLoginStatus();
iOS
objective-c- (void)printLoginStatus:(V2NIMLoginStatus)status
{
switch (status) {
case V2NIM_LOGIN_STATUS_LOGOUT:
NSLog(@"login status = logout");
break;
case V2NIM_LOGIN_STATUS_LOGINING:
NSLog(@"login status = logining");
break;
case V2NIM_LOGIN_STATUS_LOGINED:
NSLog(@"login status = logined");
break;
default:
NSLog(@"login status = %ld", status);
}
}
V2NIMLoginStatus status = [[[NIMSDK sharedSDK] v2LoginService] getLoginStatus];
macOS/Windows
C++auto loginStatus = loginService.getLoginStatus();
Web/uni-app/小程序/uni-app/小程序
typescriptconst loginStatus = nim.V2NIMLoginService.getLoginStatus()
获取登录连接状态
IM 登录连接状态表示当前登录的 NIM SDK 实例与云信服务端的长连接状态,也可以理解为用户客户端和云信服务端的网络连接状态。
通过调用 getLoginStatus
获取登录连接状态,您可以根据不同的状态进行界面提示相应的业务操作。
登录连接状态 | 描述 |
---|---|
V2NIM_CONNECT_STATUS_DISCONNECTED(0) | SDK 未连接服务端 |
V2NIM_CONNECT_STATUS_CONNECTED(1) | SDK 已连接服务端 |
V2NIM_CONNECT_STATUS_CONNECTING(2) | SDK 正在与服务端连接 |
V2NIM_CONNECT_STATUS_WAITING(3) | SDK 正在等待与服务端重连 |
Android
javaV2NIMConnectStatus status= NIMClient.getV2NIMLoginService().getConnectStatus();
iOS
objective-cV2NIMConnectStatus status = [[[NIMSDK sharedSDK] v2LoginService] getConnectStatus];
macOS/Windows
cppauto connectStatus = loginService.getConnectStatus();
Web/uni-app/小程序/uni-app/小程序
typescriptconst connectStatus = nim.V2NIMLoginService.getConnectStatus()
此文档是否对你有帮助?