用户工具

im_android_sdk指南

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
im_android_sdk指南 [2015/12/28 10:27]
admin
im_android_sdk指南 [2017/08/23 08:44] (当前版本)
行 1: 行 1:
 ====== IM Android SDK 指南 ====== ====== IM Android SDK 指南 ======
 +
 ===== 1、Android SDK导入 ===== ===== 1、Android SDK导入 =====
 +
 ==== 1.1、集成前准备 ==== ==== 1.1、集成前准备 ====
-在云之讯官方网站注册开发者帐号,可参考[[新手指引|新手指引]]。+ 
 +在云之讯官方网站注册开发者帐号,可参考[[:新手指引|新手指引]]。
  
 ==== 1.2、下载SDK ==== ==== 1.2、下载SDK ====
-前往云之讯官网下载云之讯IMSDK([[http://​www.ucpaas.com/​product_service/​im |下载地址在页面底部]]),SDK包括2个jar包和1个lib库+ 
 +前往云之讯官网下载云之讯IMSDK([[http://​www.ucpaas.com/​product_service/​im#item4|下载地址]]),SDK包括2个jar包和1个lib库
  
   * 1) IM核心功能 jar包:yunzhixun_IM_SDK_ver_x.x.x_release.jar   * 1) IM核心功能 jar包:yunzhixun_IM_SDK_ver_x.x.x_release.jar
行 14: 行 18:
  
 ==== 1.3、导入SDK ==== ==== 1.3、导入SDK ====
-1) 将SDK包中提供的yunzhixun_IM_SDK_ver_x.x.x_release.jar、 ​ yunzhixun_TCP_SDK_ver_x.x.x_release.jar包考贝到android工程的libs目录下,将libpack.so拷贝到android工程的libs目录下的armeabi目录下,放置位置如下图所示: 
  
-{{ :​im_android_2.png?​nolink ​|}}+1) 将SDK包中提供的yunzhixun_IM_SDK_ver_x.x.x_release.jar、 yunzhixun_TCP_SDK_ver_x.x.x_release.jar包考贝到android工程的libs目录下,将libpack.so拷贝到android工程的libs目录下的armeabi目录下,放置位置如下图所示: 
 + 
 +{{  :​im_android_2.png?​nolink&  ​}}
  
 2) Jar包加入到Build Path中,​如下图 2) Jar包加入到Build Path中,​如下图
  
-{{ :​im_android_1.png?​nolink ​|}}+{{  :​im_android_1.png?​nolink&  ​}}
  
-3) 把导入包勾选 +3) 把导入包勾选 如果执行了Add to Build Path 仍然无法使用jar包,请指向自己的工程,点击鼠标右键,选择Properties目录—>​选择Java BuildPath目录—>​Order and Export把导入的包勾选—>​按下OK
-如果执行了Add to Build Path 仍然无法使用jar包,请指向自己的工程,点击鼠标右键,选择Properties目录—>​选择Java BuildPath目录—>​Order and Export把导入的包勾选—>​按下OK+
  
-{{ :​im_click_ok.png?​nolink ​|}}+{{  :​im_click_ok.png?​nolink&  ​}} 
 + 
 +==== 1.4、添加SDK权限和IM核心服务 ====
  
-==== 1.4、添加SDK权限和IM核心服务===== 
 将下列权限配置添加到Android工程中的AndroidManifest文件中 将下列权限配置添加到Android工程中的AndroidManifest文件中
 +
 <code java> <code java>
 <​manifest xmlns:​android="​http://​schemas.android.com/​apk/​res/​android"​ <​manifest xmlns:​android="​http://​schemas.android.com/​apk/​res/​android"​
行 50: 行 56:
 <​uses-permission android:​name="​android.permission.ACCESS_WIFI_STATE"​ /> <​uses-permission android:​name="​android.permission.ACCESS_WIFI_STATE"​ />
 <​uses-permission android:​name="​android.permission.WRITE_SETTINGS"​ /> <​uses-permission android:​name="​android.permission.WRITE_SETTINGS"​ />
-<uses-permissionandroid:​name="​android.permission.READ_CONTACTS"/>​+<uses-permission android:​name="​android.permission.READ_CONTACTS"/>​
 <​uses-permission android:​name="​android.permission.VIBRATE"​ /> <​uses-permission android:​name="​android.permission.VIBRATE"​ />
  
行 63: 行 69:
 //​AlarmReceiver和MsgBackReceiver是维持TCP长连接心跳的广播 //​AlarmReceiver和MsgBackReceiver是维持TCP长连接心跳的广播
 <​receiver android:​name="​com.yzxtcp.tools.tcp.receiver.AlarmReceiver"​ > <​receiver android:​name="​com.yzxtcp.tools.tcp.receiver.AlarmReceiver"​ >
- </​receiver>​+    ​</​receiver>​
 <​receiver android:​name="​com.yzxtcp.tools.tcp.receiver.MsgBackReceiver"​ > <​receiver android:​name="​com.yzxtcp.tools.tcp.receiver.MsgBackReceiver"​ >
- </​receiver>​+    ​</​receiver>​
 </​application>​ </​application>​
 </​code>​ </​code>​
 +
 ===== 2、连接平台和注销 ===== ===== 2、连接平台和注销 =====
 +
 ---- ----
 +
 ==== 2.1、初始化IM服务 ==== ==== 2.1、初始化IM服务 ====
-**方法1:**直接继承IMApplication类,IMApplication类中已经包含了核心服务的初始化,代码如下:+ 
 +**方法1:** 直接继承IMApplication类,IMApplication类中已经包含了核心服务的初始化,代码如下: 
 <code java> <code java>
 public class MainApplication extends IMApplication { public class MainApplication extends IMApplication {
行 80: 行 91:
 } }
 </​code>​ </​code>​
