6

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

 2 years ago
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.
neoserver,ios ssh client

本文为作者原创,转载请注明出处,谢谢配合
作者:stars-one
链接:https://www.cnblogs.com/stars-one/p/16088085.html

本篇大约有3258个字,阅读预计需要4.07分钟


原文地址: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项目来说明

1210268-20220401155240285-1810634112.png

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

1210268-20220401161014480-1644529472.png

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')
1210268-20220401161149031-1030142565.png

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"
}
1210268-20220401161443732-1091914643.png

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

 maven { url "https://mirrors.tencent.com/nexus/repository/maven-public/" }
1210268-20220401161651688-268951651.png

5.app的module中添加依赖

implementation project(path: ':tim')
1210268-20220401162543227-1566009580.png

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

manifestPlaceholders = [
        // TPNS 推送服务 accessId、accessKey
        XG_ACCESS_ID : "",
        XG_ACCESS_KEY: ""
]
1210268-20220401163457822-1158783353.png

注意:这里compileSdkVersion不要使用31版本的,要使用30版本的,31版本默认使用的jdk11,会导致编译错误

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

4.配置腾讯云IM的key

这里需要注意的是,腾讯云IM的登录需要userIduserSig,而userSig是通过SDKAPPIDSECRETKEY加密计算userId得出的

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

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

直接找到GenerateTestUserSig.java这个文件,修改里面的SDKAPPIDSECRETKEY即可

1210268-20220401161840671-294782794.png

5.测试使用

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

可能这里有同学疑问了,那之前旧项目有个application了,应该怎么解决呢?这里作扩展,就单独放在下面再讲了

android:name="com.tencent.qcloud.tim.demo.DemoApplication"

tools:replace="allowBackup"
xmlns:tools="http://schemas.android.com/tools"
1210268-20220401163707467-1006592267.png

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

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

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

1210268-20220401164147168-757473564.png
1210268-20220401164441421-100722323.png

补充:多个application解决方案

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

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

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

1210268-20220401171020498-1829539165.png

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

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

  1. 主模块app依赖了模块C,AndroidManifest中声明的ApplicationC,此时,需要使用Tim模块里的DemoApplication
  2. 主模块app依赖了模块C,主模块同时继承ApplicationC写了个ApplicationBAndroidManifest中声明的是ApplicationB,此时,需要使用Tim模块里的DemoApplication

上面的两种情况,

第1个情况解决方案:

Tim模块去依赖模块C,并且让我们的DemoApplication继承于ApplicationCAndroidManifest中使用DemoApplication

第2个情况解决方案:
Tim模块去依赖模块C,并且让我们的DemoApplication继承于ApplicationC

之后,还要修改主模块里的ApplicationB,让其继承于DemoApplicationAndroidManifest中使用ApplicationB


提问之前,请先看提问须知 点击右侧图标发起提问
联系我
或者加入QQ群一起学习
Stars-One安卓学习交流群
TornadoFx学习交流群:1071184701
1210268-20200316120825333-1551152974.png
1210268-20190508151523126-971809604.gif

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK