code学习

Android 接入腾讯IM即时通信(详细图文)

原文地址:Android 接入腾讯IM即时通信(详细图文) | Stars-One的杂货小窝
腾讯云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项目来说明

Android 接入腾讯IM即时通信(详细图文)

1.将压缩包的文件解压出来,放入的同级目录,如下图所示

Android 接入腾讯IM即时通信(详细图文)

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')
           
Android 接入腾讯IM即时通信(详细图文)

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"
}
           
Android 接入腾讯IM即时通信(详细图文)

同时,在加上腾讯云的仓库源

maven { url "https://mirrors.tencent.com/nexus/repository/maven-public/" }
           
Android 接入腾讯IM即时通信(详细图文)

5.app的module中添加依赖

implementation project(path: ':tim')
           
Android 接入腾讯IM即时通信(详细图文)

同时,还需要加上下面的代码(否则编译会出错)

manifestPlaceholders = [
        // TPNS 推送服务 accessId、accessKey
        XG_ACCESS_ID : "",
        XG_ACCESS_KEY: ""
]
           
Android 接入腾讯IM即时通信(详细图文)
注意:这里

compileSdkVersion

不要使用31版本的,要使用30版本的,31版本默认使用的jdk11,会导致编译错误

添加完上述代码,重新构造一下项目(sync project)

4.配置腾讯云IM的key

这里需要注意的是,腾讯云IM的登录需要

userId

userSig

,而

userSig

是通过

SDKAPPID

SECRETKEY

加密计算

userId

得出的

而这种,官方推荐是后台去计算,然后提供接口返回数据给到我们APP来使用,否则容易泄露密钥被他人盗刷

不过为了测试,我们可以先暂时放在本地来做加密计算流程

直接找到

GenerateTestUserSig.java

这个文件,修改里面的

SDKAPPID

SECRETKEY

即可

Android 接入腾讯IM即时通信(详细图文)

5.测试使用

使用的话,需要在AndroidManifest配置application

可能这里有同学疑问了,那之前旧项目有个application了,应该怎么解决呢?这里作扩展,就单独放在下面再讲了
android:name="com.tencent.qcloud.tim.demo.DemoApplication"

tools:replace="allowBackup"
xmlns:tools="http://schemas.android.com/tools"
           
Android 接入腾讯IM即时通信(详细图文)

之后,在你想要的点击事件地方加上页面跳转即可(如下代码)

Intent intent = new Intent(this, SplashActivity.class);
startActivity(intent);
           

效果就出来(样式似乎有所冲突,不过项目都接入进来了,后面都好调整)

Android 接入腾讯IM即时通信(详细图文)
Android 接入腾讯IM即时通信(详细图文)

补充:多个application解决方案

多个application的情况,需要判断application类位于哪个module中,有下面两种情况:

  1. 位于主Module中(即app里)
  2. 位于其他Module(包含第三方库那种)

如果是第一种情况,比较好解决,因为app中的application代码我们可修改,所以,让其继承于DemoApplication即可,然后AndroidManifest文件中使用DemoApplication

Android 接入腾讯IM即时通信(详细图文)

简单起见,MyApplication里面并没有编写如何代码

如果是第二种情况,又可以分为两种情况:

  1. 主模块app依赖了模块C,

    AndroidManifest

    中声明的

    ApplicationC

    ,此时,需要使用Tim模块里的

    DemoApplication

  2. 主模块app依赖了模块C,主模块同时继承

    ApplicationC

    写了个

    ApplicationB

    AndroidManifest

    中声明的是

    ApplicationB

    ,此时,需要使用Tim模块里的

    DemoApplication

上面的两种情况,

第1个情况解决方案:

Tim模块去依赖模块C,并且让我们的

DemoApplication

继承于

ApplicationC

AndroidManifest

中使用

DemoApplication

第2个情况解决方案:

Tim模块去依赖模块C,并且让我们的

DemoApplication

继承于

ApplicationC

之后,还要修改主模块里的

ApplicationB

,让其继承于

DemoApplication

AndroidManifest

中使用

ApplicationB

这里还有一种方法,就是利用

ContentProvider

或者是官方出的

App Startup

的库来进行初始化,详情可以参考Jetpack架构组件学习(4)——App Startup库的使用 - Stars-One的杂货小窝

提问之前,请先看提问须知

点击右侧图标发起提问

Android 接入腾讯IM即时通信(详细图文)

或者加入QQ群一起学习

Android 接入腾讯IM即时通信(详细图文)

TornadoFx学习交流群:1071184701

Android 接入腾讯IM即时通信(详细图文)

继续阅读