-**方法2:**如果您的Application已经继承了其他第三方提供的Application,可以在Application中添加以下代码+ 
 +**方法2:** 如果您的Application已经继承了其他第三方提供的Application,可以在Application中添加以下代码 
 <code java> <code java>
 public class MyApplication extends Application { public class MyApplication extends Application {
行 93: 行 106:
  
 ==== 2.2、连接平台 ==== ==== 2.2、连接平台 ====
-1) token方式登入(所有关于云之讯IM的操作都必须在登入成功后才能使用) + 
-token 称为用户令牌,App Key 是您的 App 的唯一标识,token 则是您 App 上的每一个用户的身份授权象征,使用这个 token 作为该用户的唯一身份凭证与其他用户进行通信。 ​ +1) token方式登入(所有关于云之讯IM的操作都必须在登入成功后才能使用) token 称为用户令牌,App Key 是您的 App 的唯一标识,token 则是您 App 上的每一个用户的身份授权象征,使用这个 token 作为该用户的唯一身份凭证与其他用户进行通信。 token是从AS服务器(用户服务器,您必须拥有自己的服务器)获取,token由AS服务器按照一定规则生成。
-token是从AS服务器(用户服务器,您必须拥有自己的服务器)获取,token由AS服务器按照一定规则生成。+
  
 获取token后用下面方法进行登入 获取token后用下面方法进行登入
 +
 <code java> <code java>
 UCSManager.connect(token,​ new ILoginListener()) { UCSManager.connect(token,​ new ILoginListener()) {
     @Override     @Override
-    public void onLogin(UcsReason ​arg0) { +    public void onLogin(UcsReason ​reason) { 
-        if(reason.getReason()==0){+        if(reason.getReason() == UcsErrorCode.NET_ERROR_CONNECTOK){
         //​登入成功         //​登入成功
         例如登入成功后跳转到会话界面,显示获取的所有会话列表         例如登入成功后跳转到会话界面,显示获取的所有会话列表
行 108: 行 121:
         //​登入失败         //​登入失败
         例如登入失败后提示用户登入失败         例如登入失败后提示用户登入失败
-        }   ​+        }
     }     }
 }); });
-</​code>​  +</​code>​ 
-2) 账户密码方式登入(仅限老平台用户继续使用,新接入者无需关心这种登入方式)+ 
 +  ​2) 账户密码方式登入(仅限老平台用户继续使用,新接入者无需关心这种登入方式) 
 <code java> <code java>
 UCSManager.connent(String sid, String sidPwd,String clientId,String clientPwd,new ILoginListener() { UCSManager.connent(String sid, String sidPwd,String clientId,String clientPwd,new ILoginListener() {
     @Override     @Override
-    public void onLogin(UcsReason ​arg0) { +    public void onLogin(UcsReason ​reason) { 
-        if(reason.getReason()==0){+        if(reason.getReason() == UcsErrorCode.NET_ERROR_CONNECTOK){
         //​登入成功         //​登入成功
         //​例如登入成功后跳转到会话界面,显示获取的所有会话列表         //​例如登入成功后跳转到会话界面,显示获取的所有会话列表
行 123: 行 138:
         //​登入失败         //​登入失败
         //​例如登入失败后提示用户登入失败         //​例如登入失败后提示用户登入失败
-        }                       ​+        }
     }     }
-});  +}); 
-</​code> ​    ​+</​code>​ 
 + 
 +==== 2.3、注销 ==== 
 + 
 +要断开SDK与云平台连接(比如说切换账号时),可以调用注销接口。如果需要发送消息或者接收消息等操作,​必须重新调用UCSManager.content登入。 注销函数如下:
  
-====2.3、注销 ==== 
-要断开SDK与云平台连接(比如说切换账号时),可以调用注销接口。如果需要发送消息或者接收消息等操作,​必须重新调用UCSManager.content登入。 
-注销函数如下: 
 <code java> <code java>
 UCSManager.disconnect();//​注销函数 UCSManager.disconnect();//​注销函数
行 136: 行 152:
  
 ===== 3、基本功能集成 ===== ===== 3、基本功能集成 =====
 +
 ==== 3.1、获取IMManager类实例 ==== ==== 3.1、获取IMManager类实例 ====
-IM各种功能实现方法,都可以通过imManager调用,比如获取所有会话列表、创建讨论组得到所有未读消息等, + 
-因此需要先获取imManager,获取方式如下:+IM各种功能实现方法,都可以通过imManager调用,比如获取所有会话列表、创建讨论组得到所有未读消息等, 因此需要先获取imManager,获取方式如下: 
 <code java> <code java>
 IMManager imManager = IMManager.getInstance(this);​ //​获得IMManager类实例 IMManager imManager = IMManager.getInstance(this);​ //​获得IMManager类实例
行 144: 行 162:
  
 ==== 3.2、会话操作 ==== ==== 3.2、会话操作 ====
 +
 接下里将介绍关于会话的一些基本操作,与某人聊天,一个讨论组或者群组都称之为一个会话 接下里将介绍关于会话的一些基本操作,与某人聊天,一个讨论组或者群组都称之为一个会话
  
-1) 设置会话回调监听器 +1) 设置会话回调监听器 首先Activity需要实现IConversationListener,代码示例如下: 
-首先Activity需要实现IConversationListener,代码示例如下:+
 <code java> <code java>
 public class ConversationFragment extends Fragment implements IConversationListener public class ConversationFragment extends Fragment implements IConversationListener
行 153: 行 172:
  
 会话界面启动时在onCreate函数中就要首先添加会话回调监听器,以便时收到创建会话、删除会话和更新会话的回调接口。 会话界面启动时在onCreate函数中就要首先添加会话回调监听器,以便时收到创建会话、删除会话和更新会话的回调接口。
-        ​+
 <code java> <code java>
 IMManager.getInstance(this).setConversationListener(IConversationListener);​ IMManager.getInstance(this).setConversationListener(IConversationListener);​
 </​code>​ </​code>​
  
-2) 会话回调接口 +2) 会话回调接口 当第一次与某人聊天时或者被加入到某个讨论组时,只要收到一条消息或者发送一条消息,都会创建一个新的会话, 会收到创建会话接口的回调 
-当第一次与某人聊天时或者被加入到某个讨论组时,只要收到一条消息或者发送一条消息,都会创建一个新的会话, +
-会收到创建会话接口的回调+
 <code java> <code java>
 void onCreateConversation(ConversationInfo cinfo){ void onCreateConversation(ConversationInfo cinfo){
行 168: 行 186:
  
 当你退出某个讨论组时,会删除这个讨论组会话,同时收到删除这个会话的回调 当你退出某个讨论组时,会删除这个讨论组会话,同时收到删除这个会话的回调
-    ​+
 <code java> <code java>
 //​删除会话回调 //​删除会话回调
行 176: 行 194:
 </​code>​ </​code>​
  
-当某个会话中收到消息时,同时收到这个会收到更新这个会话的回调,比如这个消息的未读消息数, +当某个会话中收到消息时,同时收到这个会收到更新这个会话的回调,比如这个消息的未读消息数, 首条消息内容的变化等。
-首条消息内容的变化等。+
  
 <code java> <code java>
行 193: 行 210:
     updataCinfo(cinfoSrc,​ cinfoDest);     updataCinfo(cinfoSrc,​ cinfoDest);
 } }
- +
 private void updataCinfo(ConversationInfo cinfoSrc,​ConversationInfo cinfoDest){ private void updataCinfo(ConversationInfo cinfoSrc,​ConversationInfo cinfoDest){
     conversationLists.remove(cinfoDest);​     conversationLists.remove(cinfoDest);​
行 210: 行 227:
 </​code>​ </​code>​
  
-3) 获取所有会话列表 +3) 获取所有会话列表 进入会话界面,如果需要显示所有会话列表,可以调用下面API函数获取 
-进入会话界面,如果需要显示所有会话列表,可以调用下面API函数获取 +
-    +
 <code java> <code java>
 List<​ConversationInfo>​ conversationLists = new ArrayList<​ConversationInfo>​();//​定义会话列表 List<​ConversationInfo>​ conversationLists = new ArrayList<​ConversationInfo>​();//​定义会话列表
行 218: 行 234:
 </​code>​ </​code>​
  
-4) 会话类在消息界面的应用 +4) 会话类在消息界面的应用 当从会话界面跳转到消息界面时,可以通过intent把这个会话的类conversationinfo传递进来,示例代码如下: 
-当从会话界面跳转到消息界面时,可以通过intent把这个会话的类conversationinfo传递进来,示例代码如下:+
 <code java> <code java>
 Intent intent = new Intent(getActivity(),​ IMMessageActivity.class);​ Intent intent = new Intent(getActivity(),​ IMMessageActivity.class);​
行 242: 行 258:
  
 ==== 3.3、消息操作 ==== ==== 3.3、消息操作 ====
-1) 设置消息回调监听器 + 
-首先Activity需要实现MessageListener,代码示例如下:+1) 设置消息回调监听器 首先Activity需要实现MessageListener,代码示例如下: 
 <code java> <code java>
-public class IMMessageActivity extends implements MessageListener+public class IMMessageActivity extends ​FragmentActivity ​implements MessageListener
 </​code>​ </​code>​
 +
 消息界面启动时在onCreate函数中就要首先添加消息回调监听器,这样才可以及时接受到消息接口的回调 消息界面启动时在onCreate函数中就要首先添加消息回调监听器,这样才可以及时接受到消息接口的回调
 +
 <code java> <code java>
 IMManager.getInstance(this).setSendMsgListener(MessageListener);​ IMManager.getInstance(this).setSendMsgListener(MessageListener);​
 </​code>​ </​code>​
  
-2) 消息回调接口 +2) 消息回调接口 发送消息后会收到发送消息的回调,回调接口中收到的消息对象就是你之前发送的消息对象 
-发送消息后会收到发送消息的回调,回调接口中收到的消息对象就是你之前发送的消息对象+
 <code java> <code java>
 void onSendMsgRespone(ChatMessage message){ void onSendMsgRespone(ChatMessage message){
     //​因为消息状态会改变,因此需要更新界面     //​因为消息状态会改变,因此需要更新界面
 } }
-</​code> ​   +</​code>​ 
 收到一条或者多条消息后,消息界面收到接收消息的回调。 收到一条或者多条消息后,消息界面收到接收消息的回调。
 +
 <code java> <code java>
 void onReceiveMessage(List messages){ void onReceiveMessage(List messages){
行 266: 行 287:
 } }
 </​code>​ </​code>​
 +
 调用IMManager中的方法downloadAttached(方法使用见SDK手册)后会收到下载回调,回调接口接下。 调用IMManager中的方法downloadAttached(方法使用见SDK手册)后会收到下载回调,回调接口接下。
 +
 <code java> <code java>
 Void onDownloadAttachedProgress(StringmsgId,​String filePaht,​int sizeProgrss,​int currentProgress){ Void onDownloadAttachedProgress(StringmsgId,​String filePaht,​int sizeProgrss,​int currentProgress){
     //​获得文件下载进度,更新界面     //​获得文件下载进度,更新界面
 } }
