集成融云直播聊天室(官方集成以及自我总结)

近期做直播,当然,直播当然就要做到聊天室,聊天室选择的是融云聊天直播室

首先 官方集成 如下:


IMLib SDK 集成说明

  1. 下载 IMLib SDK:点击下载

  2. SDK 目录结构说明:

  3. libs 目录 - native so 库,目前支持 armeabi(含 v7 及 64 位),以及 x86 平台。如有其它平台需求,请联系客服。

  4. res 目录- 配置及资源文件。
  5. build.gradle - gradle 配置相关,可再此定义编译版本等信息。
  6. AndroidManifest.xml - SDK 配置文件,可查看 SDK 所需的安卓权限等信息。

  7. 导入 IMLib SDK:

  8. 将下载的 IMLib 文件夹拷贝到工程根目录,为方便使用可更名为 imlib。

  9. 在 settings.gradle 里加入 imlib 库引用,如:

      include ':app', ':imlib'
    
  10. 在主工程 build.gradle 文件的 dependencies 中加入 imlib 库引用,如:

      compile project(':imlib')
    

至此 IMLib SDK 集成完毕,可在主工程里直接调用其接口。

IMLib SDK 使用说明

  1. SDK 初始化:

    在使用 IMLib 接口前,需要对其做初始化操作,只需调一次即可。建议在继承 Application 类的 onCreate 方法中调用。 接口说明如下:

     /**
     * @param context 传入 Application 类的 Context。
     * @param appKey  融云注册应用的 AppKey。
     */
     public static void init(Context context, String appKey);
    
  2. 注册消息监听:

    在连接融云服务器前,需要先注册消息接收监听。这里需要注意,如果在连接之后才注册监听,可能会有消息遗漏的情况。可以使用如下接口注册:

     /**
     * 设置接收消息事件的监听器。所有接收到的消息、通知、状态都经由此处设置的监听器处理。包括私聊消息、讨论组消息、群组消息、聊天室消息以及各种状态。
     * 注意:如果调用此接口的 Activity 被释放回收,将无法收到事件回调。
     *
     * @param listener 接收消息的监听器。
     */
     public static void setOnReceiveMessageListener(final OnReceiveMessageListener listener);
    
  3. 获取 Token:

    Token 即用户令牌,相当于您 APP 上当前用户连接融云的身份凭证。

    在您连接融云服务器之前,您需要请求您的 App Server,您的 App Server 通过 Server API 获取 Token 并返回给您的客户端,客户端获取到这个 Token 即可进入下一步连接融云服务器。

    为什么必须在服务器端请求 Token,客户端不提供获取 Token 的接口?

    因为获取 Token 时需要提供 App Key 和 App Secret 。如果在客户端请求 Token,假如您的 App 代码一旦被反编译,则会导致您的 App Key 和 App Secret 泄露。所以,务必在您的服务器端获取 Token。

    我们在开发者控制台提供了 API 调试的功能,在开发初期阶段,您可以通过其中获取 Token 功能,手动获取 Token 进行测试。

  4. 登录连接:

    当成功得到 Token 后,可以调用 connect 接口与融云服务器进行连接。

     /**
     * 连接服务器,在整个应用程序全局,只需要调用一次,需在 init 之后调用。
     * 如果调用此接口遇到连接失败,SDK 会自动启动重连机制进行最多 10 次重连,分别是 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 秒后。
     * 在这之后如果仍没有连接成功,还会在当检测到设备网络状态变化时再次进行重连。
     *
     * @param token    从服务端获取的用户身份令牌(Token)。
     * @param callback 连接回调。
     * @return RongIMClient IM 客户端核心类的实例。
     */
     public static RongIMClient connect(final String token, final ConnectCallback callback);
    
     当回调 onSuccess 代表连接成功;若回调 onTokenIncorrect 很可能是 Token 跟 AppKey 不匹配,可以去`官网-我的应用-运营工具-用户管理`中检查确认;若返回 onError 请根据错误码进行检查。
    
  5. 加入聊天室:

    登录成功后,当用户点击房间进入直播聊天室需要调用如下接口,打开消息通道:

     /**
     * 加入聊天室。如果聊天室不存在,sdk 会创建聊天室并加入,如果已存在,则直接加入。加入聊天室时,可以选择拉取聊天室消息数目。
     *
     * @param chatroomId      聊天室 Id。
     * @param defMessageCount 进入聊天室拉取消息数目,-1 时不拉取任何消息,0 时拉取 10 条消息,最多只能拉取 50 条。
     * @param callback        状态回调。
     */
       public void joinChatRoom(final String chatroomId, final int defMessageCount, final OperationCallback callback);
    

    或:

     /**
     * 加入已存在的聊天室。如果聊天室不存在,则加入失败。加入聊天室时,可以选择拉取聊天室消息数目。
     *
     * @param chatroomId      聊天室 Id。
     * @param defMessageCount 进入聊天室拉取消息数目,-1 时不拉取任何消息,0 时拉取 10 条消息,最多只能拉取 50 条。
     * @param callback        状态回调。
     */
       public void joinExistChatRoom(final String chatroomId, final int defMessageCount, final OperationCallback callback);
    

    如果聊天室不存在则返回错误码 23410,若人数超限则返回错误码 23411。

  6. 发送消息:

     /**
     * 发送消息。
     *
     * @param message     将要发送的消息体。
     * @param pushContent 当下发 push 消息时,在通知栏里会显示这个字段。聊天室消息一般不需要推送,可设置为 null。
     * @param pushData    push 附加信息。聊天室消息一般不需要推送,可设置为 null。  
     * @param callback    发送消息的回调,参考 IRongCallback.ISendMessageCallback。
     */
       public void sendMessage(final Message message, final String pushContent, final String pushData, final IRongCallback.ISendMessageCallback callback);
    
  7. 用户信息显示:

    用户信息由 UserInfo 类来承载,包含用户 id、昵称、头像三部分。聊天室由于用户流动性大,建议将用户信息写入发送的消息体中。调用 MessageContent 的接口:

     /**
     * 将用户信息写入消息体内
     *
     * @param info 要写入的用户信息。
     */
     public void setUserInfo(UserInfo info);
    

    当收到信息后,通过调用 getUserInfo,得到 UserInfo 类,进而得到发送者的信息。

     /**
     * 获取消息体内的用户信息。
     */
     public UserInfo getUserInfo()
    
  8. 退出聊天室:

    当用户退出房间,需要调用如下接口:

     /**
     * 退出聊天室。
     *
     * @param chatroomId 聊天室 Id。
     * @param callback   状态回调。
     */
     public void quitChatRoom(final String chatroomId, final OperationCallback callback);
    
  9. 断开连接:

    通常直播聊天室应用,退出后不需要接受离线消息。调用下面接口即可:

     /**
     * 断开与融云服务器的连接,并且不再接收 Push 消息。
     * 若想断开连接后仍然接受 Push 消息,可以调用 disconnect()
     */
     public void disconnect();


