初始化

申请 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 SDKIM 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文档汇总