-</​code> ​ +</​code>​ 
 + 
 +3) 创建消息对象 消息对象包括单聊、群组和讨论组,他们都继承消息对象ChatMessage,下面是分别创建单聊、群组和讨论组的方法
  
-3) 创建消息对象 
-消息对象包括单聊、群组和讨论组,他们都继承消息对象ChatMessage,下面是分别创建单聊、群组和讨论组的方法 
 <code java> <code java>
-ChatMessage msg = null; +ChatMessage msg = null;
 msg = new SingleChat();//​创建单聊消息 msg = new SingleChat();//​创建单聊消息
 msg = new GroupChat();//​创建群组消息 msg = new GroupChat();//​创建群组消息
行 283: 行 306:
  
 4) 发送文本消息 4) 发送文本消息
 +
 <code java> <code java>
-ChatMessagemsg ​= null;+ChatMessage msg = null;
 msg = new SingleChat();//​创建单聊消息 msg = new SingleChat();//​创建单聊消息
-msg.setTargetId(对方账号);+msg.setTargetId(对方账号)
 msg.setSenderId(自己账号);​ msg.setSenderId(自己账号);​
 msg.setMsgType(MSGTYPE.MSG_DATA_TEXT);//​设置消息类型为文本 msg.setMsgType(MSGTYPE.MSG_DATA_TEXT);//​设置消息类型为文本
行 292: 行 316:
 if(IMManager.getInstance(mContext).sendmessage(msg)){//​发送消息成功返回true if(IMManager.getInstance(mContext).sendmessage(msg)){//​发送消息成功返回true
     //​发送成功后把消息添加到消息列表中,收到消息发送回调后刷新界面     //​发送成功后把消息添加到消息列表中,收到消息发送回调后刷新界面
-    currentMsgList.add(msg); ​+    currentMsgList.add(msg);​
 } }
 </​code>​ </​code>​
  
-5) 发送图片消息 +5) 发送图片消息 发送的图片最好小于100K,发送图片之前请先进行压缩处理 
-发送的图片最好小于200K,发送图片之前请先进行压缩处理+
 <code java> <code java>
-ChatMessagemsg ​= null;+ChatMessage msg = null;
 //​压缩图片,​ bitmap想压缩的图片,​quality压缩后的质量(0-100), path 压缩后存储的路径 //​压缩图片,​ bitmap想压缩的图片,​quality压缩后的质量(0-100), path 压缩后存储的路径
 IMManager.getInstance(context).compressBitmap(bitmap,​ quality, path); IMManager.getInstance(context).compressBitmap(bitmap,​ quality, path);
行 315: 行 339:
  
 6) 发送语音消息 6) 发送语音消息
 +
 <code java> <code java>
-ChatMessagemsg ​= null;+ChatMessage msg = null;
 msg = new DiscussionChat ();//​创建讨论组消息 msg = new DiscussionChat ();//​创建讨论组消息
 msg.setTargetId(对方账号);​ msg.setTargetId(对方账号);​
行 325: 行 350:
 if (IMManager.getInstance(mContext).sendmessage(msg)){//​发送消息成功返回true if (IMManager.getInstance(mContext).sendmessage(msg)){//​发送消息成功返回true
     //​发送成功后把消息添加到消息列表中,收到消息发送回调后刷新界面     //​发送成功后把消息添加到消息列表中,收到消息发送回调后刷新界面
-    currentMsgList.add(msg); ​+    currentMsgList.add(msg);​
 } }
 </​code>​ </​code>​
  
-7) 录音 +7) 录音 云之讯SDK有提供专门的录音和播放接口(具体操作见SDK接口文档),这里介绍录音接口, 开发者可以选择使用我们提供的接口,下面是录音接口的使用方法: 
-云之讯SDK有提供专门的录音和播放接口(具体操作见SDK接口文档),这里介绍录音接口, +
-开发者可以选择使用我们提供的接口,下面是录音接口的使用方法:+
 <code java> <code java>
 IMManager.getInstance(mContext).startVoiceRecord(path,​ new RecordListener() { IMManager.getInstance(mContext).startVoiceRecord(path,​ new RecordListener() {
行 348: 行 372:
 }); });
 </​code>​ </​code>​
 +
 +8)  发送地图定位消息\\
 +发送地图定位消息前需要先构造地图定位消息对象 LocationMapMsg locationMsg \\
 +
 +下面以单聊消息为例展示如何发送地图定位消息 \\
 +
 +<code java>
 +/**
 +String coordinate = "​default";​ // 坐标类型 可选 SDK不解析只透传用户可随意传字符串
 +double latitude // 经度  ​
 +double longitude // 维度  ​
 +String detailAddr // 详细地址信息 ​
 +String thumbnailPath // 地图缩略图保存的绝对路径 缩略图不要超过30k否则会发送失败
 +*/
 +LocationMapMsg locationMsg = new LocationMapMsg(latitude,​ longitude, detailAddr , thumbnailPath); ​
 +
 +ChatMessage msg = null; 
 +msg = new SingleChat();​ //​创建单聊消息 ​
 +msg.setTargetId(对方账号) ​
 + ​.setNickName(对方昵称)
 + ​.setSenderId(自己账号)
 + ​.setMsgType(MSGTYPE.MSG_DATA_LOCALMAP)//​设置消息类型
 + ​.setLocationMapMsg(locationMsg) //​设置地图对象
 + ​.setFromMyself(false);​
 +
 +if (IMManager.getInstance(mContext).sendmessage(msg)){//​发送消息成功返回true ​
 +        // 发送成功后把消息添加到消息列表中,收到消息发送回调后刷新界面 ​
 +        currentMsgList.add(msg);​
 +
 +
 +</​code>​
 +
  
 ==== 3.4、讨论组操作 ==== ==== 3.4、讨论组操作 ====
  
 1) 进入对讨论组操作的界面时(比如讨论组信息界面,​创建讨论组界面),在onCreate时首先要添加讨论组监听接口,调用下面方法实现: 1) 进入对讨论组操作的界面时(比如讨论组信息界面,​创建讨论组界面),在onCreate时首先要添加讨论组监听接口,调用下面方法实现:
 +
 <code java> <code java>
 IMManager.getInstance(this).setDiscussionGroup (mContext); IMManager.getInstance(this).setDiscussionGroup (mContext);
