Page History

Home

Last edited by 王军波

iOS 聊天互动 SDK 3.0.0


一、产品概述

CNLiveChatManager 是视讯云推出的iOS平台上使用的软件开发工具包(SDK),为开发者提供简单快捷的接口,帮助开发者实现在各个平台上的聊天及评论功能。需配合CNLiveMsgTools软件开发工具包(SDK)一起使用。

二、版本更新说明

2017.03.10(版本号:2.0.0)

新增连接服务器状态监听方法;

新增加入聊天室状态监听方法;

新增单聊功能;

新增异地登录被踢下线功能;

2017.06.08(版本号:2.1.0)

新增获取评论列表方法;

新增评论一条节目方法;

新增给评论点赞方法;

新增获取节目评论数方法;

2017.06.12(版本号:2.1.1)

新增获取聊天室人数方法;

2017.12.29(版本号:3.0.0)

新增发送消息进度监听方法;

新增视频消息类型;

新增图片,语音,视频类型消息主动下载数据到本地方法;

退出登录,断开连接新增成功失败回调;

新增发送语音,视频的方法;

新增获取本地会话消息,从cache中获取最后几条消息方法;

三、SDK功能特性

支持同时加入多个聊天室;

支持断线自动重连;

实时监听与服务器的连接状态;

可获取当前用户信息;

可主动获取当前连接状态;

四、系统要求

最低支持iOS版本:iOS 8.0

支持的CPU架构:armv7,arm64,x86_64

五、集成方式

下载互动SDK,同时需要下载CNLiveMsgTools视讯云通讯工具SDK。

导入互动SDK和工具SDK。

由于是动态库,在使用的时候需要把Framework 同时添加到‘Embedded Binaries’中。否则会报image not found错误。

使用聊天功能引入头文件

#import <CNLiveChatManager/CNLiveChatManager.h>

使用评论功能引入头文件

#import <CNLiveChatManager/CNLiveCommentManager.h>

注意:提交APP到App Store 时请用发布版SDK。

六、互动SDK聊天功能基本使用

6.1 初始化聊天SDK

/**
 初始化SDK方法

 @param appKey 从视讯云平台获取到的appKey
 @param appId    从视讯云平台获取到的appId
 @warning           必传参数
 @discussion   您在使用聊天SDK所有功能之前,您必须先调用此方法初始化SDK。在App整个生命周期中,您只需要执行一次初始化。
 */
- (void)initWithAppKey:(NSString *)appKey appId:(NSString *)appId;

代码示例:
    [[CNLiveChatManager sharedCNLiveChatManager] initWithAppKey:KAppKey appId:KAppId];

6.2连接到视讯云服务器

以匿名方式登陆到服务器

/**
 连接到视讯云服务器

 @param successBlock 连接建立成功的回调。
 @param errorBlock   连接建立成功的回调,返回错误码。
 */
- (void)connectServerSuccess:(void (^)())successBlock
                       error:(void (^)(CNLiveChatConnectErrorCode errors, NSString *errorMsg))errorBlock;

注:连接服务器成功后才能使用聊天功能(如:单聊、加入聊天室、聊天室内聊天);

已用户信息方式登陆到服务器

/**
 以用户信息登陆到视讯云服务器

 @param userInfo     用户信息
 @param successBlock 登陆成功的回调,返回登陆成功的用户ID。
 @param errorBlock   登陆失败的回调,返回错误码。
 */
- (void)loginServer:(CNLiveChatUserInfo *)userInfo
                       success:(void (^)(NSString *userId))successBlock
                         error:(void (^)(CNLiveChatConnectErrorCode errors, NSString *errorMsg))errorBlock;

6.3当前用户登出服务器

/**
 当前用户登出服务器

 @param successBlock 登出成功的回调,返回登陆成功的用户ID。
 @param errorBlock   登出失败的回调,返回错误码。
 */
- (void)logoutServer:(CNLiveIMSucc)successBlock error:(CNLiveIMFail)errorBlock;

6.4 断开与服务器的连接

/**
 断开与服务器的连接

 @param successBlock 断开成功的回调,返回登陆成功的用户ID。
 @param errorBlock   断开失败的回调,返回错误码。
 */
- (void)disconnectServer:(CNLiveIMSucc)successBlock error:(CNLiveIMFail)errorBlock;

6.5 加入聊天室

加入已经存在的聊天室