下面是集成当中遇到的问题:

首先创立连接:我们需要把返回的ID保存下来

public void onSuccess(final String userid) {

    RongIMClient.getInstance().joinChatRoom("1", 5, new RongIMClient.OperationCallback() {
        @Override
        public void onSuccess() {
            Log.d("聊天室进入", "聊天室进入");
            id = userid;
        }

        @Override
        public void onError(RongIMClient.ErrorCode errorCode) {
            Log.d("聊天室进入", "聊天室进入" + errorCode);
        }
    });
    Log.d("LoginActivity", "--onSuccess---" + userid);
}

之后,保存下来,我们需要在发送消息的时候用到,这个时候我们需要给我们发的消息设置昵称或者其他

设置这边我们会遇到一些问题

 final TextMessage content = TextMessage.obtain(chattext.getText().toString());
                    userInfos = new UserInfo(id, "超级奥特曼", null);
                    content.setUserInfo(userInfos);
                    final io.rong.imlib.model.Message msg = io.rong.imlib.model.Message.obtain("1", Conversation.ConversationType.CHATROOM, content);


                    RongIMClient.getInstance().sendMessage(msg, null, null, new RongIMClient.SendMessageCallback() {
                        @Override
                        public void onSuccess(Integer integer) {
                            Log.d("", "发送成功:" + chattext.getText().toString());

                        }

                        @Override
                        public void onError(Integer integer, RongIMClient.ErrorCode errorCode) {
                            Log.d("", "发送了失败" + errorCode);
                        }
                    }, new RongIMClient.ResultCallback<io.rong.imlib.model.Message>() {
                        @Override
                        public void onSuccess(io.rong.imlib.model.Message message) {
                            Log.d("", "发送成功2:" + chattext.getText().toString());
                            popupWindowchat.dismiss();

                            userinfo.add(userInfos);
                            content_list.add(chattext.getText().toString().trim());
                            chattext.setText(null);
                            android.os.Message s = new android.os.Message();
                            s.what = 1;
                            myHandler.sendMessage(s);
                        }

                        @Override
                        public void onError(RongIMClient.ErrorCode e) {
                            Log.d("", "发送了失败" + e);
                            popupWindowchat.dismiss();
                        }
                    });
//
                }
这里面可能大家遇到头疼的就是设置名字了 ,研究了两个钟,才设置好,实在太菜了~

下面我们就是要做接收~

 /**
         * 收到消息的处理。
         *
         * @param message 收到的消息实体。
         * @param left    剩余未拉取消息数目。
         * @return
         */
        @Override
        public boolean onReceived(io.rong.imlib.model.Message message, int left) {
            //开发者根据自己需求自行处理
//            Toast.makeText(MainActivity.this,"消息"+message,Toast.LENGTH_LONG).show();
            // 此处输出判断是否是文字消息,并输出,其他消息同理。

            if (message.getContent() instanceof TextMessage) {
                final TextMessage textMessage = (TextMessage) message.getContent();
                Log.d("onReceived", "接收到的消息: " + textMessage.getContent() + textMessage.getUserInfo().getName());
                content_list.add(textMessage.getContent());
                userinfo.add(textMessage.getUserInfo());

                android.os.Message s = new android.os.Message();
                s.what = 1;
                myHandler.sendMessage(s);

            }
注意如何解析消息

另外,我们自己发的消息自己是不能收到的,必须手动加到list里面,才能在我们的页面里面显示出来~

效果图


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值