使用LeanCloud进行即时通信

网友投稿 638 2022-11-02

使用LeanCloud进行即时通信

使用LeanCloud进行即时通信

目录

​​-开源项目LeanCloudChatKit-Android​​​​简单配置​​

​​leanCloudChatKit-manifest配置​​​​工程的buildgradle​​​​application配置​​

​​代码接入即时聊天​​

​​创建会话​​​​获取首次消息​​​​接收实时消息​​

1.-开源项目​​LeanCloudChatKit-Android​​

git clone git@github.com:leancloud/LeanCloudChatKit-Android.git

-完之后发现又个模块叫leanCloudChatKit,把它作为module导入到自己的项目中。

2.简单配置

leanCloudChatKit-manifest配置

如果直接导入模块,使用其中的Activity类时可能会出问题,我这里有报错,各种不兼容AppCompat,如果你那里也存在这个问题,就需进行如下操作: 在manifest中为所有的leanCloudChatKit在Activity级别添加:

android:theme="@style/LCIMKitTheme"

权限这个项目没有适配,需要自己适配,这里测试就没做适配了。

工程的build.gradle

buildscript { repositories { jcenter() maven { url " } } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }}task clean(type: Delete) { delete rootProject.buildDir}allprojects { repositories { jcenter() //这里是 LeanCloud 的包仓库 maven { url "初始化参数依次为 this, AppId, AppKey

.getInstance().setProfileProvider(CustomUserProvider.getInstance()); AVOSCloud.setDebugLogEnabled(true); LCChatKit.getInstance().init(getApplicationContext(), APP_ID, APP_KEY); AVIMClient.setAutoOpen(false); PushService.setDefaultPushCallback(this, MainActivity2.class);

此处的app_id和app_key需要在leancloud官网控制台进行申请:​​leancloud官网​​​ 比较坑的是不能复制,需要抄写,这里要小心,不要抄错了。

代码接入即时聊天

LCChatKit.getInstance().open(editNo.getText().toString(), new AVIMClientCallback() { @Override public void done(AVIMClient avimClient, AVIMException e) { if (null == e) { Intent intent = new Intent(LoginActivity.this,MainActivity2.class); startActivity(intent); } else { Toast.makeText(LoginActivity.this, e.toString(), Toast.LENGTH_SHORT).show(); } } });

此段代码用于聊天功能登录,这里的id可以随意设置,但是注意,不同用户之间id不同。

然后这里要进行聊天了。聊天主要通过会话对象实现同一频道相互发送消息,这里有两种形式,一种是或去信息列表,参与聊天(多人用),一种是单人的,这里就介绍单人聊天。

创建会话

List chatIds = Arrays.asList("Tom"); LCChatKit.getInstance().getClient().createConversation( chatIds,"", null, false, true, new AVIMConversationCreatedCallback() { @Override public void done(AVIMConversation avimConversation, AVIMException e) { if (null != e) { Toast.makeText(MainActivity2.this, e.getMessage(), Toast.LENGTH_SHORT).show(); } else { MainActivity2.this.conversation = avimConversation; LCIMNotificationUtils.addTag(conversation.getConversationId()); initReceiveMsg(); LCIMConversationItemCache.getInstance().insertConversation(conversation.getConversationId()); } } });

这里需要注意:asList中需要的是userid,就是各个用户登录后的userid,这个userid是不需要包括自己的。只有创建会话以后,才能接受消息。

获取首次消息

private void initReceiveMsg() { conversation.queryMessages(new AVIMMessagesQueryCallback() { @Override public void done(List messageList, AVIMException e) { if (null == e && messageList.size()>0) { message = messageList.get(messageList.size()-1); LCIMProfileCache.getInstance().getCachedUser(message.getFrom(), new AVCallback() { @Override protected void internalDone0(LCChatKitUser userProfile, AVException e) { txtReceiveMsg.setText(userProfile.getUserName()+":"+message.getContent()); }} ); } } }); }

接收实时消息

EventBus进行注册反注册

使用EventBus,需要在onCreate的时候进行register,onDestroy的时候进行unregister:

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EventBus.getDefault().register(this); } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); }

然后在订阅者中进行接收处理

简单的说就是AVIMTypedMessageHandler负责接收推送过来的消息,然后通过总线模式回传给界面。

@Subscribe public void onEvent(LCIMIMTypeMessageEvent event){ if(event.conversation.getConversationId() != conversation.getConversationId()) return; message = event.message; LCIMProfileCache.getInstance().getCachedUser(message.getFrom(), new AVCallback() { @Override protected void internalDone0(LCChatKitUser userProfile, AVException e) { txtReceiveMsg.setText(userProfile.getUserName()+":"+message.getContent()); }} ); }

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python 12306 抢票小工具
下一篇:php 使用mysql数据库增删改查
相关文章

 发表评论

暂时没有评论,来抢沙发吧~