本篇文章结构

一、集成流程。

二、集成中遇到的问题

集成过程

TIM图片20180425151417.png

很清楚,前几部没什么说的,去官网注册账号就好了,我们接下来看账号集成。

首先第一步是集成模式选择

独立模式:私钥由开发者保存,公钥由腾讯保存。开发者使用私钥生成用户签名 UserSig,腾讯使用公钥对签名 UserSig 进行校验。

托管模式:私钥由腾讯保存,公钥由开发者保存。腾讯使用私钥生成用户签名 UserSig,开发者可以使用公钥对签名 UserSig 进行校验,注意,对于第三方开放帐号,此时不需要公私钥。

这里可以根据你们的业务需求选择合适的模式。

这里选择独立模式集成,也就是后台使用私钥生成用户签名,APP端使用UserSig调用SDK登录腾讯服务器,登录成功后就可以使用IM功能了。

然后就要开始下载SDK进行集成了。

TIM图片20180425153120.png

这里是区分SDK版本号的,不同的版本它的文档是不一样。

我这里选择的是V3.x的版本。

腾讯提供了一个demo 随心聊IM 不过这个demo中使用的SDK版本是V2.x。

所以如果你要集成的是V3.x的版本,你还需要注意他们的区别。

关于引入Jar包,清单文件配置等不在赘诉,官方文档写的很清楚。

这里说一下SDK的初始化。

private void init(){

InitBusiness.start(getApplicationContext(), TIMManager.ERROR);//初始化IMSDK

initTIMLoginConfig();//登录腾讯服务器

}

private void initTIMLoginConfig()

{

String identify = UserController.getInstance().getPhone();//用户唯一标识

String sig = UserController.getInstance().getSig(); //根据用户唯一标识生成的签名

if (!TextUtils.isEmpty(identify)&&!TextUtils.isEmpty(sig))

{

LoginBusiness.loginIm(identify, sig, new TIMCallBack() {

@Override

public void onError(int i, String s) {

Log.e(TAG, "onError: "+s);

}

@Override

public void onSuccess() {

Log.e(TAG, "onSuccess: 登录成功!");

initIM();

}

});

}

}

private void initIM()

{

//初始化程序后台后消息推送

PushUtil.getInstance();

//初始化消息监听

MessageEvent.getInstance();

ToastUtils.showMessage(getContext(),"TIM login success");

String deviceMan = android.os.Build.MANUFACTURER;

//注册小米和华为推送 //

/* if (deviceMan.equals("Xiaomi") && shouldMiInit()){

MiPushClient.registerPush(getApplicationContext(), Constants.MI_APP_ID, Constants.MI_APP_KEY);

}else if (deviceMan.equals("HUAWEI")){

PushManager.requestToken(this);

}*/

Log.e(TAG, "onSuccess: "+ TIMManager.getInstance().getLoginUser());

//设置自己的好友验证方式为需要验证

TIMFriendshipManager.ModifyUserProfileParam param = new TIMFriendshipManager.ModifyUserProfileParam();

param.setAllowType(TIMFriendAllowType.TIM_FRIEND_NEED_CONFIRM);

TIMFriendshipManager.getInstance().modifyProfile(param, new TIMCallBack() {

@Override

public void onError(int code, String desc) {

//错误码code和错误描述desc,可用于定位请求失败原因

//错误码code列表请参见错误码表

Log.e(TAG, "modifyProfile failed: " + code + " desc" + desc);

}

@Override

public void onSuccess() {

Log.e(TAG, "设置好友验证 succ");

}

});

TIMOfflinePushSettings settings = new TIMOfflinePushSettings();

//开启离线推送

settings.setEnabled(true);

//设置收到C2C离线消息时的提示声音,这里把声音文件放到了res/raw文件夹下

settings.setC2cMsgRemindSound(null);

TIMManager.getInstance().setOfflinePushSettings(settings);

}

下面是InitBussiness的代码

/**

* 初始化

* 包括imsdk等

*/

