前言
- 本篇为开篇,会涉及很多基本的东西,所以篇幅较大,若是觉得行文啰嗦还请各位大佬不要打我。
- 本篇目的,是从0开始到实现单聊则打住,后续的特定需求会新开特定篇来写。
- 若是跟着文章走,遇见了坑请看文末的坑总结章节,相信很快你就能成功接入。
- 去融云开发平台申请key什么的我就不说了,会申请QQ号就会申请这个
- 有什么问题请直接留言指出,欢迎批评指正。
跑个官方Demo压压惊
不管怎样,接入三方SDK最快的方式——官方Demo
所以起手我们还是把Demo打开玩一玩
相关资料:
融云IM Demo
融云新手指导
融云Android SDK集成指南
融云Server开发指南
融云开发者平台
融云sdk下载地址
PS:API调试入口:我的控制台——>左侧栏目API调试
运行效果:
Demo在手,天下我有。
分析:
来一个感性的认知。
从这个Demo来看,它的使用场景基本是:
点击一个列表item ——> 进入点对点的聊天界面。
在这个聊天界面内有可以发送许多类型的消息。地图位置,图片,文本等等。
总结下特征就是:
- 聊天模式(点对点)
- 消息类型(多种)
信息很有限,不过也是最直观的东西,所以我准备以此作为一个切入点来进行聊天的学习。
知识点铺垫
虽然Demo已经跑起来了,但是我还是懵逼的,我们还需要了解下融云相关的知识点。
基本概念
基础概念篇幅太大,其中包含业务篇,开发篇,我准备划俩个相对重要的,其他的则不作赘述,具体参考:http://www.rongcloud.cn/docs/quick_start.html#basic_concept
App Key / Secret
App Key / Secret 相当于您的 App 在融云的帐号和密码。是融云 SDK 连接服务器所必需的标识,每一个 App 对应一套 App Key / Secret。
Token
- Token 即用户令牌,相当于您 APP 上当前用户连接融云的身份凭证。每个用户连接服务器都需要一个 Token,用户更换即需要更换 Token。每次初始化连接服务器时,都需要向服务器提交 Token。
- Token 称为用户令牌。
- Token 则是您 App 上的每一个用户的身份授权象征。
- 您可以通过提交 userId 等信息来获得一个该用户对应的 Token,并使用这个 Token 作为该用户的唯一身份凭证与其他用户进行通信。
- Token 的主要作用是身份授权和安全,因此不能通过客户端直接访问融云服务器获取 Token,您必须通过 Server API 从融云服务器 获取 Token 返回给您的 App,并在之后连接时使用。详细描述请参考 Server开发指南中的用户服务和获取Token方法小节。
官方流程图:
分析:
我们的最终目的是通过connect方法去连接聊天服务器,但是官方服务器需要我们带Token,但是token我们没有并且也不能自己维护token,所以我们就需要去请求服务器拿token,然而要拿这个token我们就需要从本地拿到我们登录时得到的userId作为一个请求参数去哪token,这样一个流程走下来我们就能去连接聊天服务器了。
那么我们如何获取一个测试token呢?
这就要用到官方提供的API调试工具了,接着往下看。
Api调试的的使用
利用Api调试获取测试token
最开始我就PS了,API调试入口:我的控制台——>左侧栏目API调试
这个东西在我们初期调试时很重要,因为你也可以看到token是通信必须,而我们在前期服务器没调试完成的情况下,**如何来拿这个token呢?**这个时候就需要用到api调试这个功能。
如图:
可以看到这里我们获取到的信息是:
userId:zj666
name:测试用户呵
portraitUri:https://ss3.baidu.com/-rVXeDTa2gU2pMbgoY3K/it/u=225869644,1383753585&fm=202&mola=new&crop=v1
请求结果:
{
"code":200,
"userId":"zj666",
"token":"wxS1DLbYEHlYRvEGldlHlLv9HaIuPBiUqpl0jm19YznutxcjH0D1Z2Yo81ijEZhZLPWs7qwNNlTGuKduIiTDBg=="
}
一顿操作猛如虎
来不及解释了,带上你的老年卡赶紧上车吧,滴,滴滴。
SDK引入
SDK下载地址:http://www.rongcloud.cn/downloads
既然是学习,我就全勾选下载了。
汇总
Name | Type | Desc | 引入姿势 |
---|---|---|---|
IMKit | 界面 | 融云 IM 界面组件 | Import Moudle |
CallKit | 界面 | 融云音视频界面组件 | Import Moudle |
IMLib | 库 | 融云 IM 通讯能力库 armeabi, armeabi-v7a, arm64-v8a, x86 | Import Moudle |
CallLib | 库 | 融云音视频核心组件 armeabi-v7a, x86 | Import Moudle |
LocationLib | 库 | 融云位置相关库,高德地图的低版本jar包。 | copy jar int your libs direct |
RedPacket | 库 | 融云红包相关库 | Import Moudle |
另外一点疑问,如图:
一般来说Kit和Lib都下载,因为它lib里边的库不全,但你用的话可以选择性的用,但是一点,用Kit必用Lib,但Kit不是必须的。
引入后的项目目录结构
配置文件
gradle文件依赖
dependencies {
//kit 内依赖了lib 所以不必再依赖lib 又因为第一行 fileTree ,所以不必再额外依赖location jar包
compile project(':IMKit')
compile project(':CallKit')
compile project(':RedPacket')
}
IMLib Module # AndroidManifest.xml
<meta-data
android:name="RONG_CLOUD_APP_KEY"
android:value="您的应用 AppKey" />
App Module # AndroidManifest.xml (位置依赖相关)
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="高德地图的 AppKey" />
App Module # AndroidManifest.xml (FileProvider)
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="您的应用包名.FileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name=