Android腾讯IM快速集成流程和注意事项

前言

最近项目集成了及时通信业务, 采用的是腾讯IM

首先是SDK的快速集成, 步骤如下:

第一步 安装依赖包

1
implementation 'com.tencent.imsdk:imsdk-plus:5.6.1200'

第二步 初始化SDK (需要用到appid)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
V2TIMManager.getInstance()
.initSDK(this, "这里填写appid", V2TIMSDKConfig().apply {
logLevel = V2TIMSDKConfig.V2TIM_LOG_INFO


}, object : V2TIMSDKListener() {
override fun onConnecting() {
Log.i("KIM", "正在连接到腾讯云服务器")
}

override fun onConnectSuccess() {
Log.i("KIM", "已经成功连接到腾讯云服务器")

}

override fun onConnectFailed(code: Int, error: String?) {
Log.i("KIM", "连接腾讯云服务器失败 $code $error")
}
})

第三步 登录IM

1
2
3
4
5
6
7
8
9
10
11
12
V2TIMManager.getInstance().login(
"这里填当前用户id",
"这里填登录密钥 从后台获取",object : V2TIMCallback {
override fun onSuccess() {
Log.i(TAG, "登录成功")

}

override fun onError(code: Int, desc: String?) {
Log.i(TAG, "登录失败 $code $desc")
}
})

第四步 加入群聊房间 (如果是单聊可以跳过该步骤)

1
2
3
4
5
6
7
8
9
10
V2TIMManager.getInstance().joinGroup("这里填房间号 从后台获取", "", object : V2TIMCallback {
override fun onSuccess() {
Log.i(TAG, "加入群组成功")

}

override fun onError(code: Int, desc: String?) {
Log.i(TAG, "加入群组失败 $code $desc")
}
})

第五步 接收消息

如果业务不涉及音视频传输:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
V2TIMManager.getInstance().addSimpleMsgListener(object :
V2TIMSimpleMsgListener() {

// 对应 sendGroupCustomMessage
override fun onRecvGroupCustomMessage(
msgID: String?,
groupID: String?,
sender: V2TIMGroupMemberInfo?,
customData: ByteArray?
) {
super.onRecvGroupCustomMessage(msgID, groupID, sender, customData)
Log.i(TAG, "接收群聊自定义消息")
}

// 对应 sendGroupTextMessage
override fun onRecvGroupTextMessage(
msgID: String?,
groupID: String?,
sender: V2TIMGroupMemberInfo?,
body: String?
) {

Log.i(TAG, "接收群聊文本消息 $body")

}
override fun onRecvC2CTextMessage(msgID: String?, sender: V2TIMUserInfo?, text: String?) {
super.onRecvC2CTextMessage(msgID, sender, text)
Log.i(TAG, "接收单聊文本消息 $text")
}

override fun onRecvC2CCustomMessage(
msgID: String?,
sender: V2TIMUserInfo?,
customData: ByteArray?
) {
super.onRecvC2CCustomMessage(msgID, sender, customData)
Log.i(TAG, "接收单聊自定义消息 ")
}


})

如果业务涉及音视频传输:

1
2
3
4
5
6
V2TIMManager.getMessageManager().addAdvancedMsgListener( object : V2TIMAdvancedMsgListener() {
override fun onRecvNewMessage(msg: V2TIMMessage?) {
Log.i(TAG, "收到消息类型${msg?.elemType} ")

}
})

第六步 发送消息

如果业务不涉及音视频传输:

  1. 单聊 (分为文本消息和自定义消息)

    • 文本消息

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      V2TIMManager.getInstance().sendC2CTextMessage("这里填需要发送的文本",
      "这里填对方的登录id",
      V2TIM_PRIORITY_HIGH,
      object : V2TIMValueCallback<V2TIMMessage> {
      override fun onSuccess(t: V2TIMMessage?) {
      Log.i(TAG, "发送单聊文本消息成功")
      }

      override fun onError(code: Int, desc: String?) {
      Log.i(TAG, "发送单聊文本消息失败 $code $desc")
      }
      })
    • 自定义消息

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      V2TIMManager.getInstance().sendC2CCustomMessage("这里填需要发送的自定义消息 格式为字节数组",
      "这里填对方的登录id",
      V2TIM_PRIORITY_HIGH,
      object : V2TIMValueCallback<V2TIMMessage> {
      override fun onSuccess(t: V2TIMMessage?) {
      Log.i(TAG, "发送单聊自定义消息成功")
      }

      override fun onError(code: Int, desc: String?) {
      Log.i(TAG, "发送单聊自定义消息失败 $code $desc")
      }
      })
  1. 群聊 (分为文本消息和自定义消息)

    • 文本消息

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      V2TIMManager.getInstance().sendGroupTextMessage("这里填需要发送的文本",
      "这里填群聊房间id",
      V2TIM_PRIORITY_HIGH,
      object : V2TIMValueCallback<V2TIMMessage> {
      override fun onSuccess(t: V2TIMMessage?) {
      Log.i(TAG, "发送群文本消息成功")
      }

      override fun onError(code: Int, desc: String?) {
      Log.i(TAG, "发送群文本消息失败 $code $desc")
      }
      })
  • 自定义消息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    V2TIMManager.getInstance().sendGroupCustomMessage("这里填需要发送的自定义消息 格式为字节数组",
    "这里填群聊房间id",
    V2TIM_PRIORITY_HIGH,
    object : V2TIMValueCallback<V2TIMMessage> {
    override fun onSuccess(t: V2TIMMessage?) {
    Log.i(TAG, "发送群自定义消息成功")
    }

    override fun onError(code: Int, desc: String?) {
    Log.i(TAG, "发送群自定义消息失败 $code $desc")
    }
    })

如果业务涉及音视频传输:

该方法支持音视频图片 文本和自定义消息

1
V2TIMManager.getMessageManager().sendMessage()

注意事项

这里的坑主要在于消息的收发, 官方给的API比较多, 单聊和群聊串在一块, 看文档有时容易懵, 这里对收发消息的使用做了一个总结, 如下:

1
2
3
4
5
* IM群聊和单聊的消息收发走的是同一套  总共分为两种需求:
* 第一种: 不涉及音视频 只涉及字符串传输 那么监听消息使用addSimpleMsgListener 发消息使用sendC2C(Group)TextMessage和sendC2C(Group)CustomMessage
* 第二种: 涉及音视频等复杂消息传递 那么监听消息使用addAdvancedMsgListener 发消息使用V2TIMManager.getMessageManager().sendMessage()
*
* 注意: setGroupListener不是监听的群聊消息 而是对群组相关的事件监听 比如群创建通知 公告等等

附加

腾讯IM集成文档

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

0%