浏览 SDKs · Android
SDKsAndroid

事件概览

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

复制

OpenIM Android SDK 通过 listener 推送连接、同步、用户、好友、会话、群组、消息和通话变化。每个 manager 同时只保留一个 listener;再次设置会覆盖之前设置的 listener。因此应在应用中统一管理这些 listener,并在登录前设置一次,不要在 Activity、Fragment、Compose 页面或各功能组件中重复设置。

IM Server 连接状态由 OnConnListener 监听。它不通过 manager 单独设置,而是在调用 initSDK() 时传入;完整处理方式见认证与管理登录会话

集中设置 listener

以下示例在应用的统一位置注册各类 listener。每个 listener 只处理其所属业务的事件,例如消息、会话、好友和通话。

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

    private final OnUserListener userListener = new OnUserListener() {
        // 处理用户资料和在线状态变化
    };
    private final OnFriendshipListener friendshipListener = new OnFriendshipListener() {
        // 处理好友关系、好友申请和黑名单变化
    };
    private final OnConversationListener conversationListener = new OnConversationListener() {
        // 处理会话、未读数、输入状态和初始化同步
    };
    private final OnGroupListener groupListener = new OnGroupListener() {
        // 处理群组、群成员和群申请变化
    };
    private final OnAdvanceMsgListener messageListener = new OnAdvanceMsgListener() {
        // 处理新消息、撤回、删除、修改和已读回执
    };
    private final OnCustomBusinessListener businessListener = new OnCustomBusinessListener() {
        // 处理自定义业务消息
    };
    private final OnSignalingListener signalingListener = new OnSignalingListener() {
        // 处理通话邀请、成员状态和自定义通话信令
    };

    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 不提供移除 listener 的方法。退出登录、切换账号或页面销毁时,应停止用回调更新旧账号数据和已销毁界面,并清理应用自身持有的引用。下次登录前,重新设置新账号使用的各类 listener。

事件归属

事件范围Listener对应页面
连接、Token 和强制下线OnConnListener认证与管理登录会话
当前用户资料OnUserListener更新当前用户资料
在线状态OnUserListener订阅用户在线状态
好友关系与资料OnFriendshipListener分页获取好友列表
好友申请OnFriendshipListener获取收到的好友申请
黑名单OnFriendshipListener拉黑用户移出黑名单
会话列表OnConversationListener获取会话列表
总未读数OnConversationListener获取消息总未读数
输入状态OnConversationListener上报输入状态
群资料、成员和群申请OnGroupListener群组概览
新消息、离线消息和在线消息OnAdvanceMsgListener接收消息
消息撤回OnAdvanceMsgListener撤回消息
消息删除OnAdvanceMsgListener批量删除消息
消息修改OnAdvanceMsgListener修改消息
置顶消息OnAdvanceMsgListener置顶或取消置顶消息
单聊已读回执OnAdvanceMsgListener标记会话已读
自定义业务消息OnCustomBusinessListener接收自定义业务消息
通话OnSignalingListener处理通话事件
通话自定义信令OnSignalingListener发送自定义信令
SDK 数据同步OnConversationListener监听初始化同步

监听初始化同步

同步生命周期属于 OnConversationListener,该 listener 还应包含会话列表、未读数和输入状态回调;下面只展示初始化同步相关的回调:

private final OnConversationListener conversationListener = new OnConversationListener() {
    @Override
    public void onSyncServerStart(boolean reinstall) {
        // 开始同步:更新同步状态并按需显示加载界面
    }

    @Override
    public void onSyncServerProgress(long progress) {
        // 同步中:更新同步进度
    }

    @Override
    public void onSyncServerFinish(boolean reinstall) {
        // 同步完成:刷新依赖完整数据的页面
    }

    @Override
    public void onSyncServerFailed(boolean reinstall) {
        // 同步失败:更新同步失败状态并等待重试或连接恢复
    }

    // conversationListener 的其他回调函数...
};

reinstall 表示本次是否为本地数据重建后的同步:true 表示应用重装、清除本地数据等场景后的同步,本地通常没有可用缓存;false 表示普通登录后的同步。onSyncServerProgress 提供当前同步进度;同步完成后重新查询当前界面需要的数据,失败时更新同步失败状态并等待重试或连接恢复。