/**
 加入已经存在的聊天室

 @param targetId     要加入的聊天室ID
 @param messageCount 进入聊天室时获取历史消息的数量,-1<=messageCount<=20
 -1表示不获取任何历史消息,0表示不特殊设置而使用SDK默认的设置(默认为获取10条),0<messageCount<=20为具体获取的消息数量,最大值为20。
 @param successBlock 加入聊天室成功的回调,返回成功加入的聊天室ID。
 @param errorBlock   加入聊天室失败的回调,返回错误码以及加入失败的聊天室ID。
 */
- (void)joinExistChatRoom:(NSString *)targetId
          messageCount:(int)messageCount
               success:(void (^)(NSString *targetId))successBlock
                 error:(void (^)(CNLiveChatErrorCode errors, NSString *errorMsg))errorBlock;

加入聊天室, 若不存在自动创建聊天室

/**
 加入聊天室,若不存在自动创建聊天室

 @param targetId     要加入的聊天室ID
 @param messageCount 进入聊天室时获取历史消息的数量,-1<=messageCount<=20
 -1表示不获取任何历史消息,0表示不特殊设置而使用SDK默认的设置(默认为获取10条),0<messageCount<=20为具体获取的消息数量,最大值为20。
 @param successBlock 加入聊天室成功的回调,返回成功加入的聊天室ID
 @param errorBlock   加入聊天室失败的回调,返回错误码以及加入失败的聊天室ID
 */
- (void)joinChatRoom:(NSString *)targetId
        messageCount:(int)messageCount
             success:(void (^)(NSString *targetId))successBlock
               error:(void (^)(CNLiveChatErrorCode errors, NSString *errorMsg))errorBlock;

6.6 获取聊天室成员人数

/**
获取聊天室成员人数

@param targetId     聊天室ID
@param successBlock 成功回调,返回聊天室成员数量
@param errorBlock   失败回调,返回错误代码
*/
- (void)getChatRoomInfo:(NSString *)targetId
                success:(void (^)(int totalMemberCount))successBlock
                  error:(void (^)(CNLiveChatErrorCode status, NSString *errorMsg))errorBlock;

6.7 退出聊天室

/**
 退出聊天室

 @param targetId     要退出的聊天室ID
 @param successBlock 退出聊天室成功的回调,返回成功退出的聊天室ID
 @param errorBlock   退出聊天室失败的回调,返回失败的错误码以及退出失败的聊天室的ID
 */
- (void)quitChatRoom:(NSString *)targetId
         success:(void (^)(NSString *targetId))successBlock
           error:(void (^)(CNLiveChatErrorCode errors, NSString *errorMsg))errorBlock;

6.8 发送消息

/**
 发送文本消息

 @param message      消息内容(文本消息 CNLiveChatMessage)
 @param type         会话类型(私聊 / 聊天室)
 @param targetId     会话目标ID(私聊:用户ID / 聊天室:聊天室ID)
 @param successBlock 发送消息成功的回调,消息实体类型对象(包括消息内容,消息ID,会话类型,目标ID,发送者的用户信息)
 @param errorBlock   发送消息失败的回调,返回错误码,消息ID,目标ID
 */
- (void)sendMessage:(NSString *)message
               type:(CNLiveConversationType)type
           targetId:(NSString *)targetId
            success:(void (^)(CNLiveChatMessage * message))successBlock
              error:(void (^)(CNLiveChatErrorCode errors, NSString *errorMsg))errorBlock;

/**
 发送图片消息

 @param type             会话类型(私聊 / 聊天室)
 @param targetId         会话目标ID(私聊:用户ID / 聊天室:聊天室ID)
 @param content          消息内容(图片类型 CNliveChatImageMessage)
 @param successBlock     消息发送成功的回调
 @param errorBlock       消息发送失败的回调
 */
- (void)sendMediaMessage:(CNLiveConversationType)type
                targetId:(NSString *)targetId
                 content:(CNliveChatImageMessage *)content
                proBlock:(void (^)(CNliveChatImageMessage * message))proBlock
                 success:(void (^)(CNliveChatImageMessage * message))successBlock
                   error:(void (^)(CNLiveChatErrorCode errorCode, NSString * errorMsg))errorBlock;

/**
 发送语音消息

 @param type             会话类型(私聊 / 聊天室)
 @param targetId         会话目标ID(私聊:用户ID / 聊天室:聊天室ID)
 @param content          消息内容(语音消息 CNLiveChatVoiceMessage)
 @param successBlock     消息发送成功的回调
 @param errorBlock       消息发送失败的回调
 */
