实现基础功能

前提条件

已集成SDK,具体步骤参见 快速集成SDK

实现聊天室基础功能

API调用时序图

登录登出房间

sequenceDiagram App->>SDK: 1.初始化SDK(init) App->>SDK: 2.登录SDK(open) SDK-->>App: completion App->>SDK: 3.创建房间(createChatRoom) SDK-->>App: completion App->>SDK: 4.进入聊天室(join) SDK-->>App: completion App->>SDK: 5.离开聊天室(leave) SDK-->>App: completion App->>SDK: 6.退出SDK(close) SDK-->>App: completion

收发消息

sequenceDiagram UserA->>SDK: 发送消息(send) SDK-->>UserA: completion SDK->>UserB: 收到消息(afterReceivingMessage) UserB->>SDK: 发送消息(send) SDK->>UserB: completion SDK->>UserA: 收到消息(afterReceivingMessage)

实现方法

1. 初始化SDK

调用 init 初始化 SDK,保证 SDK 各个组件之间能够初始化完成保证后续SDK能够正常工作。该接口是一个同步行为,同一个 AppID 的聊天室才能互通。

// content 安卓活动 (Android Activity) 的上下文
// appId 为应用程序开发者签发的 AppId
HMR.init(Demo.appContext(), currentAppId);

2. 登录SDK

调用 open 登录SDK。

整个 SDK 依赖于用户登录才能使用,需要业务再登录后调用 open 方法告知用户 uid 以及对应的一些信息,保证 SDK 鉴定对应用户的合法性以及建立对应的用户上下文。在鉴定上下文后,也方便之后 SDK 与服务器交互过程中的身份认证。

// uid 当前登录用户的 uid
// region 聊天室所属的区域,目前填入 "china" 即可,方便后期全球化
// tag 该参数为表明用户所属的标签,用于后期消息过滤时使用, 目前可填入空集合
// token 该参数为鉴定用户合法性的票据
// completion 用于登录 SDK 成功后的回调,业务可以根据具体的登录成功或失败来处理对应的业务逻辑
HMR.open(uid, region, null, token, new HMR.Completion() {
    @Override
    public void onSuccess() {

    }

    @Override
    public void onFailed(Error err) {

    }
});

3. 创建房间

调用 createChatRoom 创建房间,聊天室模块的所需的房间必须要通过创建才能使用。

// chatRoomInfo 聊天室信息对象,包含名称、描述、公告以及扩展信息
// completion 创建完成后的回调,其中创建成功后会携带对应的聊天室标识返回给业务,用于后面聊天室操作中使用;同时在创建失败后,回调中也携带了对应的失败原因
HMR.getService(ChatRoomService.class).createChatRoom(chatRoomInfo, new HMR.CompletionArg<ChatRoom>() {
    @Override
    public void onSuccess(ChatRoom result) {

    }

    @Override
    public void onFailed(Error error) {

    }
});

4. 加入房间

调用 join 加入房间。

目前聊天室只支持单端以及多端进入聊天室,对应具体的配置可以找后台的相关同学进行对应的配置。对于单端进入房间则第二个进入房间的用户会将第一个进入房间的用户踢出房间。

// chatRoom 需要进入的聊天室的标识
// joinProps 加入聊天室的附带属性,业务可以在加入聊天室时携带一些附带属性
// completion 加入聊天室完成后的回调,业务可以根据对应的加入结果做不同的业务处理,加入失败时也会携带对应的错误原因
HMR.getService(ChatRoomService.class).join(new ChatRoom(ChatRoom chatRoom,new HashMap<String, String>(), new Challenges.JoiningCompletion() {
    @Override
    public void onReceiveChallenge(Challenges.Password challenge) {
    }

    @Override
    public void onReceiveChallenge(Challenges.AppChallenge challenge) {
    }

    @Override
    public void onSucceed() {


    }

    @Override
    public void onFailure(@NonNull Error err) {

    }
});

5. 发送消息

通过 send 方法在 Message 对象中传入对应类型的消息类型,即可发送公屏、单播或广播消息。

// message 需要发送的消息对象
// compeltion 发送消息的回调,业务可以根据对应的发送结果做不同的业务逻辑处理
HMR.getService(ChatService.class).send(new Message(new ChatRoom(
long channelId)),new Text(message)), new HMR.Completion() {
		@Override
		public void onSuccess() {

		}

		@Override
		public void onFailed(Error err) {

		}
});

6. 接收消息

调用 afterReceivingMessage 接收消息。

在接收到对应的消息后,可以根据对应的信息及消息类型来执行后续处理。

// message 已经收到的消息对象
@Override
public void afterReceivingMessage(@NonNull Message message) {

}

7. 离开房间

调用 leave 离开房间,结束与聊天室房间之间的交互,并停止监听聊天室的公屏、信令消息和对应的回调通知。

// chatRoom 需要离开的聊天室的标识
// completion 离开聊天室完成后的回调,业务可以根据对应的离开结果做不同的业务处理,离开失败时也会携带对应的错误原因
HMR.getService(ChatRoomService.class).leave(new ChatRoom(long channelId), new HMR.Completion() {
    @Override
    public void onSuccess() {

    }

    @Override
    public void onFailed(Error err) {

    }
});

