融云IM集成注意点

1.RongDatabaseDao 融云缓存数据库操作类

1.1融云SDK 本地数据库表
数据库名称
用户users
groups
群用户group-users
讨论组discussions
1.2数据库操作类
class RongDatabaseDao {
    private static final String TAG = "RongDatabaseDao";
    private RongUserCacheDatabaseHelper rongUserCacheDatabaseHelper;
    private SQLiteDatabase db;
    private final String usersTable = "users";
    private final String groupUsersTable = "group_users";
    private final String groupsTable = "groups";
    private final String discussionsTable = "discussions";
1.3 消息接收处理

拦截融云发送的消息类型,然后根据类型,是否处理该消息。

  1. 系统消息
  2. 好友添加通知
  3. 新消息通知
  4. Push信息
  5. IM 已默认处理的信息方式
RongIM.setOnReceiveMessageListener

2.Token 重连

//融云连接监听事件
RongIM.setConnectionStatusListener  
//融云Token 连接
RongIM.connect

//RongIMClient  主要类
RongIM.setConnectionStatusListener(new RongIMClient.ConnectionStatusListener() {
                @Override
                public void onChanged(ConnectionStatus status) {
                    if (status == ConnectionStatus.TOKEN_INCORRECT) {
                        SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);
                        final String cacheToken = sp.getString("loginToken", "");
                        if (!TextUtils.isEmpty(cacheToken)) {
                            RongIM.connect(cacheToken, SealAppContext.getInstance().getConnectCallback());
                        } else {
                            Log.e("seal", "token is empty, can not reconnect");
                        }
                    }
                }
            });
RongIM.connect(token, new RongIMClient.ConnectCallback() {
                @Override
                public void onTokenIncorrect() {
                }
                @Override
                public void onSuccess(String s) {
                }
                @Override
                public void onError(RongIMClient.ErrorCode errorCode) {
                }
            });

RongIMClient.ConnectionStatusListener

    public interface ConnectionStatusListener {
        void onChanged(RongIMClient.ConnectionStatusListener.ConnectionStatus var1);

        public static enum ConnectionStatus {
            NETWORK_UNAVAILABLE(-1, "Network is unavailable."),
            CONNECTED(0, "Connect Success."),
            CONNECTING(1, "Connecting"),
            DISCONNECTED(2, "Disconnected"),
            KICKED_OFFLINE_BY_OTHER_CLIENT(3, "Login on the other device, and be kicked offline."),
            TOKEN_INCORRECT(4, "Token incorrect."),
            SERVER_INVALID(5, "Server invalid."),
            CONN_USER_BLOCKED(6, "User blocked by admin");

            private int code;
            private String msg;

            private ConnectionStatus(int code, String msg) {
                this.code = code;
                this.msg = msg;
            }

            public int getValue() {
                return this.code;
            }

            public String getMessage() {
                return this.msg;
            }
        }
    }

3.用户信息和群消息

1.设置当前用户

RongContext.getInstance().setCurrentUserInfo(userInfo);

2.更新好友信息

RongIM.getInstance().refreshUserInfoCache(userInfo);

3.更新群信息

RongIM.getInstance().refreshGroupInfoCache(groupInfo);

4.监听事件

    /**
     * init 后就能设置的监听
     */
    private void initListener() {
        RongIM.setConversationBehaviorListener(this);//设置会话界面操作的监听器。
        RongIM.setConversationListBehaviorListener(this);
        RongIM.setConnectionStatusListener(this);
        //用户信息提供者
        RongIM.setUserInfoProvider(this, true);
        //群消息提供者
        RongIM.setGroupInfoProvider(this, true);
        //设置地理位置提供者,不用位置的同学可以注掉此行代码
        RongIM.setLocationProvider(this);
        setInputProvider();
        //setUserInfoEngineListener();//移到SealUserInfoManager
        setReadReceiptConversationType();
        RongIM.getInstance().enableNewComingMessageIcon(true);
        RongIM.getInstance().enableUnreadMessageIcon(true);
        RongIM.getInstance().setGroupMembersProvider(this);
        //群成员提供者
        //RongIM.setGroupUserInfoProvider(this, true);//seal app暂时未使用这种方式,目前使用UserInfoProvider
        BroadcastManager.getInstance(mContext).addAction(SealConst.EXIT, new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                quit(false);
            }
        });
        setMessageItemLongClickAction(mContext);
    }

5.主动获取群消息

        if (mConversationType.equals(Conversation.ConversationType.GROUP)) {
            getMemberList();//群时,后去用户列表
        }
       //缓存到 用户自定义数据库表中
         SealUserInfoManager.getInstance().addAppGroupMembers(data, mTargetId);

6.群成员ids 提供给融云

        //CallKit start 2
        RongCallKit.setGroupMemberProvider(new RongCallKit.GroupMembersProvider() {
            @Override
            public ArrayList<String> getMemberList(String groupId, final RongCallKit.OnGroupMembersResult result) {
                mCallMemberResult = result;
                getGroupMembersForCall();
                if (menberIds != null) {
                    mCallMemberResult.onGotMemberList(menberIds);
                }

                List<GroupMember> groupMembers = SealUserInfoManager.getInstance().getGroupMembers(groupId);
                ArrayList<String> Ids=new ArrayList<>();
                if (groupMembers != null) {
                    for (GroupMember item:groupMembers){
                        Ids.add(item.getUserId());
                    }
                }
                return Ids;
            }
        });

4.给陌生人发送消息

  1. 消息体 带有用户信息
 //设置当前用户信息
 RongIM.getInstance().setCurrentUserInfo(UserInfo userInfo)
 //设置消息体 允许携带当前用户信息
 RongIM.getInstance().setMessageAttachedUserInfo(true)

问题: setMessageAttachedUserInfo(true) 和 setUserInfoProvider最好不要同时使用,

RongIM.getInstance().setMessageAttachedUserInfo(true) 
//如果设置消息可携带用户消息,当携带的用户信息为空时,不会再回调
RongIM.setUserInfoProvider(this, true);// 用户信息提供者
导致会话列表UI 上不能正确显示  用户头像和昵称
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值