- (void)sendVoiceMessage:(CNLiveConversationType)type
                targetId:(NSString *)targetId
                 content:(CNLiveChatVoiceMessage *)content
                proBlock:(void (^)(CNLiveChatVoiceMessage * message))proBlock
                 success:(void (^)(CNLiveChatVoiceMessage * message))successBlock
                   error:(void (^)(CNLiveChatErrorCode errorCode, NSString * errorMsg))errorBlock;

/**
 发送视频消息

 @param type             会话类型(私聊 / 聊天室)
 @param targetId         会话目标ID(私聊:用户ID / 聊天室:聊天室ID)
 @param content          消息内容(视频消息 CNLiveChatVideoMessage)
 @param successBlock     消息发送成功的回调
 @param errorBlock       消息发送失败的回调
 */
- (void)sendVideoMessage:(CNLiveConversationType)type
                targetId:(NSString *)targetId
                 content:(CNLiveChatVideoMessage *)content
                proBlock:(void (^)(CNLiveChatVideoMessage * message))proBlock
                 success:(void (^)(CNLiveChatVideoMessage * message))successBlock
                   error:(void (^)(CNLiveChatErrorCode errorCode, NSString * errorMsg))errorBlock;

6.9 获取当前SDK的连接状态

/**
 获取当前SDK的连接状态

 @return 当前SDK的连接状态
 */
(CNLiveConnectionStatus)getConnectionStatus;

6.10 获取某个会话中指定数量的最新消息

/**
 获取某个会话中指定数量的最新消息

 @param conversationType 会话类型(私聊 / 聊天室)
 @param targetId         会话目标ID(私聊:用户ID / 聊天室:聊天室ID)
 @param count            所要获取的消息数量

 @param successBlock     成功回调返回消息体
        (包括 CNLiveChatMessage文本类型 / CNliveChatImageMessage图片类型 / CNLiveChatVoiceMessage语音类型 /CNLiveChatVideoMessage视频类型)
 @param errorBlock       失败回调返回错误码
 @discussion
 此方法会获取该会话中指定数量的最新消息实体,返回的消息实体按照时间从新到旧排列。
 如果会话中的消息数量小于参数count的值,会将该会话中的所有消息返回。
 */
- (void)getLatestMessages:(CNLiveConversationType)conversationType
                 targetId:(NSString *)targetId
                    count:(int)count
             successBlock:(void(^)(NSArray *msgs))successBlock
               errorBlock:(void(^)(int code, NSString *msg))errorBlock;

/**
 *  获取本地会话消息
 *  @param conversationType 会话类型(私聊)
 *  @param targetId         会话目标ID(私聊:用户ID)
 *  @param count            获取数量
 *  @param last             上次最后一条消息
 *  @param successBlock     成功时回调
 *  @param errorBlock       失败时回调
 *
 *  @return 0 本次操作成功
 */
- (int)getLocalMessage:(CNLiveConversationType)conversationType
               targetId:(NSString *)targetId
                  count:(int)count
                   last:(CNLiveChatMessageBase *)last
           successBlock:(void(^)(NSArray *msgs))successBlock
             errorBlock:(void(^)(int code, NSString *msg))errorBlock;

/**
 *  从cache中获取最后几条消息
 *
 *  @param count 需要获取的消息数,最多为20
 *
 *  @return 消息(TIMMessage*)列表,第一条为最新消息
 */
- (NSArray*)getLastMessages:(CNLiveConversationType)conversationType
                   targetId:(NSString *)targetId
                      count:(uint32_t)count;

6.11 当前登录用户的用户信息

/**
 当前登录用户的用户信息

 @discussion 用于与融云服务器建立连接之后,获取&设置当前用户的用户信息。
 用户ID不允许重新设置,只能设置昵称&头像。
 */
@property(nonatomic, strong) CNLiveChatUserInfo *currentUserInfo;

6.12 聊天SDK代理

/**
 聊天SDK代理,设置代理后,实现代理方法。
 */
@property (nonatomic, weak) id<CNLiveChatManagerDelegate> delegate;

6.13 连接状态的的监听器(代理方法)

/**
 连接状态的的监听器

 @param status 网络连接状态码
 */
- (void)onConnectionStatusChanged:(CNLiveConnectionStatus)status;

6.14 加入聊天室状态监听(代理方法)

加入聊天室成功的监听

