NIMSDK-AOS  9.19.0
LoginInfo.java
浏览该文件的文档.
1 package com.netease.nimlib.sdk.auth;
2 
3 import android.os.Parcel;
4 import android.os.Parcelable;
5 import android.text.TextUtils;
6 
7 import androidx.annotation.NonNull;
8 
9 import com.netease.nimlib.SDKCache;
10 import com.netease.nimlib.biz.constant.IAuthService;
11 import com.netease.nimlib.log.NimLog;
12 import com.netease.nimlib.util.StringUtil;
13 
14 import org.json.JSONException;
15 import org.json.JSONObject;
16 
17 import java.io.Serializable;
18 import java.util.Objects;
19 
20 /**
21  * 用户登录认证信息。
22  */
23 public class LoginInfo implements Serializable, Parcelable {
24  private static final String KEY_ACCOUNT = "KEY_ACCOUNT";
25  private static final String KEY_TOKEN = "KEY_TOKEN";
26  private static final String KEY_AUTH_TYPE = "KEY_AUTH_TYPE";
27  private static final String KEY_LOGIN_EXT = "KEY_LOGIN_EXT";
28  private static final String KEY_APP_KEY = "KEY_APP_KEY";
29  private static final String KEY_CUSTOM_CLIENT_TYPE = "KEY_CUSTOM_CLIENT_TYPE";
30 
31 
32  private final String account;
33 
34  private final String token;
35 
36  private int authType;
37 
38  private String loginExt;
39 
40  private String appKey;
41 
42  private int customClientType;
43 
44  /**
45  * 构造用户登录信息。
46  * @par 参数说明:
47  * <table>
48  * <tr>
49  * <th>**参数名称**</th>
50  * <th>**描述**</th>
51  * </tr>
52  * <tr>
53  * <td>account</td>
54  * <td>用户账号,对应云信 IM 账号 accid</td>
55  * </tr>
56  * <tr>
57  * <td>token</td>
58  * <td>登录 token</td>
59  * </tr>
60  * </table>
61  */
62  public LoginInfo(String account, String token) {
63  this.account = account == null ? null : account.toLowerCase();
64  this.token = token;
65  }
66 
67  /**
68  * 构造用户登录信息。
69  * @par 参数说明:
70  * <table>
71  * <tr>
72  * <th>**参数名称**</th>
73  * <th>**描述**</th>
74  * </tr>
75  * <tr>
76  * <td>account</td>
77  * <td>用户账号,对应云信 IM 账号 accid</td>
78  * </tr>
79  * <tr>
80  * <td>token</td>
81  * <td>登录 token</td>
82  * </tr>
83  * <tr>
84  * <td>appKey</td>
85  * <td>当前应用的 AppKey<br>一个 AppKey 对应一个账号体系,如果不填,则优先使用 SDKOptions 中配置的 AppKey,如果没有则使用 AndroidManifest 中配置的 AppKey<br>即 AppKey 的取值优先级为:LoginInfo中的>SDKOptions 中的>AndroidManifest 中的 AppKey</td>
86  * </tr>
87  * </table>
88  */
89  public LoginInfo(String account, String token, String appKey) {
90  this(account, token);
91  this.appKey = appKey;
92  }
93 
94 
95 
96  /**
97  * 构造用户登录信息。
98  * @par 参数说明:
99  * <table>
100  * <tr>
101  * <th>**参数名称**</th>
102  * <th>**描述**</th>
103  * </tr>
104  * <tr>
105  * <td>account</td>
106  * <td>用户账号,对应云信 IM 账号 accid</td>
107  * </tr>
108  * <tr>
109  * <td>token</td>
110  * <td>登录 token</td>
111  * </tr>
112  * <tr>
113  * <td>appKey</td>
114  * <td>当前应用的 AppKey<br>一个 AppKey 对应一个账号体系,如果不填,则优先使用 SDKOptions 中配置的 AppKey,如果没有则使用 AndroidManifest 中配置的 AppKey<br>即 AppKey 的取值优先级为:LoginInfo中的>SDKOptions 中的>AndroidManifest 中的 AppKey</td>
115  * </tr>
116  * <tr>
117  * <td>customClientType</td>
118  * <td>自定义客户端类型,对应云信控制台中的自定义终端类型(需提前在控制台添加)。小于等于 0 视为没有自定义类型</td>
119  * </tr>
120  * </table>
121  */
122  public LoginInfo(String account, String token, String appKey, int customClientType) {
123  this(account, token, appKey);
124  this.customClientType = customClientType;
125  }
126 
127  /**
128  * 构造用户登录信息。
129  * @par 使用场景:
130  * 当需要在登录时传入 authType 或 loginExt 时,即需要通过动态登录或第三方回调登录时,需要使用该构造函数。
131  * */
132  protected LoginInfo(Parcel in) {
133  account = in.readString();
134  token = in.readString();
135 
136  authType = in.readInt();
137  loginExt = in.readString();
138 
139  appKey = in.readString();
140  customClientType = in.readInt();
141  }
142 
143  public static final Creator<LoginInfo> CREATOR = new Creator<LoginInfo>() {
144  @Override
145  public LoginInfo createFromParcel(Parcel in) {
146  return new LoginInfo(in);
147  }
148 
149  @Override
150  public LoginInfo[] newArray(int size) {
151  return new LoginInfo[size];
152  }
153  };
154 
155  /**
156  * 用户账号,对应云信 IM 账号 accid。
157  */
158  public String getAccount() {
159  return account;
160  }
161 
162  /**
163  * 登录 token。
164  */
165  public String getToken() {
166  return token;
167  }
168 
169  /**
170  * SDK 登录 IM 的鉴权方式。
171  * <ul><li>0(默认):表示最初的 loginToken的校验方式,即通过静态 token 鉴权。</li>
172  * <li>1:表示基于 appSecret 计算的 token 鉴权方式,即通过动态 token 鉴权。</li>
173  * <li>2:表示基于第三方回调的 token 鉴权方式,使用该方式时,登录信息中必须传入自定义扩展字段。</li></ul>
174  */
175  public int getAuthType() {
176  return authType;
177  }
178 
179  /**
180  * 登录自定义扩展字段,用于第三方服务器鉴权。当 authType 为 2 时,必须传入该字段。
181  */
182  public String getLoginExt() {
183  return loginExt;
184  }
185 
186  /**
187  * 当前应用的 AppKey。
188  */
189  public String getAppKey() {
190  return appKey;
191  }
192 
193  /**
194  * 自定义客户端类型,对应云信控制台中的自定义终端类型(需提前在控制台添加)。小于等于 0 视为没有自定义类型。
195  */
196  public int getCustomClientType() {
197  return customClientType;
198  }
199 
200  /**
201  * 检查用户登录信息,验证该用户是否已存在,该用户信息是否有效。
202  *
203  * @return 是否有效
204  */
205  public boolean valid() {
206  if (authType == IAuthService.AuthType.DEFAULT) {
207  return !TextUtils.isEmpty(account) && !TextUtils.isEmpty(token);
208  } else {
209  return !TextUtils.isEmpty(account);
210  }
211  }
212 
213  @Override
214  public boolean equals(Object o) {
215  if (this == o) return true;
216  if (o == null || getClass() != o.getClass()) return false;
217  LoginInfo loginInfo = (LoginInfo) o;
218  return authType == loginInfo.authType &&
219  customClientType == loginInfo.customClientType &&
220  Objects.equals(account, loginInfo.account) &&
221  Objects.equals(token, loginInfo.token) &&
222  Objects.equals(loginExt, loginInfo.loginExt) &&
223  Objects.equals(appKey, loginInfo.appKey);
224  }
225 
226 
227  @NonNull
228  @Override
229  public String toString() {
230  return "LoginInfo{" +
231  "account='" + account + '\'' +
232  ", authType=" + authType +
233  ", customClientType=" + customClientType +
234  '}';
235  }
236 
237  @Override
238  public int hashCode() {
239  return Objects.hash(account, token, authType, loginExt, appKey, customClientType);
240  }
241 
242  @Override
243  public int describeContents() {
244  return 0;
245  }
246 
247  @Override
248  public void writeToParcel(Parcel dest, int flags) {
249  dest.writeString(account);
250  dest.writeString(token);
251 
252  dest.writeInt(authType);
253  dest.writeString(loginExt);
254 
255  dest.writeString(appKey);
256  dest.writeInt(customClientType);
257  }
258 
259  public JSONObject toJson() {
260  JSONObject object = new JSONObject();
261  try {
262  object.putOpt(KEY_ACCOUNT, account);
263  object.putOpt(KEY_TOKEN, token);
264  object.putOpt(KEY_AUTH_TYPE, authType);
265  object.putOpt(KEY_LOGIN_EXT, loginExt);
266  object.putOpt(KEY_APP_KEY, appKey);
267  object.putOpt(KEY_CUSTOM_CLIENT_TYPE, customClientType);
268  } catch (JSONException e) {
269  e.printStackTrace();
270  }
271  return object;
272  }
273 
274  public static LoginInfo fromJson(JSONObject object) {
275  if (object == null) {
276  return null;
277  }
278 
279  final String account = object.optString(KEY_ACCOUNT, null);
280  final String token = object.optString(KEY_TOKEN, null);
281  final int authType = object.optInt(KEY_AUTH_TYPE);
282  final String loginExt = object.optString(KEY_LOGIN_EXT, null);
283  final String appKey = object.optString(KEY_APP_KEY, null);
284  final int customClientType = object.optInt(KEY_CUSTOM_CLIENT_TYPE);
285 
286  return new LoginInfoBuilder(account, token, authType, loginExt).withAppKey(appKey).withCustomClientType(customClientType).build();
287  }
288 
289 
290  public static final class LoginInfoBuilder {
291  private String account;
292  private String token;
293 
294  private int authType;
295  private String loginExt;
296 
297  private String appKey;
298  private int customClientType;
299 
300  public LoginInfoBuilder(String account, String token, int authType, String loginExt) {
301  this.account = account;
302  this.token = token;
303 
304  this.authType = authType;
305  this.loginExt = loginExt;
306  }
307 
308  public static LoginInfoBuilder loginInfoDefault(String account, String token) {
309  return new LoginInfoBuilder(account, token, IAuthService.AuthType.DEFAULT, "");
310  }
311 
312  public static LoginInfoBuilder loginInfoDynamic(String account, String token) {
313  return new LoginInfoBuilder(account, token, IAuthService.AuthType.DYNAMIC, "");
314  }
315 
316  public static LoginInfoBuilder loginInfoThirdParty(String account, String token, String loginExt) {
317  return new LoginInfoBuilder(account, token, IAuthService.AuthType.THIRDPARTY, loginExt);
318  }
319 
320  public static LoginInfoBuilder loginInfoThirdPartyDynamic(String account, String token) {
321  return new LoginInfoBuilder(account, token, IAuthService.AuthType.THIRDPARTY, "");
322  }
323 
324  public LoginInfoBuilder withAppKey(String appKey) {
325  this.appKey = appKey;
326  return this;
327  }
328 
329  public LoginInfoBuilder withCustomClientType(int customClientType) {
330  this.customClientType = customClientType;
331  return this;
332  }
333 
334  public LoginInfoBuilder withAuthType(int authType) {
335  this.authType = authType;
336  return this;
337  }
338 
339  public LoginInfoBuilder withLoginExt(String loginExt) {
340  this.loginExt = loginExt;
341  return this;
342  }
343 
344  public LoginInfo build() {
345  LoginInfo loginInfo = new LoginInfo(account, token);
346 
347  loginInfo.authType = this.authType;
348  loginInfo.loginExt = this.loginExt;
349 
350  loginInfo.appKey = this.appKey;
351  loginInfo.customClientType = this.customClientType;
352  return loginInfo;
353  }
354  }
355 }
static LoginInfo fromJson(JSONObject object)
Definition: LoginInfo.java:274
int getAuthType()
SDK 登录 IM 的鉴权方式。
Definition: LoginInfo.java:175
LoginInfo(String account, String token, String appKey)
构造用户登录信息。
Definition: LoginInfo.java:89
int getCustomClientType()
自定义客户端类型,对应云信控制台中的自定义终端类型(需提前在控制台添加)。小于等于 0 视为没有自定义类...
Definition: LoginInfo.java:196
boolean valid()
检查用户登录信息,验证该用户是否已存在,该用户信息是否有效。
Definition: LoginInfo.java:205
String getAppKey()
当前应用的 AppKey。
Definition: LoginInfo.java:189
void writeToParcel(Parcel dest, int flags)
Definition: LoginInfo.java:248
String getAccount()
用户账号,对应云信 IM 账号 accid。
Definition: LoginInfo.java:158
LoginInfo(String account, String token, String appKey, int customClientType)
构造用户登录信息。
Definition: LoginInfo.java:122
用户登录认证信息。
Definition: LoginInfo.java:23
LoginInfo(Parcel in)
构造用户登录信息。
Definition: LoginInfo.java:132
LoginInfo(String account, String token)
构造用户登录信息。
Definition: LoginInfo.java:62
String getLoginExt()
登录自定义扩展字段,用于第三方服务器鉴权。当 authType 为 2 时,必须传入该字段。
Definition: LoginInfo.java:182
static final Creator< LoginInfo > CREATOR
Definition: LoginInfo.java:143
String getToken()
登录 token。
Definition: LoginInfo.java:165