行 357: 行 414:
  
 2) 讨论组回调接口 2) 讨论组回调接口
 +
 <code java> <code java>
 Void onCreateDiscussion(UcsReason reason, DiscussionInfo dInfo){ Void onCreateDiscussion(UcsReason reason, DiscussionInfo dInfo){
行 373: 行 431:
     }     }
 } }
-voidonDiscussionAddMember(UcsReason reason){+ 
 +void onDiscussionAddMember(UcsReason reason){
     if(reason.getReason()==0){     if(reason.getReason()==0){
         //​加人成功         //​加人成功
行 380: 行 439:
     }     }
 } }
-voidonDiscussionDelMember(UcsReason reason){+ 
 +void onDiscussionDelMember(UcsReason reason){
     if(reason.getReason()==0){     if(reason.getReason()==0){
         //​踢人成功         //​踢人成功
行 387: 行 447:
     }     }
 } }
-voidonQuiteDiscussion(UcsReason reason){+ 
 +void onQuiteDiscussion(UcsReason reason){
     if(reason.getReason()==0){     if(reason.getReason()==0){
         //​退出成功         //​退出成功
行 394: 行 455:
     }     }
 } }
 +
 +void onModifyDiscussionName(UcsReason reason){
 +    if(reason.getReason()==0){
 +        //​修改讨论组名字成功
 +    }else{
 +        //​修改讨论组名字失败
 +    }
 +}
 +
 </​code>​ </​code>​
  
-3) 创建讨论组:\\ ​ +3) 创建讨论组: \\ 参数: \\ discussionName - 讨论组名字 \\ memberList - 将添加的成员列表(不能包含自己) 
-参数:​\\ ​ + 
-discussionName - 讨论组名字\\ ​ +<code java>
-memberList - 将添加的成员列表(不能包含自己) +
-<code java> ​+
 IMManager.getInstance(mContext).createDiscussionGroup(java.lang.String discussionName,​ IMManager.getInstance(mContext).createDiscussionGroup(java.lang.String discussionName,​
 java.util.List<​java.lang.String>​ memberList);​ java.util.List<​java.lang.String>​ memberList);​
 </​code>​ </​code>​
  
-4) 添加讨论组成员:​\\ ​ +4) 添加讨论组成员:​ \\ 参数: \\ discussionID - 讨论组ID \\ memberList - 将添加的成员列表 
-参数:​\\ ​ +
-discussionID - 讨论组ID\\ ​ +
-memberList - 将添加的成员列表 ​+
 <code java> <code java>
 IMManager.getInstance(mContext).addDiscussionGroupMember(java.lang.String discussionID,​ IMManager.getInstance(mContext).addDiscussionGroupMember(java.lang.String discussionID,​
行 414: 行 480:
 </​code>​ </​code>​
  
-5) 删除讨论组成员:​\\ ​ +5) 删除讨论组成员:​ \\ 参数: \\ discussionID - 讨论组ID \\ memberList - 将删除的成员列表(成员不能包含自己) 
-参数:​\\ ​ +
-discussionID - 讨论组ID\\ ​ +
-memberList - 将删除的成员列表(成员不能包含自己)+
 <code java> <code java>
 IMManager.getInstance(mContext).delDiscussionGroupMember(java.lang.String discussionID,​ IMManager.getInstance(mContext).delDiscussionGroupMember(java.lang.String discussionID,​
行 423: 行 487:
 </​code>​ </​code>​
  
-6) 退出讨论组:​\\ ​ +6) 退出讨论组:​ \\ 参数: \\ discussionID - 讨论组ID 
-参数:​\\ ​ +
-discussionID - 讨论组ID+
 <code java> <code java>
 IMManager.getInstance(mContext).quitDiscussionGroup (java.lang.String discussionID) IMManager.getInstance(mContext).quitDiscussionGroup (java.lang.String discussionID)
 </​code>​ </​code>​
  
