初始化
更新时间: 2023/11/13 09:28:30
在你的程序的 Application 的 onCreate
中,加入网易云通信 SDK 的初始化代码:
javapublic class NimApplication extends Application {
public void onCreate() {
// ... your codes
// SDK初始化(启动后台服务,若已经存在用户登录信息, SDK 将完成自动登录)
NIMClient.init(this, loginInfo(), options());
// ... your codes
if (NIMUtil.isMainProcess(this)) {
// 注意:以下操作必须在主进程中进行
// 1、UI相关初始化操作
// 2、相关Service调用
}
}
// 如果返回值为 null,则全部使用默认参数。
private SDKOptions options() {
SDKOptions options = new SDKOptions();
// 如果将新消息通知提醒托管给 SDK 完成,需要添加以下配置。否则无需设置。
StatusBarNotificationConfig config = new StatusBarNotificationConfig();
config.notificationEntrance = WelcomeActivity.class; // 点击通知栏跳转到该Activity
config.notificationSmallIconId = R.drawable.ic_stat_notify_msg;
// 呼吸灯配置
config.ledARGB = Color.GREEN;
config.ledOnMs = 1000;
config.ledOffMs = 1500;
// 通知铃声的uri字符串
config.notificationSound = "android.resource://com.netease.nim.demo/raw/msg";
options.statusBarNotificationConfig = config;
// 配置保存图片,文件,log 等数据的目录
// 如果 options 中没有设置这个值,SDK 会使用采用默认路径作为 SDK 的数据目录。
// 该目录目前包含 log, file, image, audio, video, thumb 这6个目录。
String sdkPath = getAppCacheDir(context) + "/nim"; // 可以不设置,那么将采用默认路径
// 如果第三方 APP 需要缓存清理功能, 清理这个目录下面个子目录的内容即可。
options.sdkStorageRootPath = sdkPath;
// 配置是否需要预下载附件缩略图,默认为 true
options.preloadAttach = true;
// 配置附件缩略图的尺寸大小。表示向服务器请求缩略图文件的大小
// 该值一般应根据屏幕尺寸来确定, 默认值为 Screen.width / 2
options.thumbnailSize = ${Screen.width} / 2;
// 用户资料提供者, 目前主要用于提供用户资料,用于新消息通知栏中显示消息来源的头像和昵称
options.userInfoProvider = new UserInfoProvider() {
@Override
public UserInfo getUserInfo(String account) {
return null;
}
@Override
public int getDefaultIconResId() {
return R.drawable.avatar_def;
}
@Override
public Bitmap getTeamIcon(String tid) {
return null;
}
@Override
public Bitmap getAvatarForMessageNotifier(String account) {
return null;
}
@Override
public String getDisplayNameForMessageNotifier(String account, String sessionId,
SessionTypeEnum sessionType) {
return null;
}
};
return options;
}
// 如果已经存在用户登录信息,返回LoginInfo,否则返回null即可
private LoginInfo loginInfo() {
return null;
}
/**
* 配置 APP 保存图片/语音/文件/log等数据的目录
* 这里示例用SD卡的应用扩展存储目录
*/
static String getAppCacheDir(Context context) {
String storageRootPath = null;
try {
// SD卡应用扩展存储区(APP卸载后,该目录下被清除,用户也可以在设置界面中手动清除),请根据APP对数据缓存的重要性及生命周期来决定是否采用此缓存目录.
// 该存储区在API 19以上不需要写权限,即可配置 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18"/>
if (context.getExternalCacheDir() != null) {
storageRootPath = context.getExternalCacheDir().getCanonicalPath();
}
} catch (IOException e) {
e.printStackTrace();
}
if (TextUtils.isEmpty(storageRootPath)) {
// SD卡应用公共存储区(APP卸载后,该目录不会被清除,下载安装APP后,缓存数据依然可以被加载。SDK默认使用此目录),该存储区域需要写权限!
storageRootPath = Environment.getExternalStorageDirectory() + "/" + DemoCache.getContext().getPackageName();
}
return storageRootPath;
}
}
- 进程判断工具
使用 NIMUtil
类可以进行进程判断:
javaboolean mainProcess = NIMUtil.isMainProcess(context);
- SDKOptions 参数说明
参数 | 说明 |
---|---|
appKey | 设置云信SDK的appKey。appKey还可以通过在AndroidManifest文件中,通过meta-data的方式设置。 |
statusBarNotificationConfig | 默认为null,SDK不提供状态栏提醒功能,由客户APP自行实现 |
userInfoProvider | 用户信息提供者,目前主要用于通知栏显示用户昵称和头像 |
messageNotifierCustomization | 通知栏提醒文案定制 |
sdkStorageRootPath | 外置存储根目录,用于存放多媒体消息文件 |
databaseEncryptKey | 数据库加密秘钥,用于消息数据库加密 |
preloadAttach | 是否需要SDK自动预加载多媒体消息的附件 |
thumbnailSize | 消息缩略图的尺寸 |
sessionReadAck | 是否开启会话已读多端同步 |
improveSDKProcessPriority | 是否提高SDK进程优先级(默认提高,可以降低SDK核心进程被系统回收的概率) |
serverConfig | 配置私有化的服务器地址 |
preLoadServers | 预加载服务,默认true,不建议设置为false,预加载连接可以优化登陆流程 |
teamNotificationMessageMarkUnread | 群通知消息是否计入未读数,默认不计入未读 |
useXLog | 使用性能更好的SDK日志模式。默认使用普通日志模式。 |
animatedImageThumbnailEnabled | 开启对动图缩略图的支持,默认为 false,截取第一帧 |
asyncInitSDK | 是否异步初始化SDK,默认为 false。开启可降低 Application#onCreate 中 SDK 初始化函数的同步响应时间 |
reducedIM | 是否是弱IM场景,默认为 false。如果您的APP 仅在部分场景按需使用 IM 能力(不需要在应用启动时就做自动登录),并不需要保证消息通知、数据的实时性,那么这里可以填 true。弱 IM 场景下,push 进程采用懒启动策略(延迟到用户登录阶段),启动后其生命周期将跟随 UI 进程,降低弱 IM 场景的APP的后台功耗开销。 |
checkMainifestConfig | 是否在 SDK 初始化时检查清单文件配置是否完全,默认为 false,建议开发者在调试阶段打开,上线时关掉 |
特别提醒:SDK 的初始化方法必须在主进程中调用,在非主进程中初始化无效。请在主进程中调用 SDK XXXService 提供的方法,在主进程中注册 XXXServiceObserver 的观察者(有事件变更,会回调给主进程的主线程)。如果你的模块运行在非主进程,请自行实现主进程与非主进程的通信(AIDL/Messenger/ContentProvider/BroadcastReceiver等IPC渠道)将主进程回调或监听返回的数据传递给非主进程。
此文档是否对你有帮助?