融云SDK自定义聚合消息中心出坑实例

前言

  • 各位做APP社交模块的兄弟,你们还好吗?

如果项目对社交的需求不强烈的话,我们使用融云的IMKit自带的聊天和消息中心代码毫无压力,但是如果消息中心有其他的需求的话。

比如

  • 其他模块的消息聚合到消息中心。(我的项目主要是这个)
  • 升级提示消息等等

那么融云自身的ConversationListActivity就不能满足需求了。所以我们需要自己来做消息的聚合,这样对消息的处理就要我们自己来了。所以我把在项目中的坑点记录一下。

坑点一 任意界面来消息需要发通知除了当前聊天界面

处理方式:在HomeApplication中读写mCurrentPrivateUserId


    //记录当前私聊的对方ID,用于判断来消息是否弹出提示
    private String mCurrentPrivateUserId = "";

    public String getCurrentPrivateUserId() {
        return mCurrentPrivateUserId;
    }

    public void setCurrentPrivateUserId(String id) {
        mCurrentPrivateUserId = id;
    }

坑点二 不同的人和多条消息需要不同的通知内容

这里就要构造新的通知内容,我坐了一个最简单的聚合,代码如下:

    //记录用户对应的消息条数,用于通知显示
    private Map<String, Integer> mMessageMap;
        public String getNotificationText(MsgInfo msgInfo) {
        //多个好友消息
        if (mMessageMap.size() > 1) {
            int userCount = mMessageMap.size();
            int count = 0;
            Iterator<Map.Entry<String, Integer>> iterator = mMessageMap.entrySet().iterator();
            while (iterator.hasNext()) {
                Map.Entry<String, Integer> entry = iterator.next();
                count += entry.getValue();
            }
            return userCount + "个好友给您发送了" + count + "条消息";
        } else {
            int count = mMessageMap.get(msgInfo.getPeerUserId());
            if (count > 1) {
                return "给您发送了" + count + "条消息";
            } else {
                return msgInfo.getMsgContent();
            }

        }
    }

坑点三 未内存缓存的用户消息数目不正确

调用融云提供的未读消息有点问题,修正如下:

        RongIM.getInstance().getUnreadCount(Conversation.ConversationType.PRIVATE,
                userId,
                new RongIMClient.ResultCallback<Integer>() {
                    @Override
                    public void onSuccess(Integer integer) {
                        if(integer > MAX_NUM) {
                            viewHolder.unReadCount.setText("···");
                        }else if(integer > 0){
                            viewHolder.unReadCount.setText(integer + "");
                        }else{
                            viewHolder.unReadCount.setText("1");
                            //融云获取用户信息是异步发消息从数据库去然后放入缓存列表中,
                            //未在融云缓存中的用户该接口无效
                            Message message = new Message();
                            message.what = 2;
                            message.obj = userId;
                            RongUserInfoManager.getInstance().handleMessage(message);
                        }
                    }

                    @Override
                    public void onError(RongIMClient.ErrorCode errorCode) {

                    }
                });

坑点四 网络异常情况下,进入单聊界面未及时重连

这里就简单了,在单聊界面onResume中判断重连

    @Override
    protected void onResume() {
        super.onResume();
        if (!HomeApplication.getInstance().isRongConnect()){
        //重连
        }
    }

    public boolean isRongConnect() {
        return isRongConnect;
    }

    public void setRongConnect(boolean connect) {
        isRongConnect = connect;
    }

    private class MyConnectionStatusListener implements RongIMClient.ConnectionStatusListener {

        @Override
        public void onChanged(ConnectionStatus connectionStatus) {

            switch (connectionStatus) {

                case CONNECTED://连接成功。
                    setRongConnect(true);
                    break;
                case DISCONNECTED://断开连接。
                    setRongConnect(false);
                    break;
                case CONNECTING://连接中。

                    break;
                case NETWORK_UNAVAILABLE://网络不可用。
                    setRongConnect(false);
                    break;
                case KICKED_OFFLINE_BY_OTHER_CLIENT://用户账户在其他设备登录,本机会被踢掉线
                    setRongConnect(false);
                    Toast.makeText(HomeApplication.getInstance(), "用户在其他设备登录", Toast.LENGTH_SHORT).show();
                    logout();
                    break;
            }
        }
    }
最后

使用融云目前来看还是很稳定的,点赞。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值