-7) 修改讨论组名字\\ ​ +7) 修改讨论组名字 \\ 参数: \\ discussionID - 讨论组ID \\ newname–新的讨论组名称 
-参数:​\\ ​ +
-discussionID - 讨论组ID\\ ​ +
-newname–新的讨论组名称+
 <code java> <code java>
 imManager.modifyDiscussionTitle(java.lang.String discussionID,​ java.lang.Stringnewname);​ imManager.modifyDiscussionTitle(java.lang.String discussionID,​ java.lang.Stringnewname);​
 +</​code>​
 +
 +8) 获取指定讨论组ID的讨论组信息 \\ 参数: \\ discussionID - 讨论组ID号 \\ 返回: \\ 讨论组信息对象
 +
 +<code java>
 +imManager.getDiscussionInfo(java.lang.String discussionID);​
 +</​code>​
 +
 +9) 获取所有讨论组信息 \\ 返回: \\ 讨论组信息列表
 +
 +<code java>
 +imManager.getAllDiscussionInfos();​
 </​code>​ </​code>​
  
 ==== 3.5、群组操作 ==== ==== 3.5、群组操作 ====
 +
 SDK仅仅是提供群组消息的收发功能(SDK提供了讨论组的管理功能),群组的管理功能(创建群组,添加群组成员,删除群组成员等)由用户AS服务器处理。 SDK仅仅是提供群组消息的收发功能(SDK提供了讨论组的管理功能),群组的管理功能(创建群组,添加群组成员,删除群组成员等)由用户AS服务器处理。
 +
 <code java> <code java>
 ChatMessagemsg = new GroupChat()是创建群组消息对象。 ChatMessagemsg = new GroupChat()是创建群组消息对象。
