初始化

申请 AppID 与 AppSign

请在 LinkV 开发者后台 申请 SDK 鉴权需要的 appid 和 签名,获取 AppID 和 AppSecret 指引

初始化 SDK

设置 IM 配置

  • 配置appIdsecret
[[LVIMSDK sharedInstance] initWithAppId:appid secret:secret];
  • 设置进入调试状态,使用测试环境,YES调试状态NO正式环境,默认为正式环境
[[LVIMSDK sharedInstance] setDebugMode:YES];
  • 打开日志,YES打印日志,NO不打印,如不设置,默认为不打印
[[LVIMSDK sharedInstance] setLogVisible:YES];

更多配置方法详见 配置 API 文档

启动 IM 服务

[[LVIMSDK sharedInstance] start];

设置代理

设置接收消息代理

建议在初始化sdk时设置全局消息代理,如不设置,私信消息和房间消息都将无法收到。

LVIMSDK *sdk = [[LVIMSDK sharedInstance] setAppId:appid secret:secret];

[[LVIMSDK sharedInstance] setGlobalReceiveMessageDelegate:delegateObject];

[[LVIMSDK sharedInstance] start];
//全局消息回调方法
-(int)onIMReceiveMessageHandler:(NSString*)owner
       immsg:(LVIMMessage*)immsg
       waitings:(int)waitings
       packetSize:(int)packetSize
       waitLength:(int)waitLength
       bufferSize:(int)bufferSize
{
    /* 处理消息 */
    return(0);
}
  • 在过滤回调方法中您可以根据各参数对消息进行过滤。
  • 以下面代码为例,根据当前待处理消息条数和消息所占字节数过滤消息。
//消息过滤回调方法
-(BOOL)onIMReceiveMessageFilter:(int32_t)diytype
       fromid:(const char*)fromid
       toid:(const char*)toid
       msgtype:(const char*)msgtype
       content:(const char*)content
       waitings:(int)waitings
       packetSize:(int)packetSize
       waitLength:(int)waitLength
       bufferSize:(int)bufferSize
{
    /* 比如当前有超过1000条消息待处理并且消息所占字节数大于10K,则丢弃该消息。 */
    if ( waitings > 1000 && packetSize > 10000 )
    {
        return(YES);
    }
    return(NO);
}

详细说明

  1. onIMReceiveMessageFilter

消息过滤回调,对消息进行过滤。

return YES 表示丢弃消息。return NO 则会继续处理。

-(BOOL)onIMReceiveMessageFilter:(int32_t)diytype
       fromid:(const char*)fromid
       toid:(const char*)toid
       msgtype:(const char*)msgtype
       content:(const char*)content
       waitings:(int)waitings
       packetSize:(int)packetSize
       waitLength:(int)waitLength
       bufferSize:(int)bufferSize
       return(NO);
}
  • diytype
    • SDK 处理消息加速策略用,请忽略。
  • fromid
    • 消息发送者用户 ID
  • toid
    • 接收者用户 ID(如果是房间消息则是房间 ID)
  • msgtype
    • 消息类型,提供给您使用的消息扩展类型字段,您可以使用这个字段自定义消息类型。可传任意字符串,但不能传空串或 null
  • content
    • 消息内容,是消息内容字符串对应的字节数组。
  • waitings
    • 当前收到的消息队列中等待处理的消息数量。如果待处理的消息量特别大,建议适当丢弃部分消息。
  • packetSize
    • 此条消息数据包所占字节数。在内存紧张的情况下,建议丢弃占字节数特别大的消息。
  • waitLength
    • 当前读取消息的缓冲区中等待处理的字节数大小。
  • bufferSize
    • 当前读取消息的缓冲区的大小。

fromid 格式要求:字符串 类型,长度不超过 32,仅允许包含字母、数字或下划线 _

toid 格式要求:字符串 类型,长度不超过 32,仅允许包含字母、数字或下划线 _

  1. onIMReceiveMessageHandler

消息处理回调,如果消息未被丢弃,则调用此方法。

-(int)onIMReceiveMessageHandler:(NSString*)owner
       immsg:(LVIMMessage*)msg
       waitings:(int)waitings
       packetSize:(int)packetSize
       waitLength:(int)waitLength
       bufferSize:(int)bufferSize
{
    return(0);
}
  • owner

    • 当前登录 IM 的用户 ID
  • msg

  • waitings

    • 当前收到的消息队列中等待处理的消息数量。
  • packetSize

    • 此条消息数据包所占字节数大小。
  • waitLength

    • 当前读取消息的缓冲区中等待处理的字节数大小。
  • bufferSize

    • 当前读取消息的缓冲区的大小。

