初始化
申请 AppID 与 AppSign
请在 LinkV 开发者后台 申请 SDK 鉴权需要的 appid 和 签名,获取 AppID 和 AppSecret 指引。
初始化 SDK
设置 IM 配置
- 配置appId和secret。
[[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);
}
详细说明
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,仅允许包含字母、数字或下划线 _
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
- LVIMMessage 消息对象,详见 LVIMMessage API
-
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 */
}
详细说明
onQueryIMToken
查询token
回调
请在此回调中请求并设置 IM token
。
需要特别注意的是 token
错误、过期、或者未设置时,此回调会频繁调用,请注意加逻辑控制避免频繁请求。
-(void)onQueryIMToken;
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,仅允许包含字母、数字或下划线 _
onIMAuthSucceed
校验 token
成功回调,token
验证成功后就可以使用 IM
的进行发消息等功能了,可在此提示用户连接 IM
成功。
-(void)onIMAuthSuccessed:(NSString*)uid token:(NSString*)token unReadMsgSize:(int)unReadMsgSize;
uid
- 验证成功的 IM 用户 ID。
token
- 验证成功的 IM token。
unReadMsgSize
- 未读消息数。
uid
格式要求:字符串
类型,长度不超过 32,仅允许包含字母、数字或下划线 _
onIMTokenExpired
token 过期回调。
IM SDK 向 IM 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];
停止 IM 服务
[[LVIMSDK sharedInstance] stop:timeout];
参数解析
timeout
- 等待停止运行的最大超时毫秒数。
更多 API 的使用详见 API 文档汇总
- 小于等于 0 时不等待,默认 1000↩