-voidonReceiveMessage(List<​ChatMessage>​ messages)是接收消息回调。+void onReceiveMessage(List<​ChatMessage>​ messages)是接收消息回调。
 判断message.categoryId==CategoryId.GROUP表示消息是群组消息。 判断message.categoryId==CategoryId.GROUP表示消息是群组消息。
 </​code>​ </​code>​
  
 ==== 3.6、设置SDK状态监听 ==== ==== 3.6、设置SDK状态监听 ====
 +
 设置SDK状态监听,查看是否被踢线 设置SDK状态监听,查看是否被踢线
 +
 <code java> <code java>
 imManager.setISdkStatusListener(this);​ imManager.setISdkStatusListener(this);​
 </​code>​ </​code>​
 +
 回调接口示例代码如下: 回调接口示例代码如下:
 +
 <code java> <code java>
 public void onSdkStatus(UcsReason reason) { public void onSdkStatus(UcsReason reason) {
-    if (reason.getReason() == UcsErrorCode.NET_ERROR_KICKOUT) { +    if (reason.getReason() == UcsErrorCode.NET_ERROR_KICKOUT) {
         CustomLog.i("​收到服务器强制下线通知"​);​         CustomLog.i("​收到服务器强制下线通知"​);​
     } else if (reason.getReason() == UcsErrorCode.NET_ERROR_TOKENERROR) {     } else if (reason.getReason() == UcsErrorCode.NET_ERROR_TOKENERROR) {
行 473: 行 552:
  
 ===== 4、对象类属性介绍 ===== ===== 4、对象类属性介绍 =====
 +
 ==== 4.1、会话类 ==== ==== 4.1、会话类 ====
 +
 <code java> <code java>
-private ​StringtargetId;  //​单聊id,​群组id,​讨论组id +private ​String targetId;  //​单聊id,​群组id,​讨论组id 
-private ​StringconversationTitle; //​会话标题 +private ​String conversationTitle; //​会话标题 
-private ​intcategoryId;   //​会话分类:1个人,2群组,3讨论组+private ​int categoryId;   //​会话分类:1个人,2群组,3讨论组
 private String draftMsg=""; ​ //​草稿或者是最近的消息 private String draftMsg=""; ​ //​草稿或者是最近的消息
-private ​booleanisTop;   //​是否置顶+private ​boolean isTop;   //​是否置顶
 private long lastTime; ​  //​最后消息时间 private long lastTime; ​  //​最后消息时间
-private long topTime; ​  //​置顶多久,默认是NULL+private long topTime; ​  //​置顶多久,默认是NULL暂未使用
 private ​ int msgUnRead; //​未读消息数 private ​ int msgUnRead; //​未读消息数
 </​code>​ </​code>​
  
 ==== 4.2、消息类 ==== ==== 4.2、消息类 ====
 +
 <code java> <code java>
-private ​intmsgid;  //​消息ID +private ​int msgid;  //​消息ID 
-private ​inttargetId; //​接收用户名 +private ​int targetId; //​接收用户名 
-private ​intsenderId;//​发送方用户名 +private ​int senderId;//​发送方用户名 
-private ​intcategoryId;// 消息分类 1单聊,2群聊, 3,讨论组 +private ​String nickName; //​发送方昵称 
-private ​booleanisFromMyself;//​消息方向发送或者接收+private int categoryId;// 消息分类 1单聊,2群聊, 3,讨论组 
 +private ​boolean isFromMyself;//​消息方向发送或者接收
 private long sendTime;// 发送时间 private long sendTime;// 发送时间
 private long receiveTime;//​接收时间 private long receiveTime;//​接收时间
-private ​intmsgType;//​消息类型 1,文本,2图片,3语音+private ​int msgType;//​消息类型 1,文本,2图片,3语音
 private String content;//​消息类容:文本代表文字内容图片代表小图路径语音代表录音长度 private String content;//​消息类容:文本代表文字内容图片代表小图路径语音代表录音长度
-private ​intreadStatus;// 消息是否已读状态 +private ​int readStatus;// 消息是否已读状态 
-private ​intsendStatus;//​消息发送状态 1发送中,2,发送成功,3,发送失败+private ​int sendStatus;//​消息发送状态 1发送中,2,发送成功,3,发送失败
 private String path;   //​大图片语音视频的存储路径 private String path;   //​大图片语音视频的存储路径
-private ​StringparentID; //​群组或讨论组 ID号+private ​String parentID; //​群组或讨论组或单聊 ​ID号
 public final static int MSG_STATUS_INPROCESS = 1; //​初始状态 public final static int MSG_STATUS_INPROCESS = 1; //​初始状态
 public final static int MSG_STATUS_SUCCESS = 2; //​发送成功状态 public final static int MSG_STATUS_SUCCESS = 2; //​发送成功状态
行 511: 行 594:
  
 ==== 4.3、讨论组信息类 ==== ==== 4.3、讨论组信息类 ====
 +
 <code java> <code java>
-private ​StringdiscussionId; //​讨论组ID +private ​String discussionId; //​讨论组ID 
-private ​StringdiscussionName; //​讨论组名字 +private ​String discussionName; //​讨论组名字 
-private ​intcategoryId;     //​聊天类型 1,​单聊,2,​群组,3,​讨论组 +private ​int categoryId;     //​聊天类型 1,​单聊,2,​群组,3,​讨论组 
-private ​intmemberCount;    //​讨论组成员数量 +private ​int memberCount;    //​讨论组成员数量 
-private ​StringownerId;    //​群组ID号+private ​String ownerId;    //​群组ID号
 private String discussionMembers;​ //​包含成员id,名字,头像 private String discussionMembers;​ //​包含成员id,名字,头像
 private String disscussionSettings;​ //​讨论组设置信息,json private String disscussionSettings;​ //​讨论组设置信息,json
行 523: 行 607:
  
 ==== 4.4、群组信息类 ==== ==== 4.4、群组信息类 ====
 +
 <code java> <code java>
-private ​StringgroupId; //群ID +private ​String groupId; //群ID 
-private ​StringgroupName; //​群名字 +private ​String groupName; //​群名字 
-private ​intcategoryId;  //​聊天类型 1,​单聊,2,​群组,3,​讨论组 +private ​int categoryId;  //​聊天类型 1,​单聊,2,​群组,3,​讨论组 
-private ​intupdateTime;  //​创建时间+private ​int updateTime;  //​创建时间
 </​code>​ </​code>​
  
 ==== 4.5、返回值类 ==== ==== 4.5、返回值类 ====
 +
 <code java> <code java>
 private int reason; //​返回消息错误码 private int reason; //​返回消息错误码
行 537: 行 623:
  
 ==== 4.6、会话类型枚举类 ==== ==== 4.6、会话类型枚举类 ====
 +
 <code java> <code java>
-publicenumCategoryId{+public enum CategoryId{
 NONE,//​未知会话类型 NONE,//​未知会话类型
 PERSONAL, //​单聊会话 PERSONAL, //​单聊会话
行 547: 行 634:
  
 ==== 4.7、消息类型枚举类 ==== ==== 4.7、消息类型枚举类 ====
 +
 <code java> <code java>
-publicenum ​MSGTYPE {+public enum MSGTYPE {
 MSG_DATA_NONE,//​未知消息类型 MSG_DATA_NONE,//​未知消息类型
 MSG_DATA_TEXT,//​文本消息 MSG_DATA_TEXT,//​文本消息
行 554: 行 642:
 MSG_DATA_VOICE,//​语音消息 MSG_DATA_VOICE,//​语音消息
 MSG_DATA_VIDEO,//​视频消息 MSG_DATA_VIDEO,//​视频消息
-MSG_DATA_SYSTEM;//​系统消息+MSG_DATA_SYSTEM,//系统消息 
 +MSG_DATA_LOCALMAP;//​地图定位消息
 } }
 </​code>​ </​code>​
行 560: 行 649:
 ===== 5、集成注意事项 ===== ===== 5、集成注意事项 =====
  
-**1.创建讨论组失败**\\ +**1.创建讨论组失败** ​ \\ 答:(常见原因)创建讨论组接口中的员列表不能包含自己;​成员列表必须是都注册过的。
-答:(常见原因)创建讨论组接口中的员列表不能包含自己;​成员列表必须是都注册过的。+
  
-**2.没有收到回调**\\ +**2.没有收到回调** ​ \\ 答:(常见原因)接收调必须先设置监听器,比如接收消息回调要设置消息回调监听器 IMManager.getInstance(this).setSendMsgListener(mContext);​
-答:(常见原因)接收调必须先设置监听器,比如接收消息回调要设置消息回调监听器 +
-IMManager.getInstance(this).setSendMsgListener(mContext);​+
  
-**3.调用SDK接口崩溃或者无反应**\\ +**3.调用SDK接口崩溃或者无反应** ​ \\ 答:(常见原因)一定要在Application中添加UCSManager.init(this)或者集成IMApplication才能去调用SDK中的其他方法,因为要先启动SDK核心服务。
-答:(常见原因)一定要在Application中添加UCSManager.init(this)或者集成IMApplication才能去调用SDK中的其他方法,因为要先启动SDK核心服务。+
  
-**4.发送消息失败**\\ ​ +**4.发送消息失败** ​ \\ 答:(常见原因)设置SDK状态监听器,监听是否被踢线,token是否过期,网络是否正常
-答:(常见原因)设置SDK状态监听器,监听是否被踢线,token是否过期,网络是否正常 +
- +
-**5.讨论组删除成员失败**\\ +
-答:(常见原因)讨论组和群组只有创建者可以删除,其他人只能退出+
  
 +**5.讨论组删除成员失败** ​ \\ 答:(常见原因)讨论组和群组只有创建者可以删除,其他人只能退出
  
 ===== 6、错误码 ===== ===== 6、错误码 =====
 +
 <code java> <code java>
-300100 连接服务器失败 NET_ERROR_CONNECTFAIL +300100 ​   连接服务器失败 ​               NET_ERROR_CONNECTFAIL 
-300101 连接超时 NET_ERROR_CONNECTTIMEOUT +300101 ​   连接超时 ​                   NET_ERROR_CONNECTTIMEOUT 
-300102 强制踢线 NET_ERROR_KICKOUT +300102 ​   强制踢线 ​                   NET_ERROR_KICKOUT 
-300103 无效的token 或与appid不匹配 NET_ERROR_TOKENERROR  +300103 ​   无效的token 或与appid不匹配 ​       NET_ERROR_TOKENERROR 
-300104 用户不存在 NET_ERROR_USERUNKNOWN +300104 ​   用户不存在 ​               NET_ERROR_USERUNKNOWN 
-300105 密码错误 NET_ERROR_PASSWORDERROR +300105 ​   密码错误 ​                   NET_ERROR_PASSWORDERROR 
-300106 重新连接成功 NET_ERROR_RECONNECTOK +300106 ​   重新连接成功 ​               NET_ERROR_RECONNECTOK 
-300107 连接服务器成功 NET_ERROR_CONNECTOK +300107 ​   连接服务器成功 ​               NET_ERROR_CONNECTOK 
-300108 TCP 连接成功 NET_ERROR_TCPCONNECTOK +300108 ​   TCP 连接成功 ​               NET_ERROR_TCPCONNECTOK 
-300109 TCP 连接失败 NET_ERROR_TCPCONNECTFAIL +300109 ​   TCP 连接失败 ​               NET_ERROR_TCPCONNECTFAIL 
-300110 TCP 连接中 NET_ERROR_TCPCONNECTING +300110 ​   TCP 连接中 ​               NET_ERROR_TCPCONNECTING 
-300300 无效的消息(为null) IM_ERROR_INVALIDMSG +300300 ​   无效的消息(为null) ​           IM_ERROR_INVALIDMSG 
-300301 无效的群组 IM_ERROR_INVALIDGROUP +300301 ​   无效的群组 ​               IM_ERROR_INVALIDGROUP 
-300302 无效的讨论组 IM_ERROR_INVALIDDISSCUSSION +300302 ​   无效的讨论组 ​               IM_ERROR_INVALIDDISSCUSSION 
-300303 修改讨论组名失败 IM_ERROR_MODIFYDISFAIL +300303 ​   修改讨论组名失败 ​               IM_ERROR_MODIFYDISFAIL 
-300304 创建讨论组失败 IM_ERROR_CREATEDISFAIL +300304 ​   创建讨论组失败 ​               IM_ERROR_CREATEDISFAIL 
-300305 用户不在群组内 IM_ERROR_USERNOTINGROUP +300305 ​   用户不在群组内 ​               IM_ERROR_USERNOTINGROUP 
-300306 用户不在讨论组内 IM_ERROR_USERNOTINDIS +300306 ​   用户不在讨论组内 ​               IM_ERROR_USERNOTINDIS 
-300307 删除成员失败 IM_ERROR_DELUSERFAIL +300307 ​   删除成员失败 ​               IM_ERROR_DELUSERFAIL 
-300308 邀请成员失败 IM_ERROR_ADDUSERFAIL +300308 ​   邀请成员失败 ​               IM_ERROR_ADDUSERFAIL 
-300309 文件上传失败 IM_ERROR_UPLOADFILEFAIL +300309 ​   文件上传失败 ​               IM_ERROR_UPLOADFILEFAIL 
-300310 文件下载失败 IM_ERROR_DOWNLOADFILEFAIL +300310 ​   文件下载失败 ​               IM_ERROR_DOWNLOADFILEFAIL 
-300311 录音时间过短 IM_ERROR_RECORDTOOSHORT  +300311 ​   录音时间过短 ​               IM_ERROR_RECORDTOOSHORT 
-300312 文件格式不支持 IM_ERROR_INVALIDFILEFORMAT +300312 ​   文件格式不支持 ​               IM_ERROR_INVALIDFILEFORMAT 
-300313 消息内容过长 IM_ERROR_MSGTOOLONG +300313 ​   消息内容过长 ​               IM_ERROR_MSGTOOLONG 
-300314 读取本地数据库消息列表失败 IM_ERROR_READDBFAIL +300314 ​   读取本地数据库消息列表失败 ​           IM_ERROR_READDBFAIL 
-300315 消息写入本地数据库失败 IM_ERROR_WRITEDBFAIL +300315 ​   消息写入本地数据库失败 ​           IM_ERROR_WRITEDBFAIL 
-300316 退出讨论组失败 IM_ERROR_QUITDISFAIL +300316 ​   退出讨论组失败 ​               IM_ERROR_QUITDISFAIL 
-300600 参数错误 PUBLIC_ERROR_PARAMETERERR +300600 ​   参数错误 ​                   PUBLIC_ERROR_PARAMETERERR 
-300601 消息格式错误 PUBLIC_ERROR_MSGFORMATERR +300601 ​   消息格式错误 ​               PUBLIC_ERROR_MSGFORMATERR 
-300602 网络未连接 PUBLIC_ERROR_NETUNCONNECT  +300602 ​   网络未连接 ​               PUBLIC_ERROR_NETUNCONNECT 
-300603 初始化加载失败(包括数据库加载) PUBLIC_ERROR_INITFAIL +300603 ​   初始化加载失败(包括数据库加载) ​       PUBLIC_ERROR_INITFAIL 
-300604 操作过于频繁 PUBLIC_ERROR_OPERATIONFREQUENT +300604 ​   操作过于频繁 ​               PUBLIC_ERROR_OPERATIONFREQUENT 
-300605 网络已连接 PUBLIC_ERROR_NETCONNECTED ​ +300605 ​   网络已连接 ​               PUBLIC_ERROR_NETCONNECTED
 </​code>​ </​code>​
  

页面工具