使用LeanCloud进行即时通信

  • 目录

1.下载开源项目LeanCloudChatKit-Android

点击链接部分进行下载,或者直接clone命令下载(不知为何失败了,所以个人还是下载)

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 "http://mvn.leancloud.cn/nexus/content/repositories/releases"
        }
    }
    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 "http://mvn.leancloud.cn/nexus/content/repositories/releases"
        }
    }
}

这样就基本配置就完成了。

application配置
SDKInitializer.initialize(getApplicationContext());

// 初始化参数依次为 this, AppId, AppKey

    LCChatKit.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<String> 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<AVIMMessage> messageList, AVIMException e) {
                if (null == e && messageList.size()>0) {
                    message = messageList.get(messageList.size()-1);
                    LCIMProfileCache.getInstance().getCachedUser(message.getFrom(), new AVCallback<LCChatKitUser>() {
                        @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<LCChatKitUser>() {
            @Override
            protected void internalDone0(LCChatKitUser userProfile, AVException e) {
                txtReceiveMsg.setText(userProfile.getUserName()+":"+message.getContent());

            }}
        );
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值