初始化

申请 AppID 与 AppSecret

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

初始化SDK

设置 IM 配置

  • 打开日志,true 为打印日志,false 为不打印。如不设置,默认为不打印。
LVIMSDK.sharedInstance().setLogVisibleState(true);
  • 请在初始化之前调用打开日志、设置主机域名(setHost)、打开调试模式等配置方法。

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

LVIMSDK.sharedInstance().initWithAppId(Application app, String appId, String appSecret);

参数解析

  • app
    • 应用的实例对象 Application ,不能传 null
  • appId
    • 后台申请的 appId
  • appSecret
    • 后台申请的 appSecret

启动IM服务

LVIMSDK.sharedInstance().start();

设置监听器

设置接收消息监听

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

在过滤回调方法中您可以根据各参数对消息进行过滤。

以下面代码为例,根据当前待处理 消息条数 和 消息所占字节数 过滤消息。

LVIMSDK.sharedInstance().setGlobalReceiveMessageListener(receiveMessageListener);

IMBridger.IMReceiveMessageListener receiveMessageListener = new IMBridger.IMReceiveMessageListener() {
        @Override
        public boolean onIMReceiveMessageFilter(int cmdtype, int subtype, int diytype, int dataid, String fromid, String toid, String msgType, byte[] msgContent, int waitings, int packetSize, int waitLength, int bufferSize) {
            // 比如当前有超过1000条消息待处理并且消息所占字节数大于10K,则丢弃该消息。
            if(waitings > 1000 && packetSize > 10000){
              return true;
            }
            return false;
        }

        @Override
        public int onIMReceiveMessageHandler(String owner, IMMsg msg, int waitings, int packetSize, int waitLength, int bufferSize) {
            // ...
          
            return 0;
        }
    };

详细说明

  1. onIMReceiveMessageFilter

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

return true 表示丢弃消息。return false 则会继续处理,回调 onIMReceiveMessageHandler 方法。

boolean onIMReceiveMessageFilter(int cmdtype, int subtype, int diytype, int dataid, String fromid,
                                 String toid, String msgType, byte[] msgContent, int waitings, 
                                 int packetSize, int waitLength, int bufferSize)

参数说明:

  • cmdtype
    • 消息类型:10代表私信类型,11代表群组类型,20代表房间类型,40代表系统类型。
  • subtype
    • 内容类型,为内容的媒体类型,0代表文本内容,1代表图片内容,2代表音频内容,3代表视频内容。80为房间消息,即房间消息不区分媒体类型。
  • diytype
    • SDK处理消息加速策略用,请忽略。
  • dataid
    • SDK处理消息加速策略用,请忽略。
  • fromid
    • 消息发送者用户ID
  • toid
    • 接收者用户ID(如果是房间消息则是房间ID)
  • msgType
    • 消息类型,提供给您使用的消息扩展类型字段,您可以使用这个字段自定义消息类型。可传任意字符串,但不能传空串或null。
  • msgContent
    • 消息内容,是消息内容字符串对应的字节数组。
  • waitings
    • 当前收到的消息队列中等待处理的消息数量。如果待处理的消息量特别大,建议适当丢弃部分消息。
  • packetSize
    • 此条消息数据包所占字节数。在内存紧张的情况下,建议丢弃占字节数特别大的消息。
  • waitLength
    • 当前读取消息的缓冲区中等待处理的字节数大小。
  • bufferSize
    • 当前读取消息的缓冲区的大小。

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

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

  1. onIMReceiveMessageHandler

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

int onIMReceiveMessageHandler(String owner, IMMsg msg, int waitings, int packetSize,
                              int waitLength, int bufferSize)

参数说明:

  • owner
    • 当前登录IM的用户ID。
  • msg
  • waitings
    • 当前收到的消息队列中等待处理的消息数量。
  • packetSize
    • 此条消息数据包所占字节数大小。
  • waitLength
    • 当前读取消息的缓冲区中等待处理的字节数大小。
  • bufferSize
    • 当前读取消息的缓冲区的大小。

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

设置token验证监听

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

LVIMSDK.sharedInstance().setEventListener(moduleEventListener);
/** token验证事件监听 **/
IMBridger.IMModuleEventListener moduleEventListener = new IMBridger.IMModuleEventListener() {
    @Override
    public void onQueryIMToken() {
                //....
        }

    @Override
    public void onIMAuthFailed(int ecode, int rcode, String uid, boolean isTokenExpired) {
        // IM token校验失败会回调此方法。同时也回调onQueryIMToken().
            LogUtils.d(TAG, "IM token校验失败 错误码 = " + ecode);
        }

    @Override
    public void onIMAuthSucceed(String uid, String token, long unReadMsgSize) {
        // IM校验token通过
        
        //...     
    }

    @Override
    public void onIMTokenExpired(String uid, String token, String emsg) {
        // IM token过期会回调此方法。同时也回调onQueryIMToken().
        
        //...
    }
};

详细说明

  1. onQueryIMToken

查询 token 回调,请在此回调中请求并设置 IM token。

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

具体实现可参考 IM Demo

void onQueryIMToken()
  1. onIMAuthFailed

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

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

void onIMAuthFailed(int ecode, int rcode, String uid, boolean isTokenExpired)

参数说明:

  • ecode
  • rcode
    • 值恒为0 ,忽略。
  • uid
    • 登录IM用户ID
  • isTokenExpired
    • true为token过期错误,false为非过期错误。

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

  1. onIMAuthSucceed

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

void onIMAuthSucceed(String uid, String token, long unReadMsgSize)

参数说明:

  • uid
    • 验证成功的IM用户ID。
  • token
    • 验证成功的IM token。
  • unReadMsgSize
    • 未读消息数。

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

  1. onIMTokenExpired

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

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

void onIMTokenExpired(String uid, String token, String emsg)

参数说明:

  • uid
    • 验证成功的IM用户ID。
  • token
    • 验证成功的IM token。
  • emsg
    • 值为"QUERY_IM_CONFIG"代表请求IM配置时token过期,"QUERY_UNREAD_MSG"代表拉取未读消息时检测到token过期。您可忽略。

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

登录

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

LVIMSDK.sharedInstance().login(String uid, String country);

参数说明:

  • uid

    • 用户ID。
  • country

    • 用户所属国家码,可传空串或null,传空会默认取设备的国家码。

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

登出

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

登出

LVIMSDK.sharedInstance().logout();

停止IM服务

LVIMSDK.sharedInstance().stop();

释放销毁IMSDK

无特殊情况尽量不要使用

LVIMSDK.sharedInstance().release();

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