Android 接入腾讯IM即时通信(详细图文) - Stars-one
source link: https://www.cnblogs.com/stars-one/p/16088085.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
本文为作者原创,转载请注明出处,谢谢配合
作者:stars-one
链接:https://www.cnblogs.com/stars-one/p/16088085.html
本篇大约有3258个字,阅读预计需要4.07分钟
腾讯云IM官网文档上提供了带UI模块和不带UI模块的,本文是基于带UI模块进行了Module封装,可以方便各位快速接入,至于后面的页面改造,相信对于各位也是轻车熟路了,这里就不再赘述
1.申请账号
第一步,是申请账号,好像有个体验版可以使用,不过只能创建100个账户,可以用这个先来对接
2.下载module文件
这里的module文件,是我个人基于官方文档上稍微改动些东西,没有做功能的删改,可以快速接入到现有的项目中
module注意点:
- androidx版本
- 内置使用Glide4.x
- 使用的SDK为
imsdk-plus
,版本号为6.0.1975
旧项目如果使用了support
版本和Glide3.x
版本,记得做兼容处理:将旧项目的迁移到androidx版本和升级GLide版本并作代码调整处理
module下载地址:>>>点击打赏获取
3.配置Gradle,引入依赖
我以一个常规的Android项目来说明
1.将压缩包的文件解压出来,放入的同级目录,如下图所示
2.在根目录的settings.gradle
文件中添加下面代码
//以下是腾讯云IM的Module接入
include ':tim'
// 引入内部组件通信模块 (必要模块)
include ':tuicore'
project(':tuicore').projectDir = new File(settingsDir, '/TUIKit/TUICore/tuicore')
// 引入聊天功能模块 (基础功能模块)
include ':tuichat'
project(':tuichat').projectDir = new File(settingsDir, '/TUIKit/TUIChat/tuichat')
// 引入关系链功能模块 (基础功能模块)
include ':tuicontact'
project(':tuicontact').projectDir = new File(settingsDir, '/TUIKit/TUIContact/tuicontact')
// 引入会话功能模块 (基础功能模块)
include ':tuiconversation'
project(':tuiconversation').projectDir = new File(settingsDir, '/TUIKit/TUIConversation/tuiconversation')
// 引入群组功能模块
include ':tuigroup'
project(':tuigroup').projectDir = new File(settingsDir, '/TUIKit/TUIGroup/tuigroup')
3.在根目录的build.gradle
文件中添加下面的代码
ext {
compileSdkVersion = 28
minSdkVersion = 19
targetSdkVersion = 28
versionCode = 1
versionName = "6.0.1992"
abiFilters = ['armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'] //['armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64']
arguments = "-DANDROID_STL=c++_static"
cppFlags = "-std=c++11"
}
同时,在加上腾讯云的仓库源
maven { url "https://mirrors.tencent.com/nexus/repository/maven-public/" }
5.app的module中添加依赖
implementation project(path: ':tim')
同时,还需要加上下面的代码(否则编译会出错)
manifestPlaceholders = [
// TPNS 推送服务 accessId、accessKey
XG_ACCESS_ID : "",
XG_ACCESS_KEY: ""
]
注意:这里
compileSdkVersion
不要使用31版本的,要使用30版本的,31版本默认使用的jdk11,会导致编译错误
添加完上述代码,重新构造一下项目(sync project)
4.配置腾讯云IM的key
这里需要注意的是,腾讯云IM的登录需要userId
和userSig
,而userSig
是通过SDKAPPID
和SECRETKEY
加密计算userId
得出的
而这种,官方推荐是后台去计算,然后提供接口返回数据给到我们APP来使用,否则容易泄露密钥被他人盗刷
不过为了测试,我们可以先暂时放在本地来做加密计算流程
直接找到GenerateTestUserSig.java
这个文件,修改里面的SDKAPPID
和SECRETKEY
即可
5.测试使用
使用的话,需要在AndroidManifest配置application
可能这里有同学疑问了,那之前旧项目有个application了,应该怎么解决呢?这里作扩展,就单独放在下面再讲了
android:name="com.tencent.qcloud.tim.demo.DemoApplication"
tools:replace="allowBackup"
xmlns:tools="http://schemas.android.com/tools"
之后,在你想要的点击事件地方加上页面跳转即可(如下代码)
Intent intent = new Intent(this, SplashActivity.class);
startActivity(intent);
效果就出来(样式似乎有所冲突,不过项目都接入进来了,后面都好调整)
补充:多个application解决方案
多个application的情况,需要判断application类位于哪个module中,有下面两种情况:
- 位于主Module中(即app里)
- 位于其他Module(包含第三方库那种)
如果是第一种情况,比较好解决,因为app中的application代码我们可修改,所以,让其继承于DemoApplication即可,然后AndroidManifest文件中使用DemoApplication
简单起见,MyApplication里面并没有编写如何代码
如果是第二种情况,又可以分为两种情况:
- 主模块app依赖了模块C,
AndroidManifest
中声明的ApplicationC
,此时,需要使用Tim模块里的DemoApplication
- 主模块app依赖了模块C,主模块同时继承
ApplicationC
写了个ApplicationB
,AndroidManifest
中声明的是ApplicationB
,此时,需要使用Tim模块里的DemoApplication
上面的两种情况,
第1个情况解决方案:
Tim模块去依赖模块C,并且让我们的DemoApplication
继承于ApplicationC
,AndroidManifest
中使用DemoApplication
第2个情况解决方案:
Tim模块去依赖模块C,并且让我们的DemoApplication
继承于ApplicationC
之后,还要修改主模块里的ApplicationB
,让其继承于DemoApplication
,AndroidManifest
中使用ApplicationB
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK