NIMSDK-AOS  10.9.76
NIMClient.java
浏览该文件的文档.
1 package com.netease.nimlib.sdk;
2 
3 import android.app.Application;
4 import android.content.Context;
5 import android.text.TextUtils;
6 import android.util.Log;
7 
8 import com.netease.nimlib.BuildConfig;
9 import com.netease.nimlib.SDKCache;
10 import com.netease.nimlib.SDKCacheUI;
11 import com.netease.nimlib.SDKState;
12 import com.netease.nimlib.SDKStateUI;
13 import com.netease.nimlib.abtest.ABTestManager;
14 import com.netease.nimlib.apm.NimEventStrategyManager;
15 import com.netease.nimlib.common.infra.Handlers;
16 import com.netease.nimlib.invocation.sync.base.APISyncHelper;
17 import com.netease.nimlib.log.NimLog;
18 import com.netease.nimlib.log.model.LogDesensitizationConfigHelper;
19 import com.netease.nimlib.plugin.interact.IChatRoomInteract;
20 import com.netease.nimlib.plugin.interact.PluginInteractManager;
21 import com.netease.nimlib.report.ApiTraceEventManager;
28 import com.netease.nimlib.util.storage.NimStorageUtil;
29 import com.netease.nimlib.v2.impl.V2NIMErrorImpl;
30 
31 import java.util.Objects;
32 
33 /**
34  * SDK 核心接口类,用于初始化 SDK,获取各个服务能力接口,获取当前状态等功能。
35  */
36 public class NIMClient {
37 
38  public static final String TAG = "NIMClient";
39  /**
40  * [初始化 SDK 方式一] 在 {@link Application#onCreate()} 中调用该方法在应用启动时初始化 SDK。
41  *
42  * @par 使用场景:
43  * 属于常规初始化方式,适用绝大多数的初始化场景。
44  * @par 使用建议:
45  * 建议在 {@link Application#onCreate()} 中添加进程判断,SDK 的初始化方法必须在主进程中调用。不要把业务逻辑写入 core 进程,理论上,core 进程的 {@link Application#onCreate()}(或者 Application 的其他方法)只能做与 NIM SDK 相关的工作。IM 进程启动时也不要初始化第三方库。
46  * @par 调用时机:
47  * 请确保在调用其他 API 前先调用该方法初始化 SDK。
48  * @par 参数说明:
49  * <table>
50  * <tr>
51  * <th>参数名称</th>
52  * <th>描述</th>
53  * </tr>
54  * <tr>
55  * <td>context</td>
56  * <td>调用上下文</td>
57  * </tr>
58  * <tr>
59  * <td>info</td>
60  * <td>手动登录成功的用户信息。如 account(即 accid)和 token<ul><li>如果提供,SDK 在初始化的同时将自动调用登录接口进行登录(同时将打开用户相关的数据库)</li><li>如果当前还没有登录成功的用户,传入 null,后续可以手动调用 {@link com.netease.nimlib.sdk.auth.AuthService#login(LoginInfo)} 方法进行登录</li></ul></td>
61  * </tr>
62  * <tr>
63  * <td>options</td>
64  * <td>SDK 的其他初始化配置。如 App Key、第三方离线推送配置、是否开启会话已读多端同步等<ul><li>其中 App Key 如果已在集成 SDK 时(AndroidManifest.xml 中通过 meta-data 的方式设置)传入,则此处不需要再传入,<strong>否则必须传入</strong>,如果两处都设置了,取此处的值</li><li>如果传入为 null,则全部使用默认参数</li></ul></td>
65  * </tr>
66  * </table>
67  * @par 相关回调:
68  * {@link com.netease.nimlib.sdk.lifecycle.SdkLifecycleObserver#observeMainProcessInitCompleteResult(Observer, boolean)} :初始化进程回调
69  *
70  */
71  public static void init(Context context, LoginInfo info, SDKOptions options) {
72  final long startTime = System.currentTimeMillis();
73  if (LogDesensitizationConfigHelper.printToLogcat(options)) {
74  Log.i(TAG, "NIMClient init");
75  }
76  SDKCache.config(context, info, options);
77 
78  // 老的初始化接口,需要判断进程
79  if (NIMUtil.isMainProcess(context)) {
80  SDKCache.initUI();
81  Handlers.sharedInstance().newMiscHandler().post(() -> {
82  ApiTraceEventManager.getInstance().recordPendingTrackEvent(startTime,"NIMClient","init");
83  });
84  }
85  }
86 
87  /**
88  * [初始化 SDK 方式二] 在 {@link Application#onCreate()} 中配置 SDK(仅仅是配置,不影响性能),具体可配置的参数同 {@link NIMClient#init(Context, LoginInfo, SDKOptions)}。
89  *
90  * @par 使用场景:
91  * 适用于需要用户授权隐私信息采集的业务场景。与常规初始化 SDK 方式相比,该方式耗时更少,且更适配弱 IM 场景(应用仅需在其部分业务中使用 IM 能力(不需要在应用启动时就做 IM 自动登录),且并不需要保证消息、通知和数据的实时性的场景)。
92  * @par 使用建议:
93  * 该初始化方式一般不再需要做进程判断。
94  * @par 使用限制:
95  * 该接口适用的 SDK 版本:v5.0.0及以上。<br>
96  * {@link NIMClient#config(Context, LoginInfo, SDKOptions)} 方法必须与 {@link NIMClient#initSDK()} 方法搭配使用,在应用代码的任意位置初始化 SDK。
97  * @par 参数说明:
98  * <table>
99  * <tr>
100  * <th>参数名称</th>
101  * <th>描述</th>
102  * </tr>
103  * <tr>
104  * <td>context</td>
105  * <td>调用上下文</td>
106  * </tr>
107  * <tr>
108  * <td>info</td>
109  * <td>手动登录成功的用户信息。如 account(即 accid)和 token<ul><li>如果提供,SDK 在初始化的同时将自动调用登录接口进行登录(同时将打开用户相关的数据库)</li><li>如果当前还没有登录成功的用户,传入 null,后续可以手动调用 {@link com.netease.nimlib.sdk.auth.AuthService#login(LoginInfo)} 方法进行登录</li></ul></td>
110  * </tr>
111  * <tr>
112  * <td>options</td>
113  * <td>SDK 的其他初始化配置。如 App Key、第三方离线推送配置、是否开启会话已读多端同步等<ul><li>其中 App Key 如果已在集成 SDK 时(AndroidManifest.xml 中通过 meta-data 的方式设置)传入,则此处不需要再传入,<strong>否则必须传入</strong>,如果两处都设置了,取此处的值</li><li>如果传入为 null,则全部使用默认参数</li><li>可通过 {@link SDKOptions#asyncInitSDK} 参数配置进行同步/异步初始化</li><li>可通过 {@link SDKOptions#reducedIM} 参数实现支持弱 IM 模式,延迟加载 push 进程服务等<strong>(非弱 IM 场景慎用)</strong></li></ul></td>
114  * </tr>
115  * </table>
116  *
117  */
118  public static void config(Context context, LoginInfo info, SDKOptions options) {
119  final long startTime = System.currentTimeMillis();
120  if (LogDesensitizationConfigHelper.printToLogcat(options)) {
121  Log.i(TAG, "NIMClient config");
122  }
123  SDKCache.config(context, info, options);
124 
125  //config时马上设置主进程标志位,防止LocalAgent构造时return导致空指针
126  if (NIMUtil.isMainProcessPure(context) > 0) {
127  SDKState.setProcessTag(2);
128  Handlers.sharedInstance().newMiscHandler().post(() -> {
129  ApiTraceEventManager.getInstance().recordPendingTrackEvent(startTime,"NIMClient","config");
130  });
131  }
132  }
133 
134  /**
135  * [初始化 SDK 方式二] 在 UI 进程主线程上按需初始化 SDK(不放在 {@link Application#onCreate()} 中初始化)。与 {@link NIMClient#config(Context, LoginInfo, SDKOptions)} 方法搭配使用。
136  *
137  * @par 使用场景:
138  * 适用于需要用户授权隐私信息采集的业务场景。与常规初始化 SDK 方式相比,该方式耗时更少,且更适配弱 IM 场景(应用仅需在其部分业务中使用 IM 能力(不需要在应用启动时就做 IM 自动登录),且并不需要保证消息、通知和数据的实时性的场景)。
139  * @par 使用建议:
140  * 该初始化方式一般不再需要做进程判断。
141  * @par 使用限制:
142  * 该接口适用的 SDK 版本:v5.0.0及以上。<br>
143  * 该方法需要与 {@link NIMClient#config(Context, LoginInfo, SDKOptions)} 方法搭配使用,即先在 Application#onCreate 中调用 config 方法,然后在应用代码的任意位置调用 {@link NIMClient#initSDK()} 方法初始化 SDK。
144  *
145  */
146  public static void initSDK() {
147  final long startTime = System.currentTimeMillis();
148  if (LogDesensitizationConfigHelper.printToLogcat()) {
149  Log.i(TAG, "NIMClient initSDK");
150  }
151  SDKCache.initUI();
152  if (NIMUtil.isMainProcess(SDKCache.getContext())) {
153  Handlers.sharedInstance().newMiscHandler().post(() -> {
154  ApiTraceEventManager.getInstance().recordPendingTrackEvent(startTime,"NIMClient","initSDK");
155  });
156  }
157 
158  }
159 
160  /**
161  * [初始化 SDK 方式三] 在 UI 进程主线程上按需初始化 SDK(不一定放在 {@link Application#onCreate()} 中初始化)。
162  *
163  * @par 使用建议:
164  * 除特殊需求,不建议使用该方式进行初始化 SDK。
165  * @par 使用限制:
166  * 该接口适用的 SDK 版本:v 及以上。
167  * @par 参数说明:
168  * <table>
169  * <tr>
170  * <th>参数名称</th>
171  * <th>描述</th>
172  * </tr>
173  * <tr>
174  * <td>context</td>
175  * <td>调用上下文</td>
176  * </tr>
177  * <tr>
178  * <td>info</td>
179  * <td>手动登录成功的用户信息。如 account(即 accid)和 token<ul><li>如果提供,SDK 在初始化的同时将自动调用登录接口进行登录(同时将打开用户相关的数据库)</li><li>如果当前还没有登录成功的用户,传入 null,后续可以手动调用 {@link com.netease.nimlib.sdk.auth.AuthService#login(LoginInfo)} 方法进行登录</li></ul></td>
180  * </tr>
181  * <tr>
182  * <td>options</td>
183  * <td>SDK 的其他初始化配置。如 App Key、第三方离线推送配置、是否开启会话已读多端同步等<ul><li>其中 App Key 如果已在集成 SDK 时(AndroidManifest.xml 中通过 meta-data 的方式设置)传入,则此处不需要再传入,<strong>否则必须传入</strong>,如果两处都设置了,取此处的值</li><li>如果传入为 null,则全部使用默认参数</li><li>可通过 {@link SDKOptions#asyncInitSDK} 参数配置进行同步/异步初始化</li><li>可通过 {@link SDKOptions#reducedIM} 参数实现支持弱 IM 模式,延迟加载 push 进程服务等<strong>(非弱 IM 场景慎用)</strong></li></ul></td>
184  * </tr>
185  * </table>
186  *
187  */
188  public static void initDelay(Context context, LoginInfo info, SDKOptions options) {
189  final long startTime = System.currentTimeMillis();
190  if (LogDesensitizationConfigHelper.printToLogcat(options)) {
191  Log.i(TAG, "NIMClient initDelay");
192  }
193 
194  // 老的初始化接口,需要判断进程
195  if (NIMUtil.isMainProcess(context)) {
196  SDKCache.config(context, info, options, true, true);
197  SDKCache.initUI();
198  Handlers.sharedInstance().newMiscHandler().post(() -> {
199  ApiTraceEventManager.getInstance().recordPendingTrackEvent(startTime,"NIMClient","initDelay");
200  });
201  }
202  }
203 
204  public static void initV2(Context context, SDKOptions options) {
205  final long startTime = System.currentTimeMillis();
206  if (LogDesensitizationConfigHelper.printToLogcat(options)) {
207  Log.i(TAG, "NIMClient initV2");
208  }
209  if (NIMUtil.isMainProcess(context)){
210  SDKCache.config(context, null, options, false, true, true);
211  SDKCache.initUI();
212  Handlers.sharedInstance().newMiscHandler().post(() -> {
213  ApiTraceEventManager.getInstance().recordPendingTrackEvent(startTime,"NIMClient","initV2");
214  });
215 
216  }
217  }
218 
219 
220  /**
221  * 获取云信各服务接口。
222  *
223  * @par 调用时机:
224  * 调用 NIM SDK 其他接口前,需要先调用该接口。
225  * @par 参数说明:
226  * <table>
227  * <tr>
228  * <th>参数名称</th>
229  * <th>描述</th>
230  * </tr>
231  * <tr>
232  * <td>clazz</td>
233  * <td>服务接口类型实例</td>
234  * </tr>
235  * <tr>
236  * <td><T></td>
237  * <td>服务接口类型</td>
238  * </tr>
239  * </table>
240  * @par 返回:
241  * 服务接口
242  *
243  */
244  public static <T> T getService(Class<T> clazz) {
245  return SDKCacheUI.getService(clazz);
246  }
247 
248  /**
249  * 在非 UI 线程中调用云信 SDK 异步 API,强制将异步调用转换为同步调用。
250  * @par 使用场景:
251  * 需要在没有 Looper 的非 UI 线程上同步调用云信 API,但是对应的接口云信没有同步版本,只有异步版本。例如,启动一个线程或者线程池处理云信 SDK 数据。
252  * @par 使用建议:
253  * 如果 SDK 提供了对应的同步API,请不要使用该方法强制转换一个异步 API。<br>
254  * 该方法将阻塞调用者线程,直到异步 API 有结果响应。因此,除特殊场景不建议使用!
255  * @par 使用限制:
256  * 不允许在 UI 线程上或者带 Looper 的非 UI 线程上使用该异步到同步的强制转换(不符合 Android规范)!否则结果会返回错误码 {@link ResponseCode#RES_API_SYNC_RUN_ON_LOOPER_THREAD_EXCEPTION}。
257  * @par 注意事项:
258  * 带 Looper 的非 UI 线程调用云信异步 API,会在调用线程执行回调(4.4.0 版本之前的 SDK 版本,会统一回调到 UI 线程上)。
259  * @par 参数说明:
260  * <table>
261  * <tr>
262  * <th>参数名称</th>
263  * <th>描述</th>
264  * </tr>
265  * <tr>
266  * <td>future</td>
267  * <td>异步 API 调用返回的回调</td>
268  * </tr>
269  * <tr>
270  * <td><T></td>
271  * <td>结果的数据类型</td>
272  * </tr>
273  * <tr>
274  * <td>time</td>
275  * <td>最大同步等待时间,单位毫秒,一般设置为 30000,超时后该方法直接返回错误,错误码参见 {@link ResponseCode#RES_API_SYNC_TIMEOUT}</td>
276  * </tr>
277  * </table>
278  * @par 返回:
279  * 在非 UI 线程上同步等待异步调用结果
280  *
281  */
282  public static <T> RequestResult<T> syncRequest(InvocationFuture<T> future, long time) {
283  return APISyncHelper.syncRequest(future, time);
284  }
285 
286  /**
287  * 在非 UI 线程调用云信 SDK 异步 API,强制将异步调用转换为同步调用。该接口已废弃,请使用 {@link NIMClient#syncRequest(InvocationFuture, long)} 接口。
288  * @par 参数说明:
289  * <table>
290  * <tr>
291  * <th>参数名称</th>
292  * <th>描述</th>
293  * </tr>
294  * <tr>
295  * <td>future</td>
296  * <td>异步 API 调用返回的回调</td>
297  * </tr>
298  * <tr>
299  * <td><T></td>
300  * <td>结果的数据类型</td>
301  * </tr>
302  * </table>
303  * @par 返回:
304  * 在非 UI 线程上同步等待异步调用结果
305  *
306  */
308  return APISyncHelper.syncRequest(future, 30 * 1000L);
309  }
310 
311  /**
312  * 获取当前用户的 IM 账号(accid)。
313  * @par 返回:
314  * 当前用户的 IM 账号(accid)
315  */
316  public static String getCurrentAccount(){
317  String account = SDKCacheUI.getAccount();
318  if(account == null){
319  account = "";
320  }
321  return account;
322  }
323 
324  /**
325  * 获取当前应用的 AppKey。
326  * @par 返回:
327  * 当前应用的 AppKey
328  */
329  public static String getAppKey(){
330  try {
331  String appKey = SDKCache.getAppKey();
332  if(appKey == null)
333  {
334  return "";
335  }
336  return appKey;
337  } catch (Exception e) {
338  return "";
339  }
340  }
341 
342  /**
343  * 获取当前用户的状态。
344  * @par 返回:
345  * 当前用户的状态 {@link StatusCode}
346  */
347  public static StatusCode getStatus() {
348  return SDKStateUI.getStatus();
349  }
350 
351  /**
352  * 获取SDK初始化选项
353  * @return SDKOptions
354  */
355  public static SDKOptions getSDKOptions(){
356  return SDKCache.safeGetOptions();
357  }
358 
359  /**
360  * 获取 SDK 当前的登录模式。
361  *
362  * @par 返回:
363  * 当前的登录模式 {@link ModeCode}包括以下三种模式:<ul><li>INIT:初始状态 </li><li>IM:IM 登录模式(可以登录聊天室,但需要保持 IM 和聊天室连接)</li><li>CHAT_ROOM_INDEPENDENT:聊天室独立登录模式(不需要 IM 连接)</li></ul>
364  */
365 
366  public static ModeCode getMode() {
367  return SDKStateUI.getMode();
368  }
369 
370  /**
371  * 通知栏消息提醒开关。
372  * @par 调用限制:
373  * 只有 {@link StatusBarNotificationConfig} 配置不为空时才有效。<br>
374  * SDKOptions.StatusBarNotificationConfig 默认为 null,即 SDK 不提供通知栏提醒功能,由客户 APP自行实现。因此如需启用通知栏消息提醒功能,需要先设置初始化参数 StatusBarNotificationConfig。
375  * @par 参数说明:
376  * on :开关,true 为开启,false 为关闭,默认开启
377  */
378  public static void toggleNotification(boolean on) {
379  SDKCacheUI.toggleNotification(on);
380  }
381 
382 
383  /**
384  * 撤回消息需要通知栏提醒的开关。
385  * @par 调用限制:
386  *只有 StatusBarNotificationConfig 配置不为空且通知栏消息提醒({@link NIMClient#toggleNotification(boolean)})开启时才有效。
387  * @par 参数说明:
388  * on :开关,true 为开启,false 为关闭,默认开启
389  *
390  */
391  public static void toggleRevokeMessageNotification(boolean on) {
392  SDKCacheUI.toggleRevokeMessageNotification(on);
393  }
394 
395  /**
396  * 更新通知栏消息提醒配置,包括是否需要振动提醒、是否需要响铃提醒等。
397  * @par 使用场景:
398  * 若未在初始化(SDKOptions.StatusBarNotificationConfig)时设置通知栏消息的配置项,或者初始化时设置了,但是需要修改其配置项,可调用该接口实现通知栏消息提醒配置的更新。
399  * @par 参数说明:
400  * config 通知栏消息提醒的配置项,包括响铃提醒、振动提醒、免打扰设置等
401  *
402  */
404  SDKCacheUI.updateStatusBarNotificationConfig(config);
405  }
406 
407  /**
408  * 更新系统文案。
409  * @par 使用场景:
410  * 当系统语言发生变化时,可以调用该接口更新文案配置,实现 SDK 对多语言的支持。也可以用于定制通知栏消息提醒的文案。
411  * @par 注意事项:
412  * 配置不能立即生效,所有文案均需要在下次使用时才会生效。
413  * @par 参数说明:
414  * strings SDK 中用到的文案字符串定义,目前仅状态栏消息提醒处使用。如果您没有提供自定义值,只使用默认值
415  */
416  public static void updateStrings(NimStrings strings) {
417  SDKCacheUI.updateStrings(strings);
418  }
419 
420  /**
421  * 获取 SDK 数据缓存目录路径。
422  * @par 调用时机:
423  * 建议在初始化 SDK 之后调用。
424  * @par 返回:
425  * SDK 数据缓存目录路径(包含子目录,如日志文件 log、消息中的文件 file、消息中的原图 image、消息中的音频 audio、消息中的原视频 video、图片/视频消息中的缩略图 thumb 等)
426  */
427  public static String getSdkStorageDirPath() {
428  return NimStorageUtil.getRootPath();
429  }
430 
431  /**
432  * 运行时获取当前 SDK 版本号。
433  * @par 返回:
434  * 当前 SDK 版本号,例如 "1.0.0"
435  */
436  public static String getSDKVersion() {
437  return BuildConfig.VERSION_NAME;
438  }
439 
440 
441  /**
442  * 更新 SDK NOS Token 场景配置。对于 SDK NOS Token,云信 SDK 有默认值 ,若用户不单独配置,则直接采用默认值。
443  * @par 默认值对应场景:
444  * <ul><li>NimNosSceneKeyConstant::NIM_DEFAULT_PROFILE:用户和群组资料(例如头像)的上传默认走该场景</li><li>NimNosSceneKeyConstant::NIM_DEFAULT_IM:私聊、群聊、聊天室发送图片、音频、视频、文件等动作默认走该场景</li><li>NimNosSceneKeyConstant::NIM_SYSTEM_NOS_SCENE:SDK 内部上传文件(例如日志)默认走该场景,并且对应的过期时间不允许修改</li></ul>
445  * 默认场景对应的默认过期时间为 NEVER_EXPIRE(永不过期,资源一直存在于服务器),用户可以修改默认场景(除 NIM_SYSTEM_NOS_SCENE 场景)的过期时间。<br>
446  * 同时用户可以新增自定义场景并指定对应的过期时间(sceneKey-> expireTimeByDay),目前最多增加 10 个场景。
447  * @par 使用场景:
448  * 如果用户发送消息或上传文件等动作,需要指定其他的场景(指定 NOS 服务网络),可以先新增自定义场景,后续只需要传入相应的 sceneKey 即可。
449  * @par 使用建议:
450  * 在配置时,强烈建议将相应的 sceneKey 常量化,以方便使用,具体请参考 {@link com.netease.nimlib.NimNosSceneKeyConstant}。
451  * @par 参数说明:
452  * config NOS Token 场景配置
453  * @par 相关接口:
454  * <ul><li>{@link NosTokenSceneConfig#appendCustomScene(String, int)}:增加自定义场景</li><li>{@link NosTokenSceneConfig#updateDefaultProfileSceneExpireTime(int)}:更新默认场景(NIM_DEFAULT_PROFILE)的过期时间</li><li>{@link NosTokenSceneConfig#updateDefaultIMSceneExpireTime(int)}:更新默认场景(NIM_DEFAULT_IM)的过期时间</li></ul>
455  *
456  */
458  SDKCacheUI.updateTokenSceneConfig(config);
459  }
460 
461  /**
462  * 更新获取设备信息的相关配置。包括配置是否获取产品型号、是否获取制造商信息、是否获取品牌信息,null 表示都可以获取,没有限制。
463  * @par 注意事项:
464  * 不获取设备信息可能会影响功能的使用,若需要设置为不获取设备信息,请联系云信技术支持。
465  * @par 参数说明:
466  * captureDeviceInfoConfig 设备信息获取配置,包括配置是否获取产品型号、是否获取制造商信息、是否获取品牌信息
467  */
468  public static void updateCaptureDeviceInfoOption(CaptureDeviceInfoConfig captureDeviceInfoConfig) {
469  SDKCacheUI.updateCaptureDeviceInfoOption(captureDeviceInfoConfig);
470  }
471 
472  /**
473  * 更新 SDK 的 AppKey
474  * 当IM处于未登录状态,且所有聊天室实例全部销毁,且appkey不为null或空串时更新成功,否则更新失败
475  * @param appKey
476  * @return V2NIMError 错误码, 错误码表示200成功,其他失败
477  */
478  public static V2NIMError updateAppKey(String appKey) {
479  if(!SDKCache.hasInited()){
480  NimLog.e(TAG,"IM is not in init state");
481  return new V2NIMErrorImpl(V2NIMErrorCode.V2NIM_ERROR_CODE_ILLEGAL_STATE.getCode(),"IM is not in init state");
482  }
483  if(TextUtils.isEmpty(appKey)){
484  NimLog.e(TAG,"appKey is empty");
485  return new V2NIMErrorImpl(V2NIMErrorCode.V2NIM_ERROR_CODE_INVALID_PARAMETER.getCode(),"appKey is empty");
486  }
487 
488  if(Objects.equals(appKey, SDKCache.getAppKey())){
489  NimLog.i(TAG,"appKey is same as last time,no need to update");
490  return new V2NIMErrorImpl(V2NIMErrorCode.V2NIM_ERROR_CODE_SUCCESS.getCode(),"");
491  }
492 
493  if(SDKCacheUI.getAuthInfo() != null || SDKStateUI.getStatus() != StatusCode.UNLOGIN){
494  NimLog.e(TAG,"IM is not in logout state");
495  return new V2NIMErrorImpl(V2NIMErrorCode.V2NIM_ERROR_CODE_ILLEGAL_STATE.getCode(),"IM is not in logout state");
496  }
497  IChatRoomInteract interact = PluginInteractManager.getInstance().getInteract(IChatRoomInteract.class);
498  if (interact != null) {
499  boolean result = interact.isV2ChatroomAllDestroy();
500  if (!result) {
501  NimLog.e(TAG,"V2NIMChatroomClient is not all destroy");
502  return new V2NIMErrorImpl(V2NIMErrorCode.V2NIM_ERROR_CODE_ILLEGAL_STATE.getCode(),"V2NIMChatroomClient is not all destroy");
503  }
504  }
505 
506  SDKCache.setAppKey(appKey);
507  //
508  Handlers.sharedInstance().newHandler().post(() -> {
509  ABTestManager.getInstance().loadAndPullABTest(SDKCache.getContext(),true);
510  NimEventStrategyManager.getInstance().reset();
511  });
512 
513  return new V2NIMErrorImpl(V2NIMErrorCode.V2NIM_ERROR_CODE_SUCCESS.getCode());
514  }
515 }
SDK中用到的字符串定义。可用于开发者定制显示文案,以及实现SDK对多语言的支持。 目前仅新消息状态栏提醒...
Definition: NimStrings.java:11
static void toggleNotification(boolean on)
通知栏消息提醒开关。
Definition: NIMClient.java:378
static int isMainProcessPure(Context context)
判断当前进程是否是主进程(纯净版本),不会有隐私不合规风险,但是不保证100判断正确 ...
Definition: NIMUtil.java:39
static String getSDKVersion()
运行时获取当前 SDK 版本号。
Definition: NIMClient.java:436
static void updateStrings(NimStrings strings)
更新系统文案。
Definition: NIMClient.java:416
static void config(Context context, LoginInfo info, SDKOptions options)
[初始化 SDK 方式二] 在 Application#onCreate() 中配置 SDK(仅仅是配置,不影响性能),具体可配置的参数...
Definition: NIMClient.java:118
云信API异步转同步调用结果
static boolean isMainProcess(Context context)
Definition: NIMUtil.java:98
用户当前状态码定义
Definition: StatusCode.java:6
SDK当前登录模式状态码定义
Definition: ModeCode.java:6
SDK 核心接口类,用于初始化 SDK,获取各个服务能力接口,获取当前状态等功能。
Definition: NIMClient.java:36
static String getSdkStorageDirPath()
获取 SDK 数据缓存目录路径。
Definition: NIMClient.java:427
static< T > RequestResult< T > syncRequest(InvocationFuture< T > future, long time)
在非 UI 线程中调用云信 SDK 异步 API,强制将异步调用转换为同步调用。
Definition: NIMClient.java:282
static< T > RequestResult< T > syncRequest(InvocationFuture< T > future)
在非 UI 线程调用云信 SDK 异步 API,强制将异步调用转换为同步调用。该接口已废弃,请使用 NIMClient#syncR...
Definition: NIMClient.java:307
static String getAppKey()
获取当前应用的 AppKey。
Definition: NIMClient.java:329
static void initSDK()
[初始化 SDK 方式二] 在 UI 进程主线程上按需初始化 SDK(不放在 Application#onCreate() 中初始化)。与 NI...
Definition: NIMClient.java:146
static StatusCode getStatus()
获取当前用户的状态。
Definition: NIMClient.java:347
static V2NIMError updateAppKey(String appKey)
更新 SDK 的 AppKey 当IM处于未登录状态,且所有聊天室实例全部销毁,且appkey不为null或空串时更新成功,否...
Definition: NIMClient.java:478
用户登录认证信息。
Definition: LoginInfo.java:23
static SDKOptions getSDKOptions()
获取SDK初始化选项
Definition: NIMClient.java:355
static void toggleRevokeMessageNotification(boolean on)
撤回消息需要通知栏提醒的开关。
Definition: NIMClient.java:391
static void initDelay(Context context, LoginInfo info, SDKOptions options)
[初始化 SDK 方式三] 在 UI 进程主线程上按需初始化 SDK(不一定放在 Application#onCreate() 中初始化)。 ...
Definition: NIMClient.java:188
可自定义的 SDK 选项设置。
Definition: SDKOptions.java:21
static void updateCaptureDeviceInfoOption(CaptureDeviceInfoConfig captureDeviceInfoConfig)
更新获取设备信息的相关配置。包括配置是否获取产品型号、是否获取制造商信息、是否获取品牌信息,null 表示...
Definition: NIMClient.java:468
static void updateTokenSceneConfig(NosTokenSceneConfig config)
更新 SDK NOS Token 场景配置。对于 SDK NOS Token,云信 SDK 有默认值 ,若用户不单独配置,则直接采用默认...
Definition: NIMClient.java:457
static ModeCode getMode()
获取 SDK 当前的登录模式。
Definition: NIMClient.java:366
SDK nos token场景配置,不配置的话,走默认值,默认值只有以下3种场景:
static< T > T getService(Class< T > clazz)
获取云信各服务接口。
Definition: NIMClient.java:244
static void init(Context context, LoginInfo info, SDKOptions options)
[初始化 SDK 方式一] 在 Application#onCreate() 中调用该方法在应用启动时初始化 SDK。 ...
Definition: NIMClient.java:71
UNLOGIN
未登录/登录失败
Definition: StatusCode.java:16
static String getCurrentAccount()
获取当前用户的 IM 账号(accid)。
Definition: NIMClient.java:316
static void initV2(Context context, SDKOptions options)
Definition: NIMClient.java:204
static void updateStatusBarNotificationConfig(StatusBarNotificationConfig config)
更新通知栏消息提醒配置,包括是否需要振动提醒、是否需要响铃提醒等。
Definition: NIMClient.java:403