支付宝即时到账集成聊天SDK可以集成在OA系统上吗?

17140人阅读
安卓学习(29)
1.&&&&&&在环信官网上注册账号,创建自己的app,生成app的key
2.&&&&&&下载环信的SDK开发包,并导入到自己的app中并在自己的app的AndroidManifest.xml文件中加入步骤1中的key,并加入权限
具体代码为:
&&&&&&&& &!--Required --&
&&&&uses-permission android:name=&android.permission.VIBRATE&/&
&&&&uses-permission android:name=&android.permission.INTERNET&/&
&&&&uses-permissionandroid:name=&android.permission.RECORD_AUDIO& /&
&&&&uses-permission android:name=&android.permission.CAMERA&/&
&&&&uses-permission android:name=&android.permission.ACCESS_NETWORK_STATE&/&
&&&&uses-permissionandroid:name=&android.permission.ACCESS_MOCK_LOCATION& /&
&&&&uses-permissionandroid:name=&android.permission.WRITE_EXTERNAL_STORAGE& /&
&&&&uses-permissionandroid:name=&android.permission.MOUNT_UNMOUNT_FILESYSTEMS&/&&
&&&&uses-permissionandroid:name=&android.permission.ACCESS_FINE_LOCATION& /&
&&&&uses-permissionandroid:name=&android.permission.GET_TASKS& /&
&&&&uses-permissionandroid:name=&android.permission.ACCESS_WIFI_STATE& /&
&&&&uses-permission android:name=&android.permission.CHANGE_WIFI_STATE&/&
&&&&uses-permissionandroid:name=&android.permission.WAKE_LOCK& /&
&&&&uses-permissionandroid:name=&android.permission.MODIFY_AUDIO_SETTINGS& /&
&&&&uses-permissionandroid:name=&android.permission.READ_PHONE_STATE& /&&&&&&
&!-- 设置环信应用的appkey --&
&&&&&&& &meta-data
&&&&&&&&&&&android:name=&EASEMOB_APPKEY&
&&&&&&&&&&&android:value=&appkey&
&&&&&&& &!-- 声明sdk所需的service --&
&&&&&&& &service
android:name=&com.easemob.chat.EMChatService&
同时在在proguard文件中加入以下keep:
-keepclasscom.easemob.**{*;}
-keepclassorg.jivesoftware.**{*;}
-keepclassorg.apache.**{*;}
-dontwarn& com.easemob.**
#2.0.9后的不需要加下面这个keep
#-keepclassorg.xbill.DNS.**{*;}
#另外,demo中发送表情的时候使用到反射,需要keepSmileUtils,注意前面的包名,
#不要SmileUtils复制到自己的项目下keep的时候还是写的demo里的包名
-keepclasscom.easemob.chatuidemo.utils.SmileUtils{*;}
#2.0.9后加入语音通话功能,如需使用此功能的api,加入以下keep
-dontwarnch.imvs.**
-dontwarnorg.slf4j.**
-keepclassorg.ice4j.**{*;}
-keepclassnet.java.sip.**{*;}
-keepclassorg.webrtc.voiceengine.**{*;}
-keepclassorg.bitlet.**{*;}
-keepclassorg.slf4j.**{*;}
-keepclassch.imvs.**{*;}
3.初始化SDK
环信提供抽象类HxSDKHelper,开发人员可以选择继承这个环信SDK帮助类去加快初始化集成速度。此类会初始化环信SDK,并设置初始化参数和初始化相应的监听器
&* 不过继承类需要根据要求求提供相应的函数,尤其是提供一个{@link HXSDKModel}.
所以请实现abstract protectedHXSDKModel createModel();
&* 全局仅有一个此类的实例存在,所以可以在任意地方通过getInstance()函数获取此全局实例
创建继承Application的类,并在OnCreate()方法中初始化SDK。
applicationContext =
&&&&&&& instance =
&&&&&&& /**
&&&&&&&& * this function will initialize theHuanXin SDK
&&&&&&&& *
&&&&&&&& * @return boolean true if caller cancontinue to call HuanXin related APIs after calling onInit, otherwise false.
&&&&&&&& *
&&&&&&&& * 环信初始化SDK帮助函数
&&&&&& &&* 返回true如果正确初始化,否则false,如果返回为false,请在后续的调用中不要调用任何和环信相关的代码
&&&&&&&& *
&&&&&&&& * for example:
&&&&&&&& * 例子:
&&&&&&&& *
&&&&&&&& * public class DemoHXSDKHelper extendsHXSDKHelper
&&&&&&&& *
&&&&&&&& * HXHelper = new DemoHXSDKHelper();
&&&&&&&& * if(HXHelper.onInit(context)){
&&&&&&&& *&&&&// do HuanXin related work
&&&&&&&& * }
&&&&&&&& */
&&&&&&&hxSDKHelper.onInit(applicationContext);
初始化时注册接收新消息的监听广播
//只有注册了广播才能接收到新消息,目前离线消息,在线消息都是走接收消息的广播(离线消息目前无法监听,在登录以后,接收消息广播会执行一次拿到所有的离线消息)
NewMessageBroadcastReceivermsgReceiver=newNewMessageBroadcastReceiver();
IntentFilterintentFilter=newIntentFilter(EMChatManager.getInstance().getNewMessageBroadcastAction());
intentFilter.setPriority(3);
registerReceiver(msgReceiver,intentFilter);
privateclassNewMessageBroadcastReceiverextendsBroadcastReceiver{
&&&& @Override
&&&& publicvoidonReceive(Contextcontext,Intentintent){
&&&& &&& // 注销广播
&&&&&&&&&&&&& abortBroadcast();
&&&&&&&&&&&&& // 消息id(每条消息都会生成唯一的一个id,目前是SDK生成)
&&&&&&&&&&&&& StringmsgId=intent.getStringExtra(&msgid&);
&&&&&&&&&&&&& //发送方
&&&&&&&&&&&&& Stringusername=intent.getStringExtra(&from&);
&&&&&&&&&&&&& // 收到这个广播的时候,message已经在db和内存里了,可以通过id获取mesage对象
&&&&&&&&&&&&& EMMessagemessage=EMChatManager.getInstance().getMessage(msgId);
&&&&&&&&&&&&& EMConversation&&&&& conversation=EMChatManager.getInstance().getConversation(username);
&&&&&&&&&&&&& // 如果是群聊消息,获取到group id
&&&&&&&&&&&&& if(message.getChatType()==ChatType.GroupChat){
&&&&&&&&&&&&&&&&&&&&&& username=message.getTo();
&&&&&&&&&&&&& }
&&&&&&&&&&&&& if(!username.equals(username)){
&&&&&&&&&&&&&&&&&&&&&& // 消息不是发给当前会话,return
&&&&&&&&&&&&&&&&&&&&&& return;
&&&&&&&&&&&&& }
// 调用sdk注册方法& && EMChatManager.getInstance().createAccountOnServer(
&&&&&&&&&&&&&&&&&&&&& username,
&&&&&&&&&&&&&&&& runOnUiThread(new Runnable() {
&&&&&&&&&&&&&&&&&&& public
void run() {
&&&&&&&&&&&&&&&&&&&&& if (!MeActivity.this.isFinishing())
&&&&&&&&&&&&&&&&&&&&&&&& //pd.dismiss();
&&&&&&&&&&&&&&&&&&&&& // 保存用户名
&&&&&&&&&&&&&&&&&&&&& HealthFileApp.getInstance().setUserName(
&&&&&&&&&&&&&&&&&&& &&&&&&& username);
&&&&&&&&&&&&&&&&&&&&& Toast.makeText(
&&&&&&&&&&&&&&&&&&&&&&&&&&& getApplicationContext(),
&&&&&&&&&&&&&&&&&&&&&&&&&&& getResources()
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& .getString(
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& && R.string.Registered_successfully),
&&&&&&&&&&&&&&&&&&&&&&&&&&& 0).show();
&&&&&&&&&&&&&&&&&&&&& finish();
&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&& });
// 调用sdk登陆方法登陆聊天服务器
EMChatManager.getInstance().login(currentUsername,
currentPassword,new EMCallBack() {
&&&&&&&&&&&&& @Override
&&&&&&&&&&&&& public
void onSuccess() {
&&&&&&&&&&&&&&&& if (!progressShow) {
&&&&&&&&&&&&&&&&&&& return;
&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&& // 登陆成功,保存用户名密码
&&&&&&&&&&&&&&&& HealthFileApp.getInstance()
&&&&&&&&&&&&&&&&&&&&& .setUserName(currentUsername);
&&&&&&&&&&&&&&&& HealthFileApp.getInstance()
&&&&&&&&&&&&&&&&&&&&& .setPassword(currentPassword);
&&&&&&&&&&&&&&&& try {
// ** 第一次登录或者之前logout后再登录,加载所有本地群和回话
// ** manually load all localgroups and&&&&&&& && EMGroupManager.getInstance().loadAllGroups();&&&& && EMChatManager.getInstance().loadAllConversations();
// 处理好友和群组
initializeContacts();
6.实现聊天Activity
获得与聊天人的coversation会话,并将要发送的消息放到会话中。
EMConversationconversation=EMChatManager.getInstance().getConversation(username);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:28585次
排名:千里之外
原创:17篇
转载:24篇
(1)(3)(1)(4)(2)(21)(7)(2)输入关键字或相关内容进行搜索
您好,请问如何集成 第三方即时通讯sdk,如环信、融云或者 云通讯,我看下他们目前都提供的是ios 、安卓独立的sdk,能否给个详细的说明mui移动框架怎么集成这类应用。非常感谢!!
ps:如果以上集成太复杂的话,还有其他什么办法可以实现,类似微信一样的 聊天,群组,通讯录功能,只要能实现核心沟通功能即可。谢谢!
可以集成,参考如何用原生开发插件:
ios参考:http://ask./article/67;
Android参考:http://ask./article/66另外也可以使用它们的js sdk,而不是原生sdk。
要回复问题请先或
浏览: 2470
关注: 8 人二次元同好交流新大陆
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(147)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'视频聊天开发平台',
blogAbstract:'随着人们对视频和音频信息的需求愈来愈强烈,追求远距离的视音频的同步交互成为新的时尚。近些年来,依托计算机技术、通信技术和网络条件的发展,集音频、视频、图像、文字、数据为一体的多媒体信息,使越来越多的人开始通过互联网享受到网上生活、远程医疗、远程通讯的乐趣,缩短了时区和地域的距离。远程通信的各种优势给人们来来的方便也促使人们对这一领域进行更加深入的探索。基于不同平台以及不同开发工具的即时通讯系统层出不穷。本文介绍视频聊天平台模式。
一、 基于软件的视频聊天网站。a) 纯C/S架构,基于软件的视频聊天网站,视频聊天平台是软件而不是网站。通过网站与软件的数据同步来实现视频聊天网站的功能。网站会员通过下载网站提供的客户端登陆,然后在统一的软件平台里进行视频交流。',
blogTag:'即时通讯开发,音视频开发,音视频即时通讯,视频聊天开发,视频会议开发',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:0,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}即时通信集成
<body style="min-width:1280width:expression_r(document.body.clientWidth
即时通信集成
即时通信是&云视互动&的核心功能之一,实现了类似微信APP的实时交互功能,可以无缝地结合到任何一种需要聊天交互的应用中。
针对目前没有APP的或是准备开发APP的开s发者团队云视互动提供了前后台开源的融科通供团队下载使用,应用可以在此上面进行扩充,添加自己相关的业务逻辑,实现属于自己的APP。下载融科通源码时请点击。
对于已经拥有APP的用户仅需要下载对应的即时通信SDK即可,下载的地址请点击。
云视互动提供的即时通信会话列表和群聊列表页面如下图所示:
单聊消息页面和群聊消息页面如下图所示:
此处的集成步骤仅针对已有App的用户。
在集成使用云视互动即时通信功能时,请按照如下步骤完成操作内容。
使用云视互动即时通信功能时,需要有对应的云视互动账号,如果没有请按照如下步骤完成账号的准备工作:
使用云视互动即时通信功能时,需要有对应的云视互动账号,如果没有请按照如下步骤完成账号的准备工作:
1. 登录网站,在开发者中心注册开发者账号;
2. 添加自己的应用,同时记录分配给该应用的客户端密钥值;
3. 在新添加的应用中增加用户信息,并记录新增用户的账号和密码,为后面登录时使用。
使用云视互动即时通信功能时,请下载对应的SDK,下载地址请点击。
下载完成之后解压缩,内容如下图所示:
doc:是对库文件rongkecloud-sdkchat-android.jar中提供的属性和方法的说明;
libs:使用云视互动即时通信需要的库文件,打开之后包含的内容如下:
httpmime-4.1.2.jar:网络请求使用的库文件,应用中仅保留一份;
rongkecloud-sdkbase-android.jar:云视互动底层框架使用的库文件,如果同时使用云视互动其他模块的SDK,则此jar文件保留一份;
rongkecloud-sdkchat-android.jar:云视互动即时通信使用的库文件。
即时通信UI+资源:云视互动即时通信提供的UI和资源文件,点开之后包含的内容如下:
rkchat:即时通信使用的UI以及相关的操作管理类;
res:即时通信使用的资源文件;
AndroidManifest.xml:使用即时通信功能需要配置的信息及权限声明。
1. 云视互动即时通信使用的资源文件名称以rkcloud_chat_做为前缀,类文件名称以RKCloudChat做为前缀;
2. rkchat和res两个包的内容可以根据应用APP自己的需求进行对应的修改。
请依照如下步骤导入相关SDK内容到您的开发项目中:
1. 解压缩 RKCloud_Android_Chat_SDK.zip 集成压缩包;
2. 复制libs目录下面的jar文件到您的开发项目的 libs/ 目录下面;
3. 复制res目录下面所有以rkclouc_chat_为前缀的资源文件到您的开发项目的res目录的对应目录下面;
4. 复制rkchat目录及其下面所有内容到工程根目录,并以源代码的方式加载到工程中,同时修改部分页面引用资源文件的路径;
5. 完善rkchat目录下面联系人相关的RKCloudChatContactManager.java文件中TODO部分的内容;
6. rkchat目录下面RKCloudChatMmsManager.java文件根据需要进行对应的修改即可。
以源码方式加载rkchat目录到工程中时,加载的方式在Eclipse步骤如下:
1. eclipse中选中应用后右击-&Build Path-&Configure Build Path...-&选择Tab项&Source&-&Add Folder...-&勾选rkchat包;
2. 点击&OK&按钮即完成源码加载。
1. 替换所有引用import com.rongkecloud.chat.demo.R;的资源文件路径为对应应用APP的资源文件路径;
2. .java文件和.xml文件均采用UTF-8无签名的编码方式保存,防止乱码出现请使用对应的编码格式打开文件;
3. 云视互动即时通信功能会在不断的更新完善中,请记录您在rkchat包中修改的内容,方便后期的更新和维护。
将以下权限直接复制到您Android工程的AndroidManifest.xml中。
&uses-permission android:name=&android.permission.VIBRATE& /&
&uses-permission android:name=&android.permission.INTERNET& /&
&uses-permission android:name=&android.permission.RECORD_AUDIO& /&
&uses-permission android:name=&android.permission.MODIFY_AUDIO_SETTINGS& /&
&uses-permission android:name=&android.permission.CAMERA& /&
&uses-permission android:name=&android.permission.ACCESS_NETWORK_STATE& /&
&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE& /&
&uses-permission android:name=&android.permission.ACCESS_WIFI_STATE& /&
&uses-permission android:name=&android.permission.WAKE_LOCK& /&
&uses-permission android:name=&android.permission.CHANGE_NETWORK_STATE& /&
&uses-permission android:name=&android.permission.CHANGE_WIFI_STATE& /&
&uses-permission android:name=&android.permission.BROADCAST_STICKY& /&
&uses-permission android:name=&android.permission.WRITE_SETTINGS& /&
&uses-permission android:name=&android.permission.DISABLE_KEYGUARD& /&
&!-- 设置聊天背景页面 --&&activity
android:name=&com.rongkecloud.chat.demo.ui.RKCloudChatSetMsgBgActivity&
android:screenOrientation=&portrait&
android:theme=&@android:style/Theme.NoTitleBar& /&&!-- 录制视频页面 --&&activity
android:name=&com.rongkecloud.chat.demo.ui.RKCloudChatRecordVideoActivity&
android:screenOrientation=&portrait&
android:theme=&@android:style/Theme.NoTitleBar& /&&!-- 选择会话成员页面 --&&activity
android:name=&com.rongkecloud.chat.demo.ui.RKCloudChatSelectUsersActivity&
android:screenOrientation=&portrait&
android:theme=&@android:style/Theme.NoTitleBar&
android:windowSoftInputMode=&stateHidden|adjustPan& /&&!-- 会话列表页面 --&&activity
android:name=&com.rongkecloud.chat.demo.ui.RKCloudChatListActivity&
android:screenOrientation=&portrait&
android:theme=&@android:style/Theme.NoTitleBar& /&&!-- 聊天页面 --&&activity
android:name=&com.rongkecloud.chat.demo.ui.RKCloudChatMsgActivity&
android:launchMode=&singleTask&
android:screenOrientation=&portrait&
android:theme=&@android:style/Theme.NoTitleBar&
android:windowSoftInputMode=&adjustResize& /&&!-- 选择文件页面 --&&activity
android:name=&com.rongkecloud.chat.demo.ui.RKCloudChatSelectFileActivity&
android:screenOrientation=&portrait&
android:theme=&@android:style/Theme.NoTitleBar& /&&!-- 群聊会话管理页面 --&&activity
android:name=&com.rongkecloud.chat.demo.ui.RKCloudChatGroupManageActivity&
android:screenOrientation=&portrait&
android:theme=&@android:style/Theme.NoTitleBar& /&&!-- 单聊会话管理页面 --&&activity
android:name=&com.rongkecloud.chat.demo.ui.RKCloudChatSingleManageActivity&
android:screenOrientation=&portrait&
android:theme=&@android:style/Theme.NoTitleBar& /&&!-- 查看图片页面 --&&activity
android:name=&com.rongkecloud.chat.demo.ui.RKCloudChatViewImagesActivity&
android:screenOrientation=&portrait& /&&!-- 转发/分享页面 --&&activity
android:name=&com.rongkecloud.chat.demo.ui.RKCloudChatForwardActivity&
android:screenOrientation=&portrait&
android:theme=&@android:style/Theme.NoTitleBar&
android:windowSoftInputMode=&stateHidden|adjustPan& /&&!-- 联系人列表页面 --&&activity
android:name=&com.rongkecloud.chat.demo.ui.RKCloudChatAddressListActivity&
android:screenOrientation=&portrait&
android:theme=&@android:style/Theme.NoTitleBar& /&&!-- 用户创建和参与的群列表页面 --&&activity
android:name=&com.rongkecloud.chat.demo.ui.RKCloudChatGroupListActivity&
android:screenOrientation=&portrait&
android:theme=&@android:style/Theme.NoTitleBar& /&&!-- 接收第三方分享信息的页面 --&&activity
android:name=&com.rongkecloud.chat.demo.ui.RKCloudChatReceiveThirdInfoActivity&
android:launchMode=&singleTask&
android:screenOrientation=&portrait&
android:theme=&@android:style/Theme.Translucent& &
&!-- 一张图片的分享 --&
&intent-filter&
&action android:name=&android.intent.action.SEND& /&
&category android:name=&android.intent.category.DEFAULT& /&
&data android:mimeType=&image/*& /&
&/intent-filter&
&!-- 多张图片的分享 --&
&intent-filter&
&action android:name=&android.intent.action.SEND_MULTIPLE& /&
&category android:name=&android.intent.category.DEFAULT& /&
&data android:mimeType=&image/*& /&
&/intent-filter&&/activity&
android:name=&com.rongkecloud.sdkbase.LPSDaemonService&
android:process=&:remote& /&
该Service主要用于维持长链接使用,如果没有配置会影响到收消息、接电话等功能,请务必配置此项。
android:name=&com.rongkecloud.sdkbase.RKCLoudBroadcastReceiver&
android:enabled=&true&
android:exported=&false& &
&intent-filter&
&action android:name=&lps_auth_result_broadcast& /&
&action android:name=&lps.message.receive& /&
&/intent-filter&&/receiver&
该广播用于接收长链接消息时使用,请务必配置此项。
&meta-data
android:name=&RKCLOUD_KEY&
android:value=&您应用APP在云视互动开发者中心申请的客户端密钥值& /&
该key值是能否正确登录云视互动的钥匙,请准确配置。
云视互动不提供用户应用App联系人的存储。
在Chat SDK中提供了RKCloudChatContactManager类,此类主要使用户来完善自己应用App的用户信息。
此类中加TODO的方法都是需要应用App自己来完善的。
若用户未完善上述信息,云视互动中会默认显示该用户在云视互动注册的账号。
使用前面已经准备好的云视互动账号和密码,进行SDK的初始化操作,参考代码如下:
// 打开Debug模式RKCloud.setDebugMode(true);// 设置使用的模块SDK,如:即时通信SDKRKCloud.use(RKCloudModelType.CHAT);// 初始化云视互动的账号RKCloud.init(appContext, rkAccount, rkPwd, new InitCallBack(){
public void onFail(int errorCode) {
if(RKCloudBaseErrorCode.RK_NOT_NETWORK == errorCode){
// 初始化失败:无网络
}else if(RKCloudBaseErrorCode.BASE_ACCOUNT_PW_ERROR == errorCode){
// 初始化失败:账号或密码错误
}else if(RKCloudBaseErrorCode.BASE_ACCOUNT_BANNED == errorCode){
// 初始化失败:账号被禁
}else if(RKCloudBaseErrorCode.BASE_APP_KEY_AUTH_FAIL == errorCode){
// 初始化失败:客户端密钥值认证失败
// 初始化失败
// 需要应用完善初始化失败后的回调
public void onSuccess() {
// 需要应用完善初始化成功后的处理
云视互动即时通信SDK在接收到新消息时、或是群相关信息有变更时如何通知给上层应用???答案即是:以回调接口的形式通知的,因此需要应用先注册后回调处理。如果未注册相关的接口,那么应用将收不到相关的回调信息。
以下注册的回调接口必须保证是在UI主线程完成的,否则会出现UI无响应或crash的问题。
SDK初始化成功后,需要注册的回调接口如下所示:
// 设置账号异常的回调处理RKCloud.setOnRKCloudFatalExceptionCallBack(new RKCloudFatalExceptionCallBack() { @Override public void onRKCloudFatalException(int errorCode) {
if(1 == errorCode){
// 账号异常:被踢
}else if(2 == errorCode){
// 账号异常:被禁
// 请应用完善账号异常后的处理 }});// 云视互动即时通信SDK的初始化RKCloudChat.init();// 绑定收到消息后的回调RKCloudChatMessageManager.getInstance(AppContext).registerRKCloudChatReceivedMsgCallBack(new RKCloudChatReceivedMsgCallBack() { @Override public void onReceivedMsgs(Map&RKCloudChatBaseChat, List&RKCloudChatBaseMessage&& msgs) {
// 完善收到一堆新消息,并且按照会话进行划分后的处理 } @Override public void onReceivedMsg(RKCloudChatBaseChat chatObj, RKCloudChatBaseMessage msgObj) {
// 完善收到一条新消息后的处理 } @Override public void onMsgHasChanged(String msgSerialNum) {
// 完善编号为msgSerialNum的消息有变更后的处理 }});// 绑定群信息有变更的回调RKCloudChatMessageManager.getInstance(AppContext).registerRKCloudChatGroupCallBack(new RKCloudChatGroupCallBack() { @Override public void onGroupCreated(String groupId) {
// 完善有新建的群的处理 } @Override public void onGroupInfoChanged(String groupId) {
// 完善群ID为groupId的群信息有变更的处理 } @Override public void onGroupUsersChanged(String groupId) {
// 完善群ID为groupId的成员有变更的处理 } @Override public void onGroupRemoved(String groupId, int removeType) {
// removeType表示移除类型,值包括: 0: 群不存在
1:主动退出 2:被踢除
// 完善群ID为groupId的群被移除的处理 }});// 绑定应用端的联系人信息 RKCloudChatMessageManager.getInstance(AppContext).registerRKCloudContactCallBack(new RKCloudChatContactCallBack() { @Override public Map&String, String& getContactNames(List&String& accounts) {
// 完善获取多个联系人显示名称的逻辑,返回值中key为云视互动账号,value为联系人显示的名称
} @Override public String getContactName(String account) {
// 完善获取联系人显示名称的逻辑
} @Override public Map&String, String& getContactHeaderPhotos(List&String& accounts) {
// 完善获取多个联系人头像路径的逻辑,返回值中key为云视互动账号,value为联系人的头像路径
} @Override public String getContactHeaderPhoto(String account) {
// 完善获取联系人头像路径的逻辑
1. 执行RKCloud.init()的初始化方法之前需要先申明使用的SDK模块,如使用即时通信SDK模块的方法为RKCloud.use(RKCloudModelType.CHAT);
2. 执行RKCloud.init()方法并且初始化成功之后,再次调用此方法时不起作用;
3. 注册回调等操作必须在云视互动账号初始化成功之后执行,并且是在UI主线程中调用的注册方法,否则会出现应用不响应或crash的现象;
4. 同时使用云视互动的其他SDK时,在注册回调时相同的代码请保留一份即可。
1. 开发阶段建议打开Debug模式方便调试;
2. 传入SDK中的Context建议采用Application Context。
云视互动即时通信定义了会话实体使用的抽象类,其类名称为RKCloudChatBaseChat,该类提供了会话对象中使用到的公共属性和方法,并且实现了单聊和群聊两种类型的会话。
先是会话对象中用到的公共属性和方法的说明,具体如下所示:
highLightName
SpannableStringBuilder对象
高亮显示的会话名称(搜索会话名称时使用,不为null时表示有符合条件的会话,为null时表示不符合搜索条件)
返回值类型
getChatId()
获取会话ID
单聊会话时为对方的云视互动账号;群聊会话时为群ID
getChatType()
获取会话类型
getChatShowName()
获取会话显示的名称
单聊会话显示顺序:应用APP联系人名称-&对方云视互动账号
群聊会话显示顺序:群备注信息-&群名称-&群ID
getUserCounts()
获取会话中的成员总个数(包含自己)
getUnReadMsgCnt()
获取会话中的未读消息条数
getRemindStatus()
true:提醒
false:不提醒
获取会话收到新消息后是否需要提醒
getBackgroundImagePath()
获取会话在聊天页面使用的背景图片
未设置时返回null或空字符串
getLastMsgCreatedTime()
获取会话中最后一条消息在终端的创建时间,为毫秒级时间戳
true:已置顶
false:未置顶
会话是否置顶
getLastMsgObj()
RKCloudChatBaseMessage对象
获取会话中的最后一条消息对象,无消息时返回null
matchName()
搜索会话时用于高亮标识时使用的方法
copyData()
true:拷贝成功
false:拷贝失败
RKCloudChatBaseChat对象
拷贝数据时使用
只能是同一会话时的信息拷贝,不同会话时拷贝失败
以下是对单聊会话和群聊会话的详细说明,并且全部继承于RKCloudChatBaseChat基类,内容如下。
云视互动即时通信SDK中定义的单聊会话类名称为SingleChat,用于一对一聊天交互时使用。
该类包含的属性及方法说明如下:
返回值类型
buildSingleChat()
SingleChat对象
userName:对方云视互动账号
用于构造单聊会话对象时使用,是一静态方法
setContactShowName()
showName:联系人显示的名称
单聊会话时设置对端用户显示的名称
云视互动即时通信SDK中定义的群聊会话类名称为GroupChat,用于多对多的聊天交互时使用。
该类包含的属性及方法说明如下:
返回值类型
buildGroupChat()
GroupChat对象
groupId:群ID
用于构造群聊会话对象时使用,是一静态方法
getCroupCreater()
获取群聊会话的创建者信息,为云视互动分配的账号。
返回该会话的创建者信息。
setGroupRemark()
remark:联系人的备注信息
设置群的备注信息
getGroupRemark()
获取群的备注信息
getInviteAuth()
获取群会话中邀请成员的权限。
boolean 邀请权限:
true:允许群内成员邀请
false:只能群主邀请
setInviteAuth()
auth:邀请成员的权限:
true:允许群内成员邀请
false:只能群主邀请
设置群会话中邀请成员的权限,该方法常用于群聊使用
创建群,用户可通过此接口创建群
applyGroup()
List&String&
群的参与者,不包含当前登录用户,参与者不允许有重复,并且人数至少为两人
群名称,不允许为空,并且长度限制为30位字符以内
requestCallBack
RKCloudChatRequestCallBack对象
建群之后的回调接口,不允许为null
RKCloudChatMessageManager.getInstance(appContext).applyGroup(users, groupName, new RKCloudChatRequestCallBack() {
public void onSuccess(Object groupId) {
// 创建成功后返回新建群的groupID,为String类型
// 应用完善建群成功后的处理
public void onProgress(int progress) {
public void onFailed(int errorCode) {
if(RKCloudChatErrorCode.RK_SDK_UNINIT == errorCode){
// 建群失败:SDK未初始化
}else if(RKCloudChatErrorCode.RK_PARAMS_ERROR == errorCode){
// 建群失败:参数错误
}else if(RKCloudChatErrorCode.RK_NOT_NETWORK == errorCode){
// 建群失败:无网络
}else if(RKCloudChatErrorCode.RK_INVALID_USER == errorCode){
// 建群失败:无效用户
}else if(RKCloudChatErrorCode.CHAT_GROUP_USER_NUMBER_EXCEED_LIMIT == errorCode){
// 建群失败:人数超出限制
}else if(RKCloudChatErrorCode.CHAT_GROUP_COUNT_EXCEED_LIMIT == errorCode){
// 建群失败:建群个数超出限制
// 建群失败
// 完善建群失败后的处理
修改群内邀请成员的权限
modifyGroupInviteAuth()
inviteAuth
true: 开通
false: 不开通
是否开通邀请功能
requestCallBack
RKCloudChatRequestCallBack对象
修改邀请权限后的回调接口,不允许为null
RKCloudChatMessageManager.getInstance(appContext). modifyGroupInviteAuth (groupId, inviteAuth, new RKCloudChatRequestCallBack() {
public void onSuccess(Object groupId) {
// 完善修改群内邀请成员的权限成功后的处理
public void onProgress(int progress) {
public void onFailed(int errorCode) {
if(RKCloudChatErrorCode.RK_SDK_UNINIT == errorCode){
// 修改群内邀请成员的权限失败:SDK未初始化
}else if(RKCloudChatErrorCode.RK_PARAMS_ERROR == errorCode){
// 修改群内邀请成员的权限失败:参数错误
}else if(RKCloudChatErrorCode.RK_NOT_NETWORK == errorCode){
// 修改群内邀请成员的权限失败:无网络
}else if(RKCloudChatErrorCode. CHAT_GROUP_NOT_EXIST == errorCode){
// 修改群内邀请成员的权限失败:群号码不存在
}else if(RKCloudChatErrorCode. CHAT_GROUP_USER_NOT_EXIST == errorCode){
// 修改群内邀请成员的权限失败:非群用户
// 修改群内邀请成员的权限失败
// 完善修改群内邀请成员的权限失败后的处理
inviteUsers()
List&String&
被邀请者,不允许包含当前登录用户,并且被邀请者不允许有重复
requestCallBack
RKCloudChatRequestCallBack对象
邀请成员入群后的回调接口,不允许为null
RKCloudChatMessageManager.getInstance(appContext). inviteUsers (groupId, invitees, new RKCloudChatRequestCallBack() {
public void onSuccess(Object groupId) {
// 完善邀请成员成功后的处理
public void onProgress(int progress) {
public void onFailed(int errorCode) {
if(RKCloudChatErrorCode.RK_SDK_UNINIT == errorCode){
// 邀请成员失败:SDK未初始化
}else if(RKCloudChatErrorCode.RK_PARAMS_ERROR == errorCode){
// 邀请成员失败:参数错误
}else if(RKCloudChatErrorCode.RK_NOT_NETWORK == errorCode){
// 邀请成员失败:无网络
}else if(RKCloudChatErrorCode. ILLEGAL_RECEIVER == errorCode){
// 邀请成员失败:非法用户
}else if(RKCloudChatErrorCode. CHAT_GROUP_USERS_COUNT_BEYOND == errorCode){
// 邀请成员失败:人数超出限制
}else if(RKCloudChatErrorCode. CHAT_GROUP_NOT_EXIST == errorCode){
// 邀请成员失败:群号码不存在
}else if(RKCloudChatErrorCode. UN_INVITE_AUTH == errorCode){
// 邀请成员失败:无邀请权限
// 邀请成员失败
// 完善邀请成员失败后的处理
quitGroup()
requestCallBack
RKCloudChatRequestCallBack对象
退群之后的回调接口,不允许为null
RKCloudChatMessageManager.getInstance(appContext).quitGroup(groupId, new RKCloudChatRequestCallBack() { @Override public void onSuccess(Object groupId) {
// 完善退出群成功后的处理 } @Override public void onProgress(int progress) { } @Override public void onFailed(int errorCode) {
if(RKCloudChatErrorCode.RK_SDK_UNINIT == errorCode){
// 退出群失败:SDK未初始化
}else if(RKCloudChatErrorCode.RK_PARAMS_ERROR == errorCode){
// 退出群失败:参数错误
}else if(RKCloudChatErrorCode.RK_NOT_NETWORK == errorCode){
// 退出群失败:无网络
// 退出群失败
// 完善退出群失败后的处理 }});
踢除某位用户,只有群主具有此功能,并且每次只能踢除一位用户
kickUser()
kickedUserAccount
被踢用户在云视互动中的账号,并且禁止踢除当前登录用户
一次只允许踢除一人
requestCallBack
RKCloudChatRequestCallBack对象
踢除之后的回调接口,不允许为null
RKCloudChatMessageManager.getInstance(appContext). kickUser (groupId, kickedUserAccount, new RKCloudChatRequestCallBack() {
public void onSuccess(Object groupId) {
// 完善踢除成功后的处理
public void onProgress(int progress) {
public void onFailed(int errorCode) {
if(RKCloudChatErrorCode.RK_SDK_UNINIT == errorCode){
// 踢除失败:SDK未初始化
}else if(RKCloudChatErrorCode.RK_PARAMS_ERROR == errorCode){
// 踢除失败:参数错误
}else if(RKCloudChatErrorCode.RK_NOT_NETWORK == errorCode){
// 踢除失败:无网络
} else if(RKCloudChatErrorCode. CHAT_GROUP_NOT_EXIST == errorCode){
// 踢除失败:群号码不存在
} else if(RKCloudChatErrorCode. CHAT_GROUP_USER_NOT_EXIST == errorCode){
// 踢除失败:非群用户
} else if(RKCloudChatErrorCode. CHAT_GROUP_UNAUTH_KICKUSER == errorCode){
// 踢除失败:没有踢人权限
// 踢除失败
// 完善踢除失败后的处理
云视互动即时通信定义了消息实体使用的抽象类,其类名称为RKCloudChatBaseMessage,该类提供了消息对象中使用到的公共属性和方法,并且实现了多种类型的消息。
先是消息对象中用到的公共属性和方法的说明,具体如下所示:
返回值类型
获取消息类型
getChatId()
获取消息所在的会话
getMsgSerialNum()
获取消息的唯一编号
getDirection()
MSG_DIRECTION对象
获取消息的发送接收方向
getSender()
获取消息发送者信息,为云视互动分配的账号
getMsgCreasingId()
获取消息在终端创建时产生的自增id值
getStatus()
MSG_STATUS 对象
获取消息状态
setStatus()
status: MSG_STATUS对象
设置消息状态
setMsgTime()
msgTime: 秒级时间戳
设置消息时间,为秒级时间戳
getMsgTime()
获取消息时间,为秒级时间戳
getCreatedTime()
获取消息在客户端的创建时间,为秒级时间戳
getExtension()
获取消息的扩展内容
setExtension()
content: 扩展内容,并且长度限制在1024个字符之内,超出范围时设置内容变为空字符串
设置消息的扩展内容
getContent()
获取消息内容
copyData()
RKCloudChatBaseMessage 对象
拷贝数据,需要注意的拷贝操作必须是消息编号相同时方可拷贝成功
应用如果需要传递额外信息时,可以通过消息对象中提供的方法setExtension(String content)进行扩展,扩展信息只能为文本字符串,并且长度为0-1024个字符,如果超出限制则设置失败。
云视互动目前支持的收发的聊天消息类型包括:文本(带表情)消息、图片消息、语音消息、文件消息、以及应用APP的自定义消息五种类型,其中自定义消息需要应用APP自己解析并显示。现分别对发送的各种类型的消息进行详细说明。
TextMessage类为云视互动即时通信文本消息实体类,属性及方法说明如下:
返回值类型
isDraftMsg()
是否为草稿信息
buildMsg()
TextMessage对象
chatId:接收方的会话id,单聊时为对端的云视互动账号,群聊时为群ID。
content:文本内容,不允许为空
构造发送的文本消息
对此类的使用如下:
// 构造文本消息对象
TextMessage textObj = TextMessage.buildMsg(chatId, content);
ImageMessage类为云视互动即时通信图片消息实体类,属性及方法说明如下:
返回值类型
getThumbPath()
获取缩略图在终端的存储路径
getFileId()
获取原图在服务器端存储的文件ID值
getFilePath()
获取原图在终端的存储路径
getFileName()
获取图片名称
getFileSize()
获取原始图片大小
getImageWidth()
获取原始图片的宽度
该值由发送方发送图片消息时在扩展信息中携带,如果有值了,则返回对应的值,无值时则返回0
getImageHeight()
获取原始图片的高度
该值由发送方发送图片消息时在扩展信息中携带,如果有值了,则返回对应的值,无值时则返回0
buildMsg()
ImageMessage对象
chatId:接收方的会话ID,单聊时为对端的云视互动账号;群聊时为群ID imagePath:图片的文件路径
构造发送的图片消息
对此类的使用如下:
// 构造图片消息对象
ImageMessage imageObj = ImageMessage.buildMsg(chatId, imagePath);
AudioMessage类为云视互动即时通信语音消息实体类,属性及方法说明如下:
返回值类型
getDuration()
获取语音消息的播放时长,单位:秒
getFileId()
获取语音消息在服务器端存储的文件ID值
getFilePath()
获取语音文件在终端的存储路径
getFileName()
获取语音文件名称
getFileSize()
获取语音文件大小
buildMsg()
AudioMessage对象
chatId:接收方的会话ID,单聊时为对端的云视互动账号;群聊时为群ID
audioPath:音频文件路径
构造发送的音频消息
对此类的使用如下:
// 构造语音消息对象
AudioMessage audioObj = AudioMessage.buildMsg(chatId, authPath);
AudioMessage类为云视互动即时通信文件消息实体类,属性及方法说明如下:
返回值类型
getFileId()
获取文件在服务器端存储的文件ID值
getFilePath()
获取文件路
getFileName()
获取文件名称
getFileSize()
获取文件大小
buildMsg()
FileMessage对象
chatId:接收方的会话ID,单聊时为对端的云视互动账号;群聊时为群ID
filepath:文件路径
构造发送的文件消息
对此类的使用如下:
// 构造文件消息对象
FileMessage fileObj = FileMessage.buildMsg(chatId, filePath);
应用APP可以扩展自己的消息类型,如:定位、名片等,云视互动针对于此专门定义了自定义消息供应用APP传输使用。
CustomMessage类为云视互动即时通信自定义消息实体类,属性及方法说明如下:
返回值类型
buildMsg()
CustomMessage对象
chatId:接收方的会话ID,单聊时为对端的云视互动账号;群聊时为群ID
content: 消息内容,长度最多为1024个字符
构造发送的自定义消息
对此类的使用如下:
// 构造自定义消息对象
CustomMessage customObj = CustomMessage.build(chatId, content);
即时通信Demo中未对自定义消息(CustomMessage)做解析和显示处理,应用如果使用此消息类型,请完善相关页面的内容及显示,具体修改包括如下:
&会话列表页面:该页面中需要完善最后一条为自定义消息时的显示内容。修改的地方是:RKCloudChatMmsManager.java类中getNotificationContent()方法;
&收到消息后的内容显示:主要涉及通知栏中的提示内容,其修改的地方同上,为RKCloudChatMmsManager.java类中getNotificationContent()方法;
&聊天页面:需要在RKCloudChatMsgAdapter.java类中完善对自定义消息的展示。
云视互动即时通信SDK专门提供了一种提示型消息在云视互动内使用,主要用于记录聊天相关信息,目前提示的信息包括:邀请用户入群、群内有成员入群或离群几种情况,并且该消息禁止在网络中的发送。
TipMessage类为云视互动即时通信提示型消息实体类。
应用APP可以向终端插入自己的消息内容,并且消息的显示完全由终端自己决定,同时该类型的消息不能进行任何的转发操作。
LocalMessage类为云视互动即时通信本地消息实体类,属性及方法说明如下:
返回值类型
buildSendMsg()
LocalMessage
chatId:接收方的会话ID,单聊时为对端的云视互动账号;群聊时为群ID
content:文本内容,不允许为空,并且长度最多为1024个字符msgSenderAccount:消息发送者的账号,不允许为空
构造发送的本地消息
buildReceivedMsg()
LocalMessage
chatId:接收方的会话ID,单聊时为对端的云视互动账号;群聊时为群ID
content:文本内容,不允许为空,并且长度最多为1024个字符
msgSenderAccount:消息发送者的账号,不允许为空
构造接收的本地消息
发送消息,可发送文本、图片、语音、文件及自定义消息
sendChatMsg()
RKCloudChatBaseMessage对象
被发送的消息对象
requestCallBack
RKCloudChatRequestCallBack对象
发送完消息之后的回调,不允许为null
RKCloudChatMessageManager.getInstance(appContext).sendChatMsg(msgObj, new RKCloudChatRequestCallBack() {
public void onSuccess(Object groupId) {
// 完善发送消息成功后的处理
public void onProgress(int progress) {
// 完善发送消息时进度值(0-100)的上报处理
public void onFailed(int errorCode) {
if(RKCloudChatErrorCode.RK_SDK_UNINIT == errorCode){
// 发送消息失败:SDK未初始化
}else if(RKCloudChatErrorCode.RK_PARAMS_ERROR == errorCode){
// 发送消息失败:参数错误
}else if(RKCloudChatErrorCode.RK_NOT_NETWORK == errorCode){
// 发送消息失败:无网络
}else if(RKCloudChatErrorCode.ILLEGAL_RECEIVER == errorCode){
// 发送消息失败:非法用户
}else if(RKCloudChatErrorCode. CHAT_MMS_MMS_FILESIZE_EXCEED == errorCode){
// 发送消息失败:文件大小超出限制
}else if(RKCloudChatErrorCode. CHAT_GROUP_NOT_EXIST == errorCode){
// 发送消息失败:群号码不存在
}else if(RKCloudChatErrorCode. CHAT_GROUP_USER_NOT_EXIST == errorCode){
// 发送消息失败:非群用户
// 发送消息失败
// 完善发送消息失败后的处理
转发消息,将已经发出去的消息转发给其他用户。
forwardChatMsg()
msgSerialNum
消息的唯一ID
会话ID,单聊时为对端的云视互动账号,群聊为群ID
requestCallBack
RKCloudChatRequestCallBack对象
转发完消息之后的回调接口,不允许为null
RKCloudChatMessageManager.getInstance(appContext).forwardChatMsg(chatId, new RKCloudChatRequestCallBack() {
public void onSuccess(Object groupId) {
// 完善转发消息成功后的处理
public void onProgress(int progress) {
// 完善发送消息时进度值(0-100)的上报处理
public void onFailed(int errorCode) {
if(RKCloudChatErrorCode.RK_SDK_UNINIT == errorCode){
// 转发消息失败:SDK未初始化
}else if(RKCloudChatErrorCode.RK_PARAMS_ERROR == errorCode){
// 转发消息失败:参数错误
}else if(RKCloudChatErrorCode.RK_NOT_NETWORK == errorCode){
// 转发消息失败:无网络
}else if(RKCloudChatErrorCode.ILLEGAL_RECEIVER == errorCode){
// 转发消息失败:非法用户
}else if(RKCloudChatErrorCode. CHAT_MMS_MMS_FILESIZE_EXCEED == errorCode){
// 转发消息失败:文件大小超出限制
}else if(RKCloudChatErrorCode. CHAT_GROUP_NOT_EXIST == errorCode){
// 转发消息失败:群号码不存在
}else if(RKCloudChatErrorCode. CHAT_GROUP_USER_NOT_EXIST == errorCode){
// 转发消息失败:非群用户
// 转发消息失败
// 完善转发消息失败后的处理
重新发送失败的消息,对发送失败的消息进行重新发送的操作
reSendChatMsg()
msgSerialNum
消息的唯一ID
requestCallBack
RKCloudChatRequestCallBack对象
发送完消息之后的回调接口,不允许为null
RKCloudChatMessageManager.getInstance(appContext).reSendChatMsg(msgSerialNum, new RKCloudChatRequestCallBack() {
public void onSuccess(Object groupId) {
// 完善重新发送失败的消息成功后的处理
public void onProgress(int progress) {
// 完善发送消息时进度值(0-100)的上报处理
public void onFailed(int errorCode) {
if(RKCloudChatErrorCode.RK_SDK_UNINIT == errorCode){
// 重新发送失败的消息失败:SDK未初始化
}else if(RKCloudChatErrorCode.RK_PARAMS_ERROR == errorCode){
// 重新发送失败的消息失败:参数错误
}else if(RKCloudChatErrorCode.RK_NOT_NETWORK == errorCode){
// 重新发送失败的消息失败:无网络
}else if(RKCloudChatErrorCode.ILLEGAL_RECEIVER == errorCode){
// 重新发送失败的消息失败:非法用户
}else if(RKCloudChatErrorCode. CHAT_MMS_MMS_FILESIZE_EXCEED == errorCode){
// 重新发送失败的消息失败:文件大小超出限制
}else if(RKCloudChatErrorCode. CHAT_GROUP_NOT_EXIST == errorCode){
// 重新发送失败的消息失败:群号码不存在
}else if(RKCloudChatErrorCode. CHAT_GROUP_USER_NOT_EXIST == errorCode){
// 重新发送失败的消息失败:非群用户
// 重新发送失败的消息失败
// 完善重新发送失败的消息失败后的处理
下载缩略图,收到消息后,若有图片,应去下载图片的缩略图
downThumbImage()
msgSerialNum
消息的唯一ID
requestCallBack
RKCloudChatRequestCallBack对象
下载之后的回调接口,不允许为null
RKCloudChatMessageManager.getInstance(appContext).downThumbImage(msgSerialNum, new RKCloudChatRequestCallBack() {
public void onSuccess(Object groupId) {
// 完善下载缩略图成功后的处理
public void onProgress(int progress) {
// 完善下载时进度值(0-100)的上报处理
public void onFailed(int errorCode) {
if(RKCloudChatErrorCode.RK_SDK_UNINIT == errorCode){
// 下载缩略图失败:SDK未初始化
}else if(RKCloudChatErrorCode.RK_PARAMS_ERROR == errorCode){
// 下载缩略图失败:参数错误
}else if(RKCloudChatErrorCode.RK_NOT_NETWORK == errorCode){
// 下载缩略图失败:无网络
}else if(RKCloudChatErrorCode. CHAT_MMS_MMS_NOTEXIST_IN_SERVER == errorCode){
// 下载缩略图失败:MMS消息在服务器端不存在
// 下载缩略图失败
// 完善下载缩略图失败后的处理
下载媒体消息
downMediaFile()
msgSerialNum
消息的唯一ID
requestCallBack
RKCloudChatRequestCallBack对象
下载之后的回调接口,不允许为null
RKCloudChatMessageManager.getInstance(appContext).downMediaFile(msgSerialNum, new RKCloudChatRequestCallBack(){
public void onSuccess(Object groupId) {
// 完善下载媒体消息成功后的处理
public void onProgress(int progress) {
// 完善下载时进度值(0-100)的上报处理
public void onFailed(int errorCode) {
if(RKCloudChatErrorCode.RK_SDK_UNINIT == errorCode){
// 下载媒体消息失败:SDK未初始化
}else if(RKCloudChatErrorCode.RK_PARAMS_ERROR == errorCode){
// 下载媒体消息失败:参数错误
}else if(RKCloudChatErrorCode.RK_NOT_NETWORK == errorCode){
// 下载媒体消息失败:无网络
}else if(RKCloudChatErrorCode. CHAT_MMS_MMS_NOTEXIST_IN_SERVER == errorCode){
// 下载媒体消息失败:MMS消息在服务器端不存在
// 下载媒体消息失败
// 完善下载媒体消息失败后的处理
云视互动即时通信SDK除了上面提到的有关会话和消息相关的接口外,还有其他辅助接口供应用APP使用,详细信息参见如下说明。
退出云视互动时请执行如下的方法完成取消初始化动作:
// 清除所有图片缓存RKCloudChatImageAsyncLoader.getInstance(appContext).removeAllImages();// 结束所有的UIRKCloudChatLogoutManager.getInstance(appContext).logout();// 退出即时通信SDKRKCloudChat.unInit();// 退出云视互动RKCloud.unInit();
收到新消息时是否在通知栏提醒、是否有声音或振动提示功能均是通过即时通信SDK提供的RKCloudChatConfigManager.java类进行读取和设置的。
声音提醒和振动提醒等均是在提供的UI资源中实现的,SDK层只记录设置的参数信息,实现相关提醒操作的类存放于rkchat包中的RKCloudChatMmsManager.java类,对应的方法名称为notifyNewReceivedMsg(),该方法中定义了通知显示的标题、内容和图标(名称为rkcloud_chat_ic_newmsg.png),应用APP可以根据需要进行对应的修改。
提醒功能只是针对聊天消息说的,对于推送消息是否提醒通知由应用APP自己定义,其通知的实现机制可以参考notifyNewReceivedMsg()。
以下是即时通信SDK中RKCloudChatConfigManager.java类提供的主要方法,并根据是否通知、是否声音提醒、是否振动提醒分类说明。
// 收到新消息时是否在通知栏提醒,返回值为boolean,true表示显示,false表示不显示
getNotificationEnable()
// 设置新消息在通知栏的提醒方式
setNotificationEnable(true | false)
// 收到新消息时是否有声音提醒,返回值为boolean,true表示提醒,false表示不提醒
getNoticeBySound()
// 设置新消息的声音提醒方式
setNoticeBySound(true | false)
// 声音提醒时,通过如下方法获取提醒使用的声音,如果未设置则选用系统默认铃音
getNotifyRingUri()
// 设置声音提醒时使用的音乐
setNotifyRingUri(musicUri)
通知栏提示关闭时声音提醒不起作用。
// 收到新消息时是否有振动提醒,返回值为boolean,true表示提醒,false表示不提醒
getNoticedByVibrate()
// 设置新消息的振动提醒方式
setNoticedByVibrate(true | false)
通知栏提示关闭时振动提醒不起作用。
以下提供了会话相关的接口,应用APP可根据自己的需要进行调用。
调用方法为:RKCloudChatMessageManager.getInstance(context).XXX(此处为需要调用的相关方法名,方法如下)。
返回值类型
getMediaMmsMaxSize()
&获取媒体消息中附件的大小限制
单位:字节
getTextMaxLength()
获取消息中文本内容的最大长度限制
单位:字符
getAudioMaxDuration()
获取录制语音消息的最大时长
getVideoMaxDuration()
获取录制视频消息的最大时长
getMaxNumOfCreateGroups()
获取应用APP中登录用户可创建的群的最大个数
getMaxNumOfGroupUsers()
获取群内成员人数上限
clearChatsAndMsgs()
delFile:是否删除媒体消息文件
false:不删除,默认值
清除所有会话及会话相关的聊天内容(该方法请谨慎使用)
queryAllGroups()
List&RKCloudChatBaseChat&
获取用户所在的群,包含自己创建的和参与的群
按照群的创建时间降序排列
queryAllMyCreatedGroups()
List&RKCloudChatBaseChat&
获取当前用户创建的所有群
按照群的创建时间降序排列
queryAllMyAttendedGroups()
List&RKCloudChatBaseChat&
获取当前用户参与的群
按照群的创建时间降序排列
queryChat()
RKCloudChatBaseChat
chatId: 会话ID,单聊时为对端在云视互动中的账号,群聊时为群ID
获取单个会话的基本信息,不包含会话的最后一条消息对象
setChatIsTop()
chatId: 会话ID,单聊时为对端在云视互动中的账号,群聊时为群ID
isTop: 是否置顶
false:不置顶
设置会话是否置顶
setRemindStatusInChat()
chatId:会话ID,单聊时为对端在云视互动中的账号,群聊时为群ID
isRemind: 是否提醒
true:提醒
false:不提醒
设置会话是否提醒
modifyGroupRemark()
groupId: String 群ID
remark: 群的备注信息,长度为30个字符以内
修改群备注信息
只在客户端显示,未同步到服务器端
updateBackgroundImageInChat()
chatId: 会话ID,单聊时为对端在云视互动中的账号,群聊时为群ID
imagePath: 背景图片路径,为空时表示清除聊天背景
更新会话中的聊天背景
deleteChat()
chatId: 会话ID,单聊时为对端在云视互动中的账号,群聊时为群ID
delFile: 是否删除该会话下面的媒体消息文件
false:不删除,默认值
删除单个会话(包括会话中的消息等内容)
queryGroupUsers()
List&String&
groupId: 群ID
获取群内所有成员在云视互动中的账号(包含当前登录用户的账号)
第一个账号为当前登录账号;第二个账号为群主账号(如果当前登录账号为群主时)
getDraft()
chatId: 会话ID,单聊时为对端在云视互动中的账号,群聊时为群ID
获取草稿箱内容
saveDraft()
chatId: 会话ID,单聊时为对端在云视互动中的账号,群聊时为群ID
content: 草稿内容
保存草稿箱内容
以下提供了一些消息相关的接口,用户可根据自己的需要来调用。
调用方法为:RKCloudChatMessageManager.getInstance(context).XXX(此处为需要调用接口的相关方法名,接口如下)。
返回值类型
getAllUnReadMsgsCount()
获取所有会话中的未读消息条数总和
queryAllChats()
List&RKCloudChatBaseChat&对象
获取所有会话信息,包含每个会话中的未读条数、每个会话的最后一条消息对象等
优先显示置顶会话(按照置顶时间降序排列),非置顶会话时按照会话中最后一条消息产生时间降序排列
updateMsgsReadedInChat()
chatId: 会话ID,单聊时为对端在云视互动中的账号,群聊时为群ID
更新会话中的消息全部为已读
getLeastMsgIdOfUnreadMsgs()
chatId: 会话ID,单聊时为对端在云视互动中的账号,群聊时为群ID
unreadcnt: 未读消息条数
获取会话中指定未读条数的最小的消息ID值
queryLocalChatMsgs()
List&RKCloudChatBaseMessage&对象
chatId: 会话Id,单聊时为对端在云视互动中的账号,群聊时为群ID
minMsgCreasingId: 终端数据库中已产生消息的自增ID值
获取会话在终端存储的消息,并且获取消息的自增ID值均&=minMsgCreasingId
消息列表按照消息在终端的插入时间升序排列
queryLocalChatMsgs()
List&RKCloudChatBaseMessage&对象
chatId: 会话ID,单聊时为对端在云视互动中的账号,群聊时为群ID
limit: 获取的消息条数
获取会话在终端存储的消息,并且按照消息插入终端的时间降序排列后取出前面limit条的消息内容
消息列表按照消息在终端的插入时间升序排列
queryLocalHistoryChatMsgs()
List&RKCloudChatBaseMessage&对象
chatId: 会话Id,单聊时为对端在云视互动中的账号,群聊时为群ID
maxMsgCreasingId: 终端数据库中已产生消息的自增ID值
limit: 获取的消息条数
获取会话在终端存储的历史消息,并且取出消息的自增ID值均&maxMsgCreasingId,在此基础上按照消息入库时间降序排列后取出前面limit条的消息
消息列表按照消息在终端的插入时间升序排列
queryAllMsgsByType()
List&RKCloudChatBaseMessage&对象
chatId: 会话ID,单聊时为对端在云视互动中的账号,群聊时为群ID
obj: 子类中的class对象
获取会话中指定类型的所有消息
按照消息在终端的入库时间升序排列
queryChatMsg()
RKCloudChatBaseMessage
msgSerialNum: 消息的唯一编号
查询单条消息
addLocalMsg()
msgObj: 本地消息对象
chatClassObj: Class对象
向终端插入消息
updateMsgStatusHasReaded()
msgSerialNum: 消息编号
更新指定的消息状态为已读
deleteAllMsgsInChat()
chatId: 会话ID,单聊时为对端在云视互动中的账号,群聊时为群ID delFile: 是否删除该会话下面的媒体消息文件
false:不删除& 默认是false
删除会话中的所有消息,但会话保留
deleteChatMsg()
chatId: 会话ID,单聊时为对端在云视互动中的账号,群聊时为群ID
msgSerialNum: 消息的唯一编号delFile: 是否删除该消息对应的媒体消息文件
false:不删除& 默认是false
删除单条消息
deleteChatMsgs()
chatId: 会话ID,单聊时为对端在云视互动中的账号,群聊时为群ID
msgSerialNums: 消息编号的集合
delFile: 是否删除该消息对应的媒体消息文件
false:不删除& 默认是false
批量删除消息
云视互动SDK不保存应用APP的好户及其好户关系,与SDK交互时均是通过云视互动账号进行关联的,但为了在会话页面、聊天页面、或是在收到的群消息内容时显示对应APP的好户名称和头像,即时通信SDK提供了RKCloudChatContactCallBack.java类来获取应用APP中的好户信息,并以回调的机制获取应用APP中的用户信息。
请在SDK初始化成功后注册对应的回调接口,不注册时其账号显示的名称均为云视互动账号,头像均为默认头像,注册回调的示例代码如下所示:
RKCloudChatMessageManager.getInstance(appContext).registerRKCloudContactCallBack(new RKCloudChatContactCallBack() {
@Override public Map&String, String& getContactNames(List&String& accounts) {
// 完善获取多个联系人显示名称的逻辑,返回值中key为云视互动账号,value为联系人显示的名称
@Override public String getContactName(String account) {
// 完善获取联系人显示名称的逻辑
@Override public Map&String, String& getContactHeaderPhotos(List&String& accounts) {
// 完善获取多个联系人头像路径的逻辑,返回值中key为云视互动账号,value为联系人的头像路径
@Override public String getContactHeaderPhoto(String account) {
// 完善获取联系人头像路径的逻辑
即时通信SDK中提供的资源包rkchat中RKCloudChatContactManager.java类实现了该接口,并且提供了会话、消息等列表使用到的方法名称,请应用APP完成TODO地方的代码。
rkchat包实现了云视互动即时通信用到的相关页面及逻辑处理,以下是对提供UI页面的具体说明:
RKCloudChatAddressListActivity.java
好友通讯录页面
按照字母索引进行查询显示,该页面可以作为应用APP中的独立Tab项显示,是否使用由应用APP自己决定
RKCloudChatGroupListActivity.java
列出当前用户创建的和参与的群聊,应用APP可根据自己的需要进行调整
RKCloudChatSelectUsersActivity.java
选择成员列表页面
该页面可选择单个或多个成员,供创建会话或邀请成员时使用,对于已存在的成员则禁止选中操作。
选中一个成员时表示单聊会话;选中多个成员时表示发起群聊会话
RKCloudChatListFragment.java
会话列表页面
Fragment的子类,可以嵌入到FragmentActivity中做为独立的Tab项显示,该页面列出登录用户参与的所有会话,包括单聊和群聊
RKCloudChatListActivity.java
会话列表页面
Activity的子类,可以作为应用APP中的独立Tab项显示,该页面列出登录用户参与的所有会话,包括单聊和群聊。
RKCloudChatMsgActivity.java
消息聊天页面
展现该会话中已记录的消息,如已发送或已接收的文本、图片、语音、附件等类型的消息
RKCloudChatGroupManageActivity.java
群会话管理页面
主要针对群聊会话进行对应内容的设置
RKCloudChatSingleManageActivity.java
单聊会话管理页面
主要针对单聊会话进行对应内容的设置
RKCloudChatSelectFileActivity.java
选择附件页面
列出手机当前所有的文件信息,并以附件的形式发送
RKCloudChatViewImageActivity.java
查看图片页面
查看对应会话中已发送或已接收的图片
RKCloudChatForwardActivity.java
转发消息页面
内部转发消息或分享第三方图片消息时选择接收方会话时使用
RKCloudChatSetMsgBgActivity.java
设置聊天背景页面
设置对应会话的聊天页面使用的背景图片,也可以取消聊天背景
RKCloudChatReceiveThirdInfoActivity.java
接收外部图片分享页面
用于处理接收第三方分享图片消息时使用的页面
云视互动即时通信UI Demo的rkchat包中只提供了简单的表情图片,如果应用APP想要扩展更多的表情,请按照如下步骤完成:
修改文件RKCloudChatEmojiRes.java:该文件所在目录为com/rongkecloud/chat/demo/entity/,该文件中定义了表情所在的原始图片、别名和正则表达式,修改时请保持一一对应关系。
应用APP想要在消息聊天页面扩展更多功能时,其操作步骤如下:
修改文件RKCloudChatMsgAttachItem.java:该文件所在目录为com/rongkecloud/chat/demo/entity/,请根据需要扩展该文件中对ATTACH_TYPE的类型定义;
修改文件RKCloudChatMsgActivity.java:该文件所在目录为com.rongkecloud.chat.demo.ui/,文件中的initAttachZone()方法包含了对更多功能的展示及其操作,请根据需要进行对应的扩展。
rkchat包RKCloudChatMmsManager.java类是作为已提供资源和SDK间的桥梁角色存在的,完成了即时通信Demo和SDK间的通信。
该类包含了即时通信UI及操作中使用到的内容,如:消息的发送、接收、读取、通知等方法。除上述涉及到的方法外,现针对部分方法做说明,具体如下:
enterChatListActivity()
跳转到会话列表页面
enterMsgListActivity()
跳转到聊天列表页面
sendMmsAndOpenMsgUi()
发送消息并打开聊天列表页面
setUnNeedNotifyChatId()
设置不需要向通知栏中提醒收到新消息的会话ID。当进入消息列表时在onResume()中设置对应的会话ID值;当黑屏或是离开时在onPause()中设置会话ID为null
queryAllChats()
查询用户已经有过消息交互的会话信息
queryMmsList()
查询单个会话中的消息记录
queryHistoryMmsList()
查询单个会话中的历史消息记录扩展聊天页面表情图标
云视互动即时通信SDK中定义的错误码值以2000开头,类名称为RKCloudChatErrorCode.java,包含的值如下:
公共错误码
RK_SUCCESS
RK_FAILURE
RK_NOT_NETWORK
RK_PARAMS_ERROR
请求参数错误
RK_SDK_UNINIT
Base Sdk还未初始化成功
RK_INVALID_USER
非法用户,即非云视互动用户或是该用户从未登录使用过
RK_NONSUPPORT_AVCALL
不支持音视频通话
RK_NONSUPPORT_MEETING
不支持多人语音
RK_EXIST_AV_CALLING
当前有正在进行的音视频通话
RK_EXIST_MEETINGING
当前有正在进行的多人会议
RK_BEING_EXECUTION
请求正在进行中
Chat错误码
CHAT_MMS_NOTEXIST
消息不存在
CHAT_MMS_DURATION_EXCEED_LIMIT
语音或视频文件的时长超出限制
CHAT_MMS_SIZE_EXCEED_LIMIT
文件大小超出限制
CHAT_MMS_NONSUPPORT
不支持发送的消息类型
CHAT_MMS_CANNOT_SEND_OWN
禁止发消息给自己
CHAT_GROUP_NOT_EXIST
群号码不存在
CHAT_GROUP_USER_NOT_EXIST
CHAT_GROUP_COUNT_EXCEED_LIMIT
群个数已达上限
CHAT_GROUP_USER_NUMBER_EXCEED_LIMIT
群用户人数已达上限
CHAT_GROUP_UNAUTH_MODIFYINVITE
群内非群主成员禁止修改邀请或取消邀请的权限
CHAT_GROUP_UNAUTH_INVITE
无邀请权限
CHAT_GROUP_UNAUTH_KICKUSER
无踢人操作
公共错误码可以通过RKCloudChatErrorCode.公共错误码名称 调用使用,也可以通过RKCloudErrorCode.公共错误码名称 调用使用。
技术客服QQ群:
Copyright (C)
西安融科通信技术有限公司 All Rights Reserved. 陕ICP备号

我要回帖

更多关于 环信即时通讯集成 的文章

 

随机推荐