初始化 IM SDK 后,您需要调用 SDK 登录接口,验证帐号身份,获得帐号的功能使用权限。登录 IM SDK 成功后,才能正常使用消息、会话等功能。
注意除了获取会话列表、拉取历史消息这两个接口以外,SDK 的各项功能接口必须在登录成功后才能调用。因此在使用其他功能之前,请务必登录且确保登录成功,否则可能导致功能异常或不可用!
获取会话列表、拉取历史消息接口允许在登录失败的情况下调用,此时接口返回的是本地缓存的会话列表和历史消息,可用于无网络情况下展示。
首次登录一个 IM 帐号时,不需要先注册这个帐号,直接登录即可。此时 IM 在登录过程中发现是未注册的帐号,会自动注册。
您可以调用 login
(Android / iOS & Mac) 接口进行登录。
login
接口的关键参数如下:
参数 | 含义 | 说明 |
---|---|---|
UserID | 登录用户唯一标识 | 建议只包含大小写英文字母(a-z、A-Z)、数字(0-9)、下划线(_)和连词符(-)。长度不超过 32 字节。 |
UserSig | 登录票据 | 由您的业务服务器进行计算以保证安全。计算方法请参考 UserSig 后台 API。 |
您需要在以下场景调用 login
接口:
login
接口的回调会返回 ERR_USER_SIG_EXPIRED(6206)
或 ERR_SVR_ACCOUNT_USERSIG_EXPIRED(70001)
错误码,此时请您生成新的 userSig 重新登录。onUserSigExpired
(Android / iOS & Mac) 回调,此时需要您生成新的 userSig 并重新登录。onKickedOffline
(Android / iOS & Mac) 回调通知给您,此时可以在 UI 提示用户,并调用 login
重新登录。以下场景无需调用 login
接口:
login
函数,IM SDK 会自动上线。注意:
- 调用 IM SDK 接口成功登录后,将会开始计算 DAU,请根据业务场景合理调用登录接口,避免出现 DAU 过高的情况。
- 在一个 App 中,IM SDK 不支持多个帐号同时在线,如果同时登录多个帐号,只有最后登录的帐号在线。
示例代码如下:
String userID = "your user id";
String userSig = "userSig from your server";
V2TIMManager.getInstance().login(userID, userSig, new V2TIMCallback() {
@Override
public void onSuccess() {
Log.i("imsdk", "success");
}
@Override
public void onError(int code, String desc) {
// 如果返回以下错误码,表示使用 UserSig 已过期,请您使用新签发的 UserSig 进行再次登录。
// 1. ERR_USER_SIG_EXPIRED(6206)
// 2. ERR_SVR_ACCOUNT_USERSIG_EXPIRED(70001)
// 注意:其他的错误码,请不要在这里调用登录接口,避免 IM SDK 登录进入死循环。
Log.i("imsdk", "failure, code:" + code + ", desc:" + desc);
}
});
在登录成功后,通过调用getLoginUser
(Android / iOS & Mac) 获取登录用户 UserID。
如果登录失败,获取的登录用户 UserID 为空。
示例代码如下:
// 获取登录成功的用户 UserID
String loginUserID = V2TIMManager.getInstance().getLoginUser();
通过调用getLoginStatus
(Android / iOS & Mac) 获取登录状态,如果用户已经处于已登录和登录中状态,请勿再频繁调用登录接口登录。IM SDK 支持的登录状态,如下表所示:
登录状态 | 含义 |
---|---|
V2TIM_STATUS_LOGINED | 已登录 |
V2TIM_STATUS_LOGINING | 登录中 |
V2TIM_STATUS_LOGOUT | 无登录 |
示例代码如下:
您可以在腾讯云控制台配置 IM SDK 的多端登录策略。
多端登录策略有多种可选,例如“移动或桌面平台可有1种平台在线+Web可同时在线”、“不同平台均可同时在线“。
相关配置请参考:登录设置。
您可以在腾讯云控制台配置 IM SDK 的同平台可登录实例数配置,即相同平台的设备可支持几个同时在线。
此功能仅限旗舰版使用。目前 Web 端可同时在线个数最多为 10 个。Android、iPhone、iPad、Windows、Mac 平台可同时在线设备个数最多为 3 个。
相关配置请参考:登录设置。
调用 login
接口时,如果同一个帐号的多端登录策略超出限制,新登录的实例会把之前已登录的实例踢下线。
如果您在初始化时调用了 addIMSDKListener
(Android / iOS & Mac) 添加了 SDK 监听器,对于之前已登录的一方,会收到 onKickedOffline
(Android / iOS & Mac) 回调。
普通情况下,如果您的应用生命周期跟 IM SDK 生命周期一致,退出应用前可以不登出,直接退出即可。
但有些特殊场景,例如您只在进入特定界面后才使用 IM SDK,退出界面后不再使用,此时可以调用logout
(Android / iOS & Mac) 接口登出 SDK。登出成功后,不会再收到其他人发送的新消息。注意这种情况下,登出成功后还需要调 unInitSDK
(Android / iOS & Mac) 对 SDK 进行反初始化。
示例代码如下:
V2TIMManager.getInstance().logout(new V2TIMCallback() {
@Override
public void onSuccess() {
Log.i("imsdk", "success");
}
@Override
public void onError(int code, String desc) {
Log.i("imsdk", "failure, code:" + code + ", desc:" + desc);
}
});
如果您希望在应用中实现帐号切换的需求,只需要每次切换帐号时调用 login
即可。
例如已经登录了 alice,现在要切换到 bob,只需要直接 login bob 即可。login bob 前无需显式调用 logout alice,IM SDK 内部会自动处理。
本页内容是否解决了您的问题?