/**
 加入聊天室成功的监听
 @param chatroomId 聊天室ID
 */
- (void)onChatRoomJoined:(NSString *)chatroomId;

加入聊天室失败的监听

/*!
 加入聊天室失败的监听

 @param chatroomId 聊天室ID
 @param errorCode  加入失败的错误码

 @discussion 如果错误码是CNLive_KICKED_FROM_CHATROOM或CNLive_CHATROOM_NOT_EXIST,则不会自动重新加入聊天室,App需要按照自己的逻辑处理。
 */
- (void)onChatRoomJoinFailed:(NSString *)chatroomId
                   errorCode:(CNLiveChatErrorCode)errorCode;

6.15 接收消息监听(代理方法)

/**
 接收消息监听

 @param message 消息实体类型对象(包括消息内容,消息ID,会话类型,目标ID,发送者的用户信息)
 */
- (void)onReceived:(CNLiveChatMessageBase *)message;

6.16 当前用户在其他设备上登录(代理方法)

/**
 当前用户在其他设备上登录,此设备被踢下线。
 */
- (void)kickedByAnotherDevice;

6.17 发送消息进度监听录(代理方法)

/**
 发送消息进度监听

 @param msg      正在上传的消息
 @param idx      正在上传的消息的索引
 @param taskid   任务id
 @param progress 上传进度
 */
- (void)onUploadProgressCallback:(CNLiveChatMessageBase*)msg idx:(uint32_t)idx taskid:(uint32_t)taskid progress:(uint32_t)progress;

七、互动SDK评论功能基本使用

7.1 注册视讯评论方法

/**
 注册视讯评论

 @param appId  从视讯云平台获取到的appId
 @param appKey 从视讯云平台获取到的appKey
 */
- (void)registerWithAppId:(NSString *)appId appKey:(NSString *)appKey;

7.2 获取评论列表方法

/**
 获取评论列表

 @param programId       节目ID
 @param page            页号
 @param pageSize        每页显示的条数
 @param successBlock    获取列表成功回调
 @param errorBlock      获取列表失败回调
 */
- (void)getCommentListWithProgramId:(NSString *)programId
                               page:(NSString *)page
                           pageSize:(NSString *)pageSize
                            success:(void (^)(CNLiveCommentListResult *result))successBlock
                              error:(void (^)(NSString *error))errorBlock;

7.3 评论一条节目方法

/**
 评论一条节目

 @param programId       节目ID
 @param sid             用户ID
 @param comment         评论内容
 @param completionBlock 评论结果回调,{errorCode:"0",errorMsg:"成功"},
                                   {errorCode:"xxx",//错误代码(非0)errorMsg:"失败" //错误信息}
 */
- (void)commentOnProgramWithProgramId:(NSString *)programId
                                  sid:(NSString *)sid
                              comment:(NSString *)comment
                           completion:(void (^)(NSString *errorCode, NSString *errorMsg))completionBlock;

7.4 给评论点赞方法

/**
 给评论点赞

 @param programId       节目ID
 @param sid             用户ID
 @param commentId       评论ID
 @param completionBlock 点赞结果回调,{errorCode:"0",errorMsg:"成功"},
                                   {errorCode:"xxx",//错误代码(非0)errorMsg:"失败" //错误信息}
 */
- (void)commentaryLikeWithProgramId:(NSString *)programId
                                sid:(NSString *)sid
                          commentId:(NSString *)commentId
                         completion:(void (^)(NSString *errorCode, NSString *errorMsg))completionBlock;

7.5 获取节目评论数方法

/**
 获取节目评论数

 @param programIds      节目ID数组(数组内可以是字符串类型,可以是NSNumber类型,其他不支持)
 @param completionBlock 获取节目评论数回调结果,{errorCode:"0",errorMsg:"成功"},
                                           {errorCode:"xxx",//错误代码(非0)errorMsg:"失败" //错误信息}
                                           commentArray:CNLiveCommentCountResult类型数组,CNLiveCommentCountResult包含节目ID及对应的评论数;
 */
- (void)getCommentCountWithProgramIds:(NSArray *)programIds
                           completion:(void (^)(NSString *errorCode, NSString *errorMsg, NSArray <CNLiveCommentCountResult *>*commentArray))completionBlock;

八、常见错误提示

常见失败信息:

示例:请求token错误
{
    errorCode = "sys_1015";
    errorMessage = "appID\U65e0\U6548";
}