# 腾讯云通讯技术培训 **Repository Path**: jasonxiao001/tencent_cloud_communication_technology_training ## Basic Information - **Project Name**: 腾讯云通讯技术培训 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-04-10 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 腾讯云通讯技术培训 每章节后一般都有相应的练习,完成后找相关开发人员review或邮件输出,学习过程中有任何问题或想法可以直接联系开发人员。 ## 目录 [功能介绍](#功能介绍) [费用](#费用) [整体架构](#整体架构) [账号体系](#账号体系) [在线状态](#在线状态) [用户资料和关系链](#用户资料和关系链) [群组](#群组) [收发消息](#收发消息) [客户场景](#客户场景) [工具](#工具) [复杂问题解决流程](#复杂问题解决流程) [辅助开发/技能/工具培训](#辅助开发/技能/工具培训) [内部的接口人信息](#内部的接口人信息) ## 功能介绍 ### 学习内容 1. 看腾讯云通讯[官网](https://cloud.tencent.com/product/im),了解imsdk的功能 2. 按照顺序看完[产品简介](https://cloud.tencent.com/document/product/269/1497?)的内容 3. 下载官网上安卓和ios的demo,体验注册,登录,加好友,加入群组,创建群组,发文本消息,发图片消息,发语音消息,发文件消息,多终端登录,离线推送等功能 ### 实践内容 1. 根据自己的理解写一份imsdk的产品介绍,200字左右 2. 写一份imsdk demo的体验报告 ## 费用 ### 学习内容 1. 在[官网](https://cloud.tencent.com/product/im)看各项收费标准,了解收费各项功能含义 2. 了解如何购买相应的付费服务 3. 负责的产品和商务初步接触 ## 整体架构 ### 学习内容 1. 结合 [云通信整体架构图](https://gitee.com/jasonxiao001/tencent_cloud_communication_technology_training/blob/master/docs/photos/%E4%BA%91%E9%80%9A%E4%BF%A1%E6%9E%B6%E6%9E%84%E5%9B%BE.png) 及 [功能介绍](#功能介绍) 了解云通信提供的服务,与及客户应用、客户应用后台服务、云通信服务之间的关系。 2. 通过 [云通信交互时序图](https://gitee.com/jasonxiao001/tencent_cloud_communication_technology_training/blob/master/docs/photos/%E4%BA%91%E9%80%9A%E4%BF%A1%E4%BA%A4%E4%BA%92%E6%97%B6%E5%BA%8F%E5%9B%BE.png) 了解各功能的整体交互流程 ### 实践内容 1. 解释整体架构中各种角色的主要职责 2. 自己组织语言描述一下登录过程 ## 账号体系 ### 学习内容 1. 在[官网](https://cloud.tencent.com/document/product/269/1507)看账号登录集成,重点看独立模式 2. 阅读demo中登录的代码,了解后台生成签名和客户端的交互 ### 实践内容 1. 用文字描述独立模式流程,写出客户接入账号体系需要完成工作,解释签名的来源和常见错误码的原因 ## 在线状态 ### 学习内容 和QQ类似,使用IMSDK的用户有不同的在线状态,用户处于离线状态和在线状态收发消息等功能的表现会发生变化,这里需要了解状态变化的方式和触发原因,以及相应状态的表现。 1. [在线状态综述](https://cloud.tencent.com/document/product/269/3665) 2. [在线状态的查询](https://cloud.tencent.com/document/product/269/2566) 3. [客户端在线状态管理](https://cloud.tencent.com/document/product/269/1559#5-.E7.94.A8.E6.88.B7.E7.8A.B6.E6.80.81.E5.8F.98.E6.9B.B45) ### 实践内容 1. 写一个app使用IMSDK,实现登录,被踢下线回调的监听 ## 用户资料和关系链 ### 学习内容 1. 学习[官网](https://cloud.tencent.com/document/product/269/3558)关于用户资料和关系链的内容,该页面链接的子页面均需要阅读 ### 实践内容 1. 描述客户需要自定义资料字段的处理方式,已经客户端实现方法 2. 阅读demo里面好友添加,搜索,删除等相关代码 ## 群组 ### 学习内容 1. 阅读[群组功能概述](https://cloud.tencent.com/document/product/269/1502),了解群的分类和能力 2. ## 收发消息 ### 消息结构 在ImSDK中,一条消息由 `TIMMessage` 来表示,而具体的消息内容则是由一个个 `TIMElem` 来表示。 一条消息至少需要包含一个 `TIMElem`, 还可以是多个 `TIMElem` 的组合,比如可以在一条消息中同时组合文本、图片、表情等元素。 ![消息结构](./docs/photos/消息组成.png) 其中各种Elem的含义如下: + TIMTextElem 文本消息 + TIMImageElem 图片消息 + TIMFileElem 文件消息 + TIMFaceElem 表情消息(表情索引) + TIMSoundElem 语音消息 + TIMVideoElem 视频消息 + TIMLocationElem 位置消息(经纬度) + TIMCustomElem 自定义消息(可以定制化各种丰富消息) + TIMGroupTipsElem 群事件通知消息 + 还有其他一些系统通知消息 ### 发送消息 结合 [云通信交互时序图](https://gitee.com/jasonxiao001/tencent_cloud_communication_technology_training/blob/master/docs/photos/%E4%BA%91%E9%80%9A%E4%BF%A1%E4%BA%A4%E4%BA%92%E6%97%B6%E5%BA%8F%E5%9B%BE.png) 中消息收发部分的时序图学习以下内容: 1. 学习 [发送单聊消息](https://cloud.tencent.com/document/product/269/3662#.E5.8F.91.E9.80.81.E5.8D.95.E8.81.8A.E6.B6.88.E6.81.AF) 的相关内容 2. 学习 [发送群聊消息](https://cloud.tencent.com/document/product/269/3663#.E5.8F.91.E9.80.81.E7.BE.A4.E6.B6.88.E6.81.AF) 的相关内容 ### 接收消息 结合 [云通信交互时序图](https://gitee.com/jasonxiao001/tencent_cloud_communication_technology_training/blob/master/docs/photos/%E4%BA%91%E9%80%9A%E4%BF%A1%E4%BA%A4%E4%BA%92%E6%97%B6%E5%BA%8F%E5%9B%BE.png) 中消息收发部分的时序图学习以下内容: 1. 学习 [接收单聊消息](https://cloud.tencent.com/document/product/269/3662#.E6.8E.A5.E6.94.B6.E5.8D.95.E8.81.8A.E6.B6.88.E6.81.AF) 的相关内容 2. 学习 [接收群聊消息](https://cloud.tencent.com/document/product/269/3663#.E6.8E.A5.E6.94.B6.E7.BE.A4.E6.B6.88.E6.81.AF) 的相关内容 ### 离线推送 ## 客户常见场景 ### 学习内容 1. 学习 [IM常见场景说明](./docs/IM常见场景说明.md),了解客户常见场景及相应的解决方案 ### 实践内容 1. 尝试在demo中增加语音红点功能 ## 工具 ### 运营系统 - 查什么问题 - 怎么查 - 负责人 ### 控制台超级账号 - 查什么问题 - 怎么查 - 负责人 ### 客户端日志工具 ImSDK提供了捞取客户端日志的工具,入口为 [日志管理](http://10.241.92.16:8080/logadmin/index)。 具体使用文档可以参考 [这里](http://km.oa.com/articles/show/289651)。 > 注意: 因为二线无法登录,可以通过 [这里](http://10.241.92.16:8080/ticket?user=v_zltzheng&pass=1test23) 进入日志管理系统。 ### 推送后台染色 在查找推送消息收不到的问题时,可以到 [CloudTracer](http://console.cloudtracer.isd.com/msg/add) 对帐号进行染色,然后让客户重现问题。 工具的详细使用文档请看 [这里]()。 ### FAQ查询 ### 错误码 请参考官网 [错误码说明](https://cloud.tencent.com/document/product/269/1671)。 ## 复杂问题解决流程 ### 接收不到消息 **C2C消息** 1. 确认消息是否发送成功 2. 确认接收方是否登录成功 3. 确认发送消息是指定的会话是否与接收方一致 **群组消息** 1. 确认消息是否发送成功 2. 确认接收方是否登录成功 3. 确认接收方是否是群成员 4. 确认一下该群是不是曾经解散过又重建了(这种情况可能会触发去重,建议在收到解散群组的通知的时候,通过 `deleteLocalMsgs` 把对应群组会话的本地消息删除了) 最后,不管是C2C消息还是群消息,在以上步骤无法确认问题的时候,需要继续确认以下情况: 1. 确认是否注册了消息监听器 2. 确认发送方发送消息的时候,是否把elem添加到消息中了(发消息的时候需要检查addElement的返回值),如果发送的是空消息,接收方在收到的时候会把这种消息丢掉 3. Android的需要确认是否注册了多个消息监听器,并且在消息监听器中返回了true 4. 以上步骤都无法确认问题的话,可以让用户提供日志或者自行捞取日志,结合 [日志格式说明](https://cloud.tencent.com/document/product/269/6042) 来看下客户端有没有收到消息,收到消息的话,走到了哪一个步骤 ### 收不到离线推送 **APNs** 1. 确认是否按照 [上传证书到控制台](https://cloud.tencent.com/document/product/269/1577#.E4.B8.8A.E4.BC.A0.E8.AF.81.E4.B9.A6.E5.88.B0.E6.8E.A7.E5.88.B6.E5.8F.B0) 正确上传证书到腾讯云控制台 2. 确认在登录成功后,是否成功 [上报token到腾讯云](https://cloud.tencent.com/document/product/269/1577#.E5.AE.A2.E6.88.B7.E7.AB.AF.E5.AE.9E.E7.8E.B0-apns-.E6.8E.A8.E9.80.81) 了 3. 确认是否正确上报了 [切前后台事件](https://cloud.tencent.com/document/product/269/1577#.E5.AE.A2.E6.88.B7.E7.AB.AF.E5.AE.9E.E7.8E.B0-apns-.E6.8E.A8.E9.80.81) 4. 确认消息是否只有TIMCustomElem,且其中的desc属性是空的 **Android** 参考 [离线推送](https://cloud.tencent.com/document/product/269/3899) 说明文档进行以下确认: 1. 确认是否正确上传了推送证书 2. 确认是否成功上报token 3. 如果不是第三方离线推送,确认一下QALService进程是否存活,不存活的情况下确实会收不到离线推送,需要依赖系统的自启动权限。 4. 存在多进程的情况下,是否只在主进程进行了imsdk的初始化,如果不是,需要修改为只在主进程初始化 5. 如果是第三方离线推送,比如小米、华为等,可以先让客户通过对应的第三方控制台直接推送消息看手机是否可以收到,如果收不到可能存在两种原因:1)用户集成第三方离线推送有问题,请按照文档操作。 2)手机兼容问题,该手机本身不能很好的兼容该离线推送,比如部分华为手机无法接收到华为的离线推送 6. 如果是魅族离线推送收不到,请确认一下sdk版本号,v2版本需要v2.7.0以上,v3版本需要v3.3.0以上才支持魅族离线推送 不管是APNs推送还是Android上的离线推送,在以上步骤都确认OK的话,就可以继续按照以下步骤来进一步确认问题: 1. 确认接收方ID是否与消息要推送的用户ID一致 2. 确认用户设置了离线推送监听器(Android) 3. 确认是否设置了免打扰, iOS参考 [设置自己的推送声音](https://cloud.tencent.com/document/product/269/1577#.E8.AE.BE.E7.BD.AE.E8.87.AA.E5.B7.B1.E7.9A.84.E6.8E.A8.E9.80.81.E5.A3.B0.E9.9F.B3), Android参考 [设置全局离线推送配置](https://cloud.tencent.com/document/product/269/3899#.E8.AE.BE.E7.BD.AE.E5.85.A8.E5.B1.80.E7.A6.BB.E7.BA.BF.E6.8E.A8.E9.80.81.E9.85.8D.E7.BD.AE) 4. 确认消息是否是通过 `sendOnlineMessage` 接口发送的是在线消息, 或者通过restApi推送的时候设置了lifetime为0 5. 确认消息是否设置了不进行离线推送的标识,iOS参考 [每条离线推送属性](https://cloud.tencent.com/document/product/269/1577#.E6.AF.8F.E6.9D.A1.E7.A6.BB.E7.BA.BF.E6.8E.A8.E9.80.81.E5.B1.9E.E6.80.A7), Android 参考 [设置单条消息的离线推送配置](https://cloud.tencent.com/document/product/269/3899#.E8.AE.BE.E7.BD.AE.E5.8D.95.E6.9D.A1.E6.B6.88.E6.81.AF.E7.9A.84.E7.A6.BB.E7.BA.BF.E6.8E.A8.E9.80.81.E9.85.8D.E7.BD.AE) 6. 可以重现的情况下,优先让用户提供sdkappid及userid,通过 [推送后台染色](http://console.cloudtracer.isd.com/msg/add) 来确认消息是否已经成功推送到对应的第三方后台服务器 7. 不可重现的话,可以找对应模块负责人查看后台日志来定位问题 ### crash问题跟进 crash问题跟进一般步骤如下: 1. 首先,需要区分一下是我们SDK的crash,还是客户自身代码的crash 可以根据crash堆栈中是否存在以下关键字来确认是不是我们SDK的crash: + imcore + imsdk + tls + qalsdk + TIMxxx (这里是IMSDK的具体类o) 2. 如果确认是我们SDK的crash,需要让客户提供SDK的具体版本号(如3.3.1.13445.13450),转给相关负责人进行跟进。 ### android UnsatisfiedLinkError问题 UnsatisfiedLinkError的问题根本原因是so没有加载或者so中没有对应的方法。理论上发布的SDK中携带的so不可能会出现缺少符号的情况,所以这个问题很大程度上其实是so没有加载引起的。 而造成so没有加载的原因大致有以下几种: 1. 打包apk的时候,没有提供完整的so 2. 提供了多种cpu abi的jni文件夹,但均与当前机器的cpu架构不符 3. 在没有初始化ImSDK的情况下,调用其他的接口 4. 长时间在后台或者锁屏导致应用被系统回收,在重新恢复的时候没有重新进行初始化 5. 因为其他crash导致应用资源被回收,然后在再次调用ImSDK接口之前没有重新进行初始化 ### android NoClassDefFoundError问题 NoClassDefFoundError是app在运行的过程中找不到相应的类。 如果是**必现**的,则一般是以下两个原因: 1. 客户在打包apk的时候,漏掉了包含该类定义的jar包 2. 客户开启了混淆,并且没有在规则文件中 keep 对应的类 如果是**偶现**的,则很有可能跟multidex相关,出现的原因是分包的时候把相应的类分到了非主dex,在应用启动会优先加载主dex,然后才会加载其他dex,如果在其他dex没有加载完成的情况下,使用到了非主dex中定义的类的话,就会出现找不到类的情况。解决方法是把应用启动的时候需要用到的类都分到主dex中。参考 [配置方法数超过 64K 的应用](https://developer.android.com/studio/build/multidex.html?hl=zh-cn)。 ## 辅助开发/技能/工具培训 ## 内部的接口人信息 - 遇到什么问题找谁解决