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