初始化


NIMSDK 注册

NIM SDK 通过注册 App Key 来进行初始化。在使用 SDK 任何方法之前,都应该首先调用初始化方法。正常业务情况下,初始化方法有仅只应调用一次。

原型

@interface NIMSDK : NSObject
/**
 *  初始化SDK
 *
 *  @param option  注册选项
 */
- (void)registerWithOption:(NIMSDKOption *)option;
@end

NIMSDKOption 选项参数列表

参数 类型 说明
appKey NSString 云信分配的 App Key
apnsCername NSString 云信 APNs 推送证书名
pkCername NSString 云信 VOIP 推送证书名

AppKey 作为应用的唯一逻辑标识,同一 AppKey 不同 Bundle Id 的应用消息仍可以互通。

CerName 为开发者为推送证书在云信管理后台定义的名字,在使用中,云信服务器会寻找同名推送证书发起苹果推送服务。

目前 CerName 可传 APNs 证书 和 Voip 证书两种,分别对应了参数中 apnsCernamepkCername 两个字段。

如果没有在后台定义推送证书,则参数可传 nil 。

调用示例

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    ...
    //推荐在程序启动的时候初始化 NIMSDK    
    NSString *appKey        = @"your app key";
    NIMSDKOption *option    = [NIMSDKOption optionWithAppKey:appKey];
    option.apnsCername      = @"your APNs cer name";
    option.pkCername        = @"your pushkit cer name";
    [[NIMSDK sharedSDK] registerWithOption:option];
    ...
}

其他配置初始化

NIM SDK 还提供了一些其他额外的初始化配置以供开发者做一些扩展

NIMServerSetting

NIMServerSetting 是整体的云信服务器配置,需要开发者自己创建并注入。

NIMServerSetting *setting    = [[NIMServerSetting alloc] init];
setting.enabledHttps = YES;
[[NIMSDK sharedSDK] setServerSetting:setting];

NIMSDKConfig

NIMSDKConfig 是一个单例,推荐在调用注册接口前配置。

原型

@interface NIMSDKConfig : NSObject

/**
 *  返回配置项实例
 *
 *  @return 配置项
 */
+ (instancetype)sharedConfig;

@end
[NIMSDKConfig sharedConfig].enabledHttpsForInfo = YES;

[NIMSDKConfig sharedConfig].enabledHttpsForMessage = YES;
- (void)setupSDKDir:(NSString *)sdkDir;

为了更好的应用体验,SDK 需要对应用数据做一些本地持久,比如消息,用户信息等等。在默认情况下,所有数据将放置于 $Document/NIMSDK 目录下。

设置该值后 SDK 产生的数据(包括聊天记录,但不包括临时文件)都将放置在这个目录下

示例

[[NIMSDKConfig sharedConfig] setupSDKDir:@"your data path"];
- (BOOL)shouldIgnoreNotification:(NIMNotificationObject *)notification

此方法在消息将要存储到本地时调用,配置对象判断是否忽略返回 YES 或 NO 。开发者只应该在这个回调里做简单逻辑判断,如果做耗时操作会严重影响存储性能。

配置名称 字段 说明
是否在收到消息后自动下载附件 fetchAttachmentAutomaticallyAfterReceiving 在收到图片或视频消息后,默认情况下 SDK 会去主动获取图片的缩略图和视频的第一帧封面,将这个字段设置为 NO,SDK 将不再主动获取,开发者需要在根据业务逻辑手动调用获取附件接口
是否在收到聊天室消息后自动下载附件 fetchAttachmentAutomaticallyAfterReceivingInChatroom 同普通消息下载附件开关说明,默认情况下 SDK 不会去主动获取聊天室消息的附件
是否使用 NSFileProtectionNone 作为云信文件的 NSProtectionKey fileProtectionNone 默认为 NO,只有在上层 APP 开启了 Data Protection 时才起效。设置成 YES 时,云信文件保护属性 为 NSFileProtectionNone ,设置成 NO 时,为 NSFileProtectionCompleteUntilFirstUserAuthentication
是否需要将被撤回的消息计入未读计算考虑 shouldConsiderRevokedMessageUnreadCount  默认为 NO。设置成 YES 的情况下,如果被撤回的消息本地还未读,那么当消息发生撤回时,对应会话的未读计数将减 1 以保持最近会话未读数的一致性。
是否需要多端同步未读数 shouldSyncUnreadCount 默认为 NO。设置成 YES 的情况下,同个账号多端(PC 和 移动端等)将同步未读计数。
是否将群通知计入未读 shouldCountTeamNotification 默认为 NO。设置成 YES 的情况下,收到的群通知也会计入未读数
针对用户信息开启 https 支持 enabledHttpsForInfo 默认为 YES。在默认情况下,我们认为用户头像,群头像,聊天室类用户头像等信息都是默认托管在云信上,所以 SDK 会针对他们自动开启 https 支持。但如果你需要将这些信息都托管在自己的服务器上,需要设置这个接口为 NO,避免 SDK 自动将你的 http url 自动转换为 https url。
针对消息内容开启 https 支持 enabledHttpsForMessage 默认为 YES。在默认情况下,我们认为消息,包括图片,视频,音频信息都是默认托管在云信上,所以 SDK 会针对他们自动开启 https 支持。但如果你需要将这些信息都托管在自己的服务器上,需要设置这个接口为 NO,避免 SDK 自动将你的 http url 自动转换为 https url。 (强烈不建议) 。需要注意的是即时设置了这个属性,通过 iOS SDK 发出去的消息 URL 仍是 https 的,设置这个值只影响接收到的消息 URL 格式转换
自动登录重试次数 maxAutoLoginRetryTimes 即默认情况下,自动登录将无限重试。设置成大于 0 的值后,在没有登录成功前,自动登录将重试最多 maxAutoLoginRetryTimes 次,如果失败,则抛出错误 (NIMLocalErrorCodeAutoLoginRetryLimit)。
本地 log 存活期 maximumLogDays 默认为 7 天。即超过 7 天的 log 将被清除。只能设置大于等于 2 的值
是否支持动图缩略 animatedImageThumbnailEnabled 默认为 NO。即默认情况下,从服务器获取原图缩略图时,如果原图为动图,我们将返回原图第一帧的缩略图。而开启这个选项后,我们将返回缩略图后的动图。这个选项只影响从服务器获取的缩略图,不影响本地生成的缩略图
是否禁止后台重连 reconnectInBackgroundStateDisabled 默认为 NO。即默认情况下,当程序退到后台断开连接后,如果 App 仍能运行,SDK 将继续执行自动重连机制。设置为 YES 后在后台将不自动重连,重连将被推迟到前台进行。只有特殊用户场景才需要此设置,无明确原因请勿设置。
是否开启群回执功能 teamReceiptEnabled 默认为 NO。
客户端自定义信息,用于多端登录时同步该信息 customTag

NOS资源场景配置

sceneDict 预设场景和自定义场景规则。

原型

@interface NIMSDK : NSObject

/**
*  资源场景配置
*  @discussion nos 预设场景和自定义场景规则
*  可以覆盖设置,如果预设场景不设置,为系统默认设置
*  sceneDict key-value,系统默认预设场景为3种,自定义场景不超过10种
*  key 是场景,nsstring类型;value 是资源存活时间,nsnumber类型,精确到天,0为永久存活
*  例如:@{@"nim_icon":@0,@"nim_msg":@0,@"nim_system":@0,@"nim_custom":@30}
*/
@property (nonatomic,strong)         NSMutableDictionary *sceneDict;

@end