owner 格式要求:字符串 类型,长度不超过 32,仅允许包含字母、数字或下划线 _

设置 token 验证监听

token 的用途和获取详见 SDK 架构设计

[[LVIMSDK sharedInstance] setModuleEventDelegate:delegateObject];

-(void)onQueryIMToken
{
    /*
     * ....
     * 伪代码 NSString *token = getToken();
     */
    [[LVIMSDK sharedInstance] setIMToken:uid token:token];
}


-(void)onIMAuthSuccessed:(NSString*)uid token:(NSString*)token unReadMsgSize:(int)unReadMsgSize
{
    /* IM校验token通过 */
}


-(void)onIMAuthFailed:(NSString*)uid token:(NSString*)token ecode:(int)ecode rcode:(int)rcode expired:(BOOL)expired
{
    /* IM token校验失败会回调此方法。同时也回调onQueryIMToken. */
}


-(void)onIMTokenExpired:(NSString*)uid token:(NSString*)token owner:(NSString*)owner
{
    /* IM token过期会回调此方法。同时也回调onQueryIMToken */
}

详细说明

  1. onQueryIMToken 查询 token 回调

请在此回调中请求并设置 IM token

需要特别注意的是 token 错误、过期、或者未设置时,此回调会频繁调用,请注意加逻辑控制避免频繁请求。

-(void)onQueryIMToken;
  1. onIMAuthFailed,校验 token 失败回调

设置 token 后,SDK 会将 token用户 ID 传给 IM Server 进行验证,如果验证失败会调用此方法,同时也会调用 onQueryIMToken 方法。

所以失败后不需要在验证失败的回调中写请求和设置 IM token 的逻辑。

-(void)onIMAuthFailed:(NSString*)uid token:(NSString*)token ecode:(int)ecode rcode:(int)rcode expired:(BOOL)expired;
  • uid
    • 登录 IM 用户 ID
  • token
    • 校验失败的 token
  • ecode
  • rcode
    • 值恒为 0 ,忽略。
  • expired
    • YES 为 token 过期错误,NO 为非过期错误。

uid 格式要求:字符串 类型,长度不超过 32,仅允许包含字母、数字或下划线 _

  1. onIMAuthSucceed

校验 token 成功回调,token 验证成功后就可以使用 IM 的进行发消息等功能了,可在此提示用户连接 IM 成功。

-(void)onIMAuthSuccessed:(NSString*)uid token:(NSString*)token unReadMsgSize:(int)unReadMsgSize;
  • uid
    • 验证成功的 IM 用户 ID
  • token
    • 验证成功的 IM token
  • unReadMsgSize
    • 未读消息数。

uid 格式要求:字符串类型,长度不超过 32,仅允许包含字母、数字或下划线 _

  1. onIMTokenExpired

token 过期回调。

IM SDKIM Server 拉取未读消息时如果返回结果为 token 过期会调用此方法,同时也会调用 onQueryIMToken 方法。

所以不需要在 token 过期的回调中写请求和设置 IM token 的逻辑。

-(void)onIMTokenExpired:(NSString*)uid token:(NSString*)token owner:(NSString*)owner;
  • uid
    • 验证成功的 IM 用户 ID
  • token
    • 验证成功的 IM token
  • owner
    • 值为 queryLVIMConfig 代表请求 IM 配置时 token 过期,getUnReadMsg 代表拉取未读消息时检测到 token 过期。您可忽略。

uid 格式要求:字符串类型,长度不超过 32,仅允许包含字母、数字或下划线 _

登录

用户登录时应触发,成功返回 0, 否则返回非 0

[[LVIMSDK sharedInstance] login:uid country:@""];
  • uid
    • 用户 ID
  • country
    • 用户所属国家码,可传空串

uid 格式要求:字符串类型,长度不超过 32,仅允许包含字母、数字或下划线 _

登出

用户登出时应触发 登出,停止 IM 服务。

登出

 [[LVIMSDK sharedInstance] logout:waitFlushTimeout waitFinishTimeout:waitFinishTimeout];
  • waitFlushTimeout
    • 等待数据同步超时毫秒数 默认值
  • waitFinishTimeout

停止 IM 服务

[[LVIMSDK sharedInstance] stop:timeout];

参数解析

  • timeout
    • 等待停止运行的最大超时毫秒数。

更多 API 的使用详见 API 文档汇总



  1. 小于等于 0 时不等待,默认 1000