NIMSDK-AOS  10.5.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.plugin.interact.IChatRoomInteract;
18 import com.netease.nimlib.plugin.interact.PluginInteractManager;
19 import com.netease.nimlib.log.model.LogDesensitizationConfigHelper;
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 
34 public class NIMClient {
35 
36  public static final String TAG = "NIMClient";
69  public static void init(Context context, LoginInfo info, SDKOptions options) {
70  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  ApiTraceEventManager.getInstance().recordPendingTrackEvent(startTime,"NIMClient","init");
80  }
81  }
82 
114  public static void config(Context context, LoginInfo info, SDKOptions options) {
115  long startTime = System.currentTimeMillis();
116  if (LogDesensitizationConfigHelper.printToLogcat()) {
117  Log.i(TAG, "NIMClient config");
118  }
119  SDKCache.config(context, info, options);
120 
121  //config时马上设置主进程标志位,防止LocalAgent构造时return导致空指针
122  if (NIMUtil.isMainProcessPure(context) > 0) {
123  SDKState.setProcessTag(2);
124  ApiTraceEventManager.getInstance().recordPendingTrackEvent(startTime,"NIMClient","config");
125  }
126  }
127 
140  public static void initSDK() {
141  long startTime = System.currentTimeMillis();
142  if (LogDesensitizationConfigHelper.printToLogcat()) {
143  Log.i(TAG, "NIMClient initSDK");
144  }
145  SDKCache.initUI();
146  if (NIMUtil.isMainProcess(SDKCache.getContext())) {
147  ApiTraceEventManager.getInstance().recordPendingTrackEvent(startTime,"NIMClient","initSDK");
148  }
149 
150  }
151 
180  public static void initDelay(Context context, LoginInfo info, SDKOptions options) {
181  long startTime = System.currentTimeMillis();
182  if (LogDesensitizationConfigHelper.printToLogcat()) {
183  Log.i(TAG, "NIMClient initDelay");
184  }
185 
186  // 老的初始化接口,需要判断进程
187  if (NIMUtil.isMainProcess(context)) {
188  SDKCache.config(context, info, options, true, true);
189  SDKCache.initUI();
190  ApiTraceEventManager.getInstance().recordPendingTrackEvent(startTime,"NIMClient","initDelay");
191  }
192  }
193 
194  public static void initV2(Context context, SDKOptions options) {
195  long startTime = System.currentTimeMillis();
196  Log.i(TAG,"NIMClient initV2");
197  if (NIMUtil.isMainProcess(context)){
198  SDKCache.config(context, null, options, false, true, true);
199  SDKCache.initUI();
200  ApiTraceEventManager.getInstance().recordPendingTrackEvent(startTime,"NIMClient","initV2");
201  }
202  }
203 
204 
229  public static <T> T getService(Class<T> clazz) {
230  return SDKCacheUI.getService(clazz);
231  }
232 
267  public static <T> RequestResult<T> syncRequest(InvocationFuture<T> future, long time) {
268  return APISyncHelper.syncRequest(future, time);
269  }
270 
293  return APISyncHelper.syncRequest(future, 30 * 1000L);
294  }
295 
301  public static String getCurrentAccount(){
302  String account = SDKCacheUI.getAccount();
303  if(account == null){
304  account = "";
305  }
306  return account;
307  }
308 
314  public static String getAppKey(){
315  try {
316  String appKey = SDKCache.getAppKey();
317  if(appKey == null)
318  {
319  return "";
320  }
321  return appKey;
322  } catch (Exception e) {
323  return "";
324  }
325  }
326 
332  public static StatusCode getStatus() {
333  return SDKStateUI.getStatus();
334  }
335 
343  public static ModeCode getMode() {
344  return SDKStateUI.getMode();
345  }
346 
355  public static void toggleNotification(boolean on) {
356  SDKCacheUI.toggleNotification(on);
357  }
358 
359 
368  public static void toggleRevokeMessageNotification(boolean on) {
369  SDKCacheUI.toggleRevokeMessageNotification(on);
370  }
371 
381  SDKCacheUI.updateStatusBarNotificationConfig(config);
382  }
383 
393  public static void updateStrings(NimStrings strings) {
394  SDKCacheUI.updateStrings(strings);
395  }
396 
404  public static String getSdkStorageDirPath() {
405  return NimStorageUtil.getRootPath();
406  }
407 
413  public static String getSDKVersion() {
414  return BuildConfig.VERSION_NAME;
415  }
416 
417 
435  SDKCacheUI.updateTokenSceneConfig(config);
436  }
437 
445  public static void updateCaptureDeviceInfoOption(CaptureDeviceInfoConfig captureDeviceInfoConfig) {
446  SDKCacheUI.updateCaptureDeviceInfoOption(captureDeviceInfoConfig);
447  }
448 
455  public static V2NIMError updateAppKey(String appKey) {
456  if(!SDKCache.hasInited()){
457  NimLog.e(TAG,"IM is not in init state");
458  return new V2NIMErrorImpl(V2NIMErrorCode.V2NIM_ERROR_CODE_ILLEGAL_STATE.getCode(),"IM is not in init state");
459  }
460  if(TextUtils.isEmpty(appKey)){
461  NimLog.e(TAG,"appKey is empty");
462  return new V2NIMErrorImpl(V2NIMErrorCode.V2NIM_ERROR_CODE_INVALID_PARAMETER.getCode(),"appKey is empty");
463  }
464 
465  if(Objects.equals(appKey, SDKCache.getAppKey())){
466  NimLog.i(TAG,"appKey is same as last time,no need to update");
467  return new V2NIMErrorImpl(V2NIMErrorCode.V2NIM_ERROR_CODE_SUCCESS.getCode(),"");
468  }
469 
470  if(SDKCacheUI.getAuthInfo() != null || SDKStateUI.getStatus() != StatusCode.UNLOGIN){
471  NimLog.e(TAG,"IM is not in logout state");
472  return new V2NIMErrorImpl(V2NIMErrorCode.V2NIM_ERROR_CODE_ILLEGAL_STATE.getCode(),"IM is not in logout state");
473  }
474  IChatRoomInteract interact = PluginInteractManager.getInstance().getInteract(IChatRoomInteract.class);
475  if (interact != null) {
476  boolean result = interact.isV2ChatroomAllDestroy();
477  if (!result) {
478  NimLog.e(TAG,"V2NIMChatroomClient is not all destroy");
479  return new V2NIMErrorImpl(V2NIMErrorCode.V2NIM_ERROR_CODE_ILLEGAL_STATE.getCode(),"V2NIMChatroomClient is not all destroy");
480  }
481  }
482 
483  SDKCache.setAppKey(appKey);
484  //
485  Handlers.sharedInstance().newHandler().post(() -> {
486  ABTestManager.getInstance().pullABTest(SDKCache.getContext(),true);
487  NimEventStrategyManager.getInstance().reset();
488  });
489 
490  return new V2NIMErrorImpl(V2NIMErrorCode.V2NIM_ERROR_CODE_SUCCESS.getCode());
491  }
492 }
SDK中用到的字符串定义。可用于开发者定制显示文案,以及实现SDK对多语言的支持。 目前仅新消息状态栏提醒...
Definition: NimStrings.java:11
static void toggleNotification(boolean on)
通知栏消息提醒开关。
Definition: NIMClient.java:355
static int isMainProcessPure(Context context)
判断当前进程是否是主进程(纯净版本),不会有隐私不合规风险,但是不保证100判断正确 ...
Definition: NIMUtil.java:39
static String getSDKVersion()
运行时获取当前 SDK 版本号。
Definition: NIMClient.java:413
static void updateStrings(NimStrings strings)
更新系统文案。
Definition: NIMClient.java:393
static void config(Context context, LoginInfo info, SDKOptions options)
[初始化 SDK 方式二] 在 Application#onCreate() 中配置 SDK(仅仅是配置,不影响性能),具体可配置的参数...
Definition: NIMClient.java:114
云信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:404
static< T > RequestResult< T > syncRequest(InvocationFuture< T > future, long time)
在非 UI 线程中调用云信 SDK 异步 API,强制将异步调用转换为同步调用。
Definition: NIMClient.java:267
static< T > RequestResult< T > syncRequest(InvocationFuture< T > future)
在非 UI 线程调用云信 SDK 异步 API,强制将异步调用转换为同步调用。该接口已废弃,请使用 NIMClient#syncR...
Definition: NIMClient.java:292
static String getAppKey()
获取当前应用的 AppKey。
Definition: NIMClient.java:314
static void initSDK()
[初始化 SDK 方式二] 在 UI 进程主线程上按需初始化 SDK(不放在 Application#onCreate() 中初始化)。与 NI...
Definition: NIMClient.java:140
static StatusCode getStatus()
获取当前用户的状态。
Definition: NIMClient.java:332
static V2NIMError updateAppKey(String appKey)
更新 SDK 的 AppKey 当IM处于未登录状态,且所有聊天室实例全部销毁,且appkey不为null或空串时更新成功,否...
Definition: NIMClient.java:455
用户登录认证信息。
Definition: LoginInfo.java:23
static void toggleRevokeMessageNotification(boolean on)
撤回消息需要通知栏提醒的开关。
Definition: NIMClient.java:368
static void initDelay(Context context, LoginInfo info, SDKOptions options)
[初始化 SDK 方式三] 在 UI 进程主线程上按需初始化 SDK(不一定放在 Application#onCreate() 中初始化)。 ...
Definition: NIMClient.java:180
可自定义的 SDK 选项设置。
Definition: SDKOptions.java:20
static void updateCaptureDeviceInfoOption(CaptureDeviceInfoConfig captureDeviceInfoConfig)
更新获取设备信息的相关配置。包括配置是否获取产品型号、是否获取制造商信息、是否获取品牌信息,null 表示...
Definition: NIMClient.java:445
static void updateTokenSceneConfig(NosTokenSceneConfig config)
更新 SDK NOS Token 场景配置。对于 SDK NOS Token,云信 SDK 有默认值 ,若用户不单独配置,则直接采用默认...
Definition: NIMClient.java:434
static ModeCode getMode()
获取 SDK 当前的登录模式。
Definition: NIMClient.java:343
SDK nos token场景配置,不配置的话,走默认值,默认值只有以下3种场景:
static< T > T getService(Class< T > clazz)
获取云信各服务接口。
Definition: NIMClient.java:229
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:301
static void initV2(Context context, SDKOptions options)
Definition: NIMClient.java:194
static void updateStatusBarNotificationConfig(StatusBarNotificationConfig config)
更新通知栏消息提醒配置,包括是否需要振动提醒、是否需要响铃提醒等。
Definition: NIMClient.java:380