浏览 SDKs · Android
SDKsAndroid

事件概览

集中设置 Android SDK listener,并按业务领域分发连接、同步和数据事件。

复制

OpenIM Android SDK 通过 listener 推送连接、同步、用户、好友、会话、群组、消息和通话变化。各 manager 的 listener 设置方法采用替换语义,后一次设置会覆盖此前实例。因此应在应用级事件中心组合所有回调,并在登录前集中设置一次,不要在 Activity、Fragment、Compose 页面或功能组件中重复设置。

连接 listener 是例外:OnConnListenerinitSDK() 时传入,其完整处理见认证与管理登录会话

集中设置 listener

下面的注册入口使用应用级稳定 listener。每个 listener 内应包含对应领域的全部回调;具体状态合并逻辑保留在事件归属页面。

public final class OpenIMEventCenter {
    private final OpenIMClient client = OpenIMClient.getInstance();

    private final OnUserListener userListener = buildUserListener();
    private final OnFriendshipListener friendshipListener = buildFriendshipListener();
    private final OnConversationListener conversationListener = buildConversationListener();
    private final OnGroupListener groupListener = buildGroupListener();
    private final OnAdvanceMsgListener messageListener = buildMessageListener();
    private final OnCustomBusinessListener businessListener = buildBusinessListener();
    private final OnSignalingListener signalingListener = buildSignalingListener();

    public void registerBeforeLogin() {
        client.userInfoManager.setOnUserListener(userListener);
        client.friendshipManager.setOnFriendshipListener(friendshipListener);
        client.conversationManager.setOnConversationListener(conversationListener);
        client.groupManager.setOnGroupListener(groupListener);
        client.messageManager.setAdvancedMsgListener(messageListener);
        client.messageManager.setCustomBusinessListener(businessListener);
        client.signalingManager.setSignalingListener(signalingListener);
    }
}

Android SDK 没有公开的 remove 或 unset 方法。退出登录、切换账号或销毁应用状态层时,应停止向旧账号状态和已销毁页面分发回调;重新登录前,用新账号对应的完整 listener 组合覆盖设置。

事件归属

事件范围合并标识完整处理页面
连接、Token 和强制下线当前 SDK 实例与登录用户认证与管理登录会话
当前用户资料userID更新当前用户资料
在线状态userID订阅用户在线状态
好友关系与资料userID分页获取好友列表
好友申请fromUserID:toUserID获取收到的好友申请
黑名单userID拉黑用户移出黑名单
会话列表conversationID获取会话列表
总未读数当前登录用户获取消息总未读数
输入状态conversationID:userID更新输入状态
群资料、成员和群申请groupIDgroupID:userID群组概览
新消息、离线消息和在线消息clientMsgID,必要时结合 conversationID接收消息
消息撤回、删除、修改和置顶clientMsgID,必要时结合 conversationID消息概览
单聊已读回执conversationID:clientMsgID标记会话已读
自定义业务消息业务协议中的幂等 ID接收自定义业务消息
通话roomID,参与者结合用户 ID处理通话事件
通话自定义信令roomID:eventID发送自定义信令
SDK 数据同步当前 SDK 实例与登录用户本页“监听初始化同步”

查询 API 建立状态快照,listener 合并后续增量,必要时再重新查询校准。API 成功 callback、事件到达和重新查询结果是三个独立阶段,不能相互替代。

监听初始化同步

同步生命周期属于应用级 OnConversationListener。该 listener 还应包含会话列表、未读数和输入状态回调;下面只展示本页负责的同步处理逻辑:

private OnConversationListener buildConversationListener() {
    return new OnConversationListener() {
        @Override
        public void onNewConversation(List<ConversationInfo> conversations) {
            mergeNewConversations(conversations);
        }

        @Override
        public void onConversationChanged(List<ConversationInfo> conversations) {
            mergeChangedConversations(conversations);
        }

        @Override
        public void onTotalUnreadMessageCountChanged(int total) {
            updateTotalUnreadCount(total);
        }

        @Override
        public void onConversationUserInputStatusChanged(String payload) {
            handleInputStatus(payload);
        }

        @Override
        public void onSyncServerStart(boolean reinstall) {
            setSyncState("syncing", 0, reinstall);
        }

        @Override
        public void onSyncServerProgress(long progress) {
            setSyncProgress(progress);
        }

        @Override
        public void onSyncServerFinish(boolean reinstall) {
            setSyncState("ready", 100, reinstall);
            reloadVisibleSnapshots();
        }

        @Override
        public void onSyncServerFailed(boolean reinstall) {
            setSyncState("failed", 0, reinstall);
        }
    };
}

reinstalltrue 表示本地数据需要按重建场景处理,通常应展示更完整的同步状态,并避免在同步完成前使用旧缓存。onSyncServerProgress 提供当前进度;完成后重新查询当前界面所需快照,失败时记录错误并等待重试或连接恢复。

本页是 onSyncServerStartonSyncServerProgressonSyncServerFinishonSyncServerFailed 的完整处理归属页。同步状态没有业务实体合并键,应按当前 OpenIMClient 单例和登录用户隔离。