8. 退出SDK

调用 close 退出登录 SDK,用于告知 SDK 当前用户已经退出登录了,保证 SDK 及时回收对应的资源。

在需要再次使用聊天室等模块的情况下,可以通过 open 再次登录 SDK 即可。该过程是一个异步的操作,故提供了最后一个参数告知退出登录的完成以及对应的结果。

// completion 用于退出登录 SDK 完成后的回调,业务可以根据具体的退出登录成功或失败来处理对应的业务逻辑
HMR.close(new HMR.Completion() {
    @Override
    public void onSuccess() {

    }

    @Override
    public void onFailed(Error err) {

    }
});

实现消息通道基本功能

1. 引入消息通道功能模块

在模块 build.gradle 文件中增加下述依赖:

 implementation "com.hummer.im:channel:2.14.0"

2. 初始化Hummer SDK

初始化 SDK, 保证 SDK 各个组件之间能够初始化完成保证后续SDK能够正常工作。该接口是一个同步行为,同一个 AppId 的聊天室才能互通。

// content 安卓活动 (Android Activity) 的上下文
// appId 为应用程序开发者签发的 AppId
HMR.init(Demo.appContext(), currentAppId);

3. 登录SDK

由于整个 SDK 依赖于用户登录才能使用,所以需要业务再登录后调用 open 方法告知用户的 uid 以及对应的一些信息保证 SDK 鉴定对应用户的合法性以及建立对应的用户上下文。在鉴定上下文后,也方便之后 SDK 与服务器交互过程中的身份认证。

// uid 当前登录用户的 uid
// region 聊天室所属的区域,目前填入 "china" 即可,方便后期全球化
// tag 该参数为表明用户所属的标签,用于后期消息过滤时使用, 目前可填入空集合
// token 该参数为鉴定用户合法性的票据
// completion 用于登录 SDK 成功后的回调,业务可以根据具体的登录成功或失败来处理对应的业务逻辑
HMR.open(uid, region, null, token, new HMR.Completion() {
    @Override
    public void onSuccess() {

    }

    @Override
    public void onFailed(Error err) {

    }
});

4. 加入消息通道

执行频道内的相关操作前,需先调用 joinChannel 加入消息通道,最多支持加入20个消息通道。

// 创建频道实例
ChannelId channelId = new ChannelId("6666", "cn");

// 获取频道服务实例
ChannelService channelService = ChannelService.getInstance();
channelService.joinChannel(channelId, null, new HMR.Completion() {
    @Override
    public void onSuccess() {
        
    }

    @Override
    public void onFailed(Error err) {
        
    }
});

5. 退出消息通道

调用 leaveChannel 结束跟频道之间的交互,并停止监听频道消息的回调通知。

// 创建频道实例
ChannelId channelId = new ChannelId("6666", "cn");

// 获取频道服务实例
ChannelService channelService = ChannelService.getInstance();

// 调用离开频道
channelService.leaveChannel(channelId, new HMR.Completion() {
    @Override
    public void onSuccess() {
       
    }

    @Override
    public void onFailed(Error err) {
        
    }
});

6.发送点对点文本消息

调用 sendP2PMessage 发送点对点文本消息。

// text 消息的文本内容
TextMessage textMessage = HMR.createTextMessage("text");

/* 设置扩展信息,可以不设置 */
Map<String, String> extra = new HashMap<>();
extra.put("a", "a");
extra.put("b", "b");
textMessage.setExtra(extra)
  
// 消息接收者
User user = new User(10086L)

// 调用HMR 类方法 sendP2PMessage 发送该消息
HMR.sendP2PMessage(new User(mUid), textMessage, null, new HMR.Completion() {
    @Override
    public void onSuccess() {
        
    }

    @Override
    public void onFailed(Error err) {
        
    }
});

7. 接收点对点文本消息

通过 onP2PTextMessageReceived 回调点对点文本消息,以便后续处理。

@Override
public void onP2PTextMessageReceived(User sender, TextMessage message) {
    
}

8. 发送广播消息

调用 sendP2CMessage 在已加入的消息通道内发送广播消息,发送后会触发 onP2CTextMessageReceived 消息回调,通道内用户均能通过监听该回调接收到广播消息。

// text 消息的文本内容
TextMessage textMessage = HMR.createTextMessage("text");

/* 设置扩展信息,可以不设置 */
Map<String, String> extra = new HashMap<>();
extra.put("a", "a");
extra.put("b", "b");
textMessage.setExtra(extra)

// channelId 频道标识
ChannelId channelId = new ChannelId("6666", "cn");;

// 获取channelService 实例
ChannelService channelService = ChannelService.getInstance();

// 发送消息
channelService.sendP2CMessage(channelId, textMessage, null, new HMR.Completion() {
    @Override
    public void onSuccess() {
       
    }

    @Override
    public void onFailed(Error err) {
        
    }
});

9. 接收广播消息

onP2PTextMessageReceived 回调方法中接收消息。在接收到对应的消息后,业务可以根据对应的收到消息的类型以及对应的信息来进行业务处理。

@Override
public void onP2PTextMessageReceived(User sender, TextMessage message);

文档是否有解决您的问题?

有帮助 没帮助
提交成功,非常感谢您的反馈!

反馈

TOP