public class InitBusiness {

private static final String TAG = InitBusiness.class.getSimpleName();

private InitBusiness(){}

public static void start(Context context){

initImsdk(context, 0);

}

public static void start(Context context, int logLevel){

initImsdk(context, logLevel);

initUserConfig();

}

/**

* 初始化imsdk

*/

private static void initImsdk(Context context, int logLevel){

TIMSdkConfig config = new TIMSdkConfig(AppConfig.SDK_APPID);

config.enableLogPrint(true)

.setLogLevel(TIMLogLevel.values()[logLevel]);

//初始化imsdk

boolean init = TIMManager.getInstance().init(context, config);

//禁止服务器自动代替上报已读

Log.d(TAG, "initIMsdk"+init);

}

private static void initUserConfig()

{

//基本用户配置

TIMUserConfig userConfig = new TIMUserConfig()

.setUserStatusListener(new TIMUserStatusListener() {

@Override

public void onForceOffline() {

//被其他终端踢下线

Log.i(TAG, "onForceOffline");

// App.TOKEN = "";

// UserControl.getInstance().clear();

// DataCleanManager.clearAllCache(getContext());

// PageRouter.startLogin(getContext());

// finish();

}

@Override

public void onUserSigExpired() {

//用户签名过期了,需要刷新userSig重新登录SDK

Log.i(TAG, "onUserSigExpired");

}

})

//设置连接状态事件监听器

.setConnectionListener(new TIMConnListener() {

@Override

public void onConnected() {

Log.i(TAG, "onConnected");

}

@Override

public void onDisconnected(int code, String desc) {

Log.i(TAG, "onDisconnected");

}

@Override

public void onWifiNeedAuth(String name) {

Log.i(TAG, "onWifiNeedAuth");

}

});

RefreshEvent.getInstance().init(userConfig);

userConfig = FriendshipEvent.getInstance().init(userConfig);

userConfig = MessageEvent.getInstance().init(userConfig);

userConfig = GroupEvent.getInstance().init(userConfig);

//将用户配置与通讯管理器进行绑定

TIMManager.getInstance().setUserConfig(userConfig);

}

public interface OffLineNotify{

void exit();

}

}

至此登录成功后,就可以使用即使通信服务了。

收发消息这块跟SDK版本号没有很大影响,可以参考demo,就能实现基本的聊天功能了。

遇到的问题

1.首次进入聊天页面获取不到聊天列表。

2.发送图片消息获取不到图片。

3.创建的Public群组,群主无法邀请好友入群。

问题一

先说第一个问题,因为笔者的项目结构是MainActivity+fragment的结构,项目一打开就是聊天列表页,但是每次打开项目,聊天列表总是获取不到,后来debug发现了问题所在,因为用户的登录是写在MainActivity中,fragment的加载也是在MainActivity中完成的。

就是上面代码中的登录,我们知道登录是耗时操作,所以问题就是在登录还没有成功的时候,fragment已经加载出来,并且去获取了聊天列表,而此时用户还没有登录成功,所以每次进入页面取到的列表都是空的。

最后解决方案就是,我在登录成功的回调中发送一条消息,在聊天列表的fragment中接收消息,然后再去获取聊天列表。

至此问题1得到解决。

问题2

图片消息发送是成功的,因为发送方式跟文本消息是一样的,但是在接收时却接收不到。

V2.x的文档介绍。

V3.x的文档介绍。

这是两个版本的文档说明,我找了半天也没找到参数在哪,图片从哪里获取。

然后截图投诉了一下他们的产品,说找不到他们写的参数在哪?

然后大概在6点左右,收到一条短信,说图片会自动保存在path路径下。我试了一下,果然取到了。我。。。这文档写的。。。

至此问题2解决。

问题3

因为有用到群聊的功能,所以创建的是Public类型的群组,然而在邀请好友入群的时候却报错10007,this group is not enable invite.

然后去看错误码,发现没什么用。

然后我再次投诉,他们的产品,

到现在没有回复。

发现还是没什么用。

文档写的是不允许群成员邀请他人入群,然而就是群主也不能邀请他人入群。

这个问题到现在也没能解决,目前能实现的是他人可以通过申请加入群。。。

好了,这篇博客到此结束,希望能帮到有同样困扰的小伙伴。

android 集成腾讯定位,Android集成腾讯云通信IM相关推荐

  1. Android之高德地图定位SDK集成及地图功能实现

    一:百度高德官方网站,然后去创建应用. 网址:http://lbs.amap.com/ 1.找到控制台创建一个应用. 2.添加key名称,注意命名规范,还有就是下面的SHA1和包名. 3.点击右边的G ...

  2. android a z 快速定位,快速集成android实现listview的字母A-Z排序,界面侧边字母索引...

    Android手机字母A-Z排序侧边索引是非常常见的功能,在此提供快速集成框架.教你用Android studio工具一分钟搞定这个效果. 实现效果: 以及点击F跳转效果 第一步库包导入实现拼音检索功 ...

  3. android 8.0后台定位,Android 8.0权限说明

    从Android 8.0开始系统为实现降低功耗,对后台应用获取用户位置信息频率进行了限制,每小时只允许更新几次位置信息,详细信息请参考官方说明.按照官方指引,如果要提高位置更新频率,需要后台应用提供一 ...

  4. android 系统光标,如何定位android系统中光标的位置

    满意答案 Android中有很多可编辑的弹出框,其中有些是让我们来修改其中的字符,这时光标位置定位在哪里呢? 刚刚解了一个bug是关于这个光标的位置的,似乎Android原生中这种情况是把光标定位到字 ...

  5. android实现3种定位的切换,Android 滑动定位+吸附悬停效果实现

    在前两篇文章中,分别介绍了tablayout+scrollview 和 tablayout+recyclerview 实现的滑动定位的功能,文章链接: Android 实现锚点定位 Android t ...

  6. android百度地图定位自定义图标,百度地图SDK集成及根据坐标实现定位(android studio开发)...

    百度地图SDK集成及根据坐标实现定位(android studio开发) 百度地图SDK集成及根据坐标实现定位(android studio开发) 1.下载百度地图SDK 链接:http://lbsy ...

  7. android+集成北斗定位,基于Android系统的北斗定位通信手持设备研究

    摘要: 卫星导航系统广泛应用于交通运输,军事活动,野外作业,抗险救灾等重要领域,其重要程度关系国家重大利益.我国北斗卫星导航系统日趋完善,研发基于北斗系统的地面手持终端对于开发利用北斗导航卫星系统非常 ...

  8. android 集成x5内核时 本地没有,腾讯浏览服务-接入文档

    三.SDK集成步骤 1. 第一步 下载 SDK jar 包放到工程的libs目录下,将源码和XML里的系统包和类替换为SDK里的包和类,具体对应如下: 系统内核 SDK内核 android.webki ...

  9. Android讯飞语音集成【语音评测3】

    前言: 语音评测(SpeechEvaluator): 通过智能语音技术自动对发音水平进行评价.发音错误.缺陷进行定位和问题分析.目前评音评测提供汉语.英语两种语言的评测,支持单字(汉语专有).词语 和 ...

最新文章

  1. Java HashMap遍历的两种方式
  2. 5类6类7类网线对比_未来值得投资的6类苗木,5年内市场前景应该都不错!
  3. HDU - 1255 覆盖的面积(线段树+扫描线)
  4. 自旋锁 Linux内核,Linux内核中的自旋锁
  5. .net MvcPager+Ajax无刷新分页
  6. project a vertex along its normal onto a triangle
  7. SQL那些事儿(四)--oracle创建表空间、用户创建
  8. 训练深度学习模型的小技巧
  9. Linux 内核与模块调试
  10. 简单用Python+OpenCv实现AI人脸识别--(4)-训练人脸识别模型
  11. 安装PyTorch详细过程
  12. 使用JavaScript 实现简单的移动和缓动的动画效果
  13. Linux文件归档与压缩命令
  14. 修复Adobe Flash Player
  15. 淘宝、阿里、京东、腾讯等一线大厂都在用的搜索引擎技术,你确定不来看看?
  16. linux中 ex是什么命令,Linux ex命令
  17. 【学习笔记】Spring-IOC-DI-AOP 学习笔记
  18. opencv的java api_OpenCV Java开发教程
  19. 铁路订票网站,网友设计整理
  20. 企业电子招标采购系统

热门文章

  1. 【软件入门】Keil:从AC5到AC6
  2. keil MDK AC6设置noinit的用法
  3. 6000字总结动态内存管理
  4. 淮安php照片,一组图 看超罕见的老淮安 看超震撼的新淮安
  5. 智能窗帘传感器c语言程序,基于单片机的智能窗帘控制系统设计(附程序代码)
  6. 安装CUDA时报错packages have unmet dependencies的一个可能原因
  7. Supermap iClient 展示与空间数据绑定的图片
  8. 新闻文化建设杂志新闻文化建设杂志社新闻文化建设编辑部2022年第14期目录
  9. 硫化仪硫化反应诱导、交联反应和网状结构形成
  10. html5 3d模型资源,玩转 HTML5 下 WebGL 的 3D 模型交并补