函数 | 函数名 |
---|---|
HMRHummerState | state |
HMRChannelState | channelState |
void | startSDKWithAppId: |
void | openWithUid:environment:msgFetchStrategy:tags:token:completionHandler: |
void | closeWithCompletionHandler: |
void | refreshToken: |
void | setLogger: |
void | addStateObserver: |
void | removeStateObserver: |
void | addChannelStateObserver: |
void | removeChannelStateObserver: |
NSString * | sdkVersion |
Public 成员函数 | 函数名 |
---|---|
instancetype | instance |
void | sendMessage:completionHandler: |
void | addMessageObserver:forTarget: |
void | removeMessageObserver:forTarget: |
@property (class, nonatomic, assign, readonly) HMRHummerState state;
获取SDK当前状态,详见HMRHummerState
@property (class, nonatomic, assign, readonly) HMRChannelState channelState;
获取当前连接状态,详见HMRChannelState
+ (void)startSDKWithAppId:(UInt64)appId;
初始化Hummer
注意:
- 目前 SDK 只支持一个 Hummer 实例,每个应用程序仅应创建一个 Hummer 对象。
- Hummer 类的所有接口函数,如无特殊说明,都是异步调用,对接口的调用建议在同一个线程进行。
- 对于所有操作的回调,如无特殊说明,返回的NSError为 nil 代表成功,否则为操作失败,具体的错误码及含义参见 HMRErrorCode中的错误码定义。
参数 | 描述 |
---|---|
appId | 用于标识具体业务, 详见 获取AppID |
+ (void)openWithUid:(UInt64)uid
environment:(NSString *)environment
msgFetchStrategy:(HMRMsgFetchStrategy)msgFetchStrategy
tags:(NSSet<NSString *> *_Nullable)tags
token:(NSString *)token
completionHandler:(HMRCompletionHandler)completionHandler;
登录SDK,同时开始监听服务器消息以及拉取对应消息数据
参数 | 描述 |
---|---|
uid | 用户id, uid 不能为0 |
environment | 需要连接服务器所处的环境参数,详情咨询相关SDK开发人员 |
msgFetchStrategy | 消息拉取策略,详见HMRMsgFetchStrategy |
tags | 保留字段,暂时可以填空集合 |
token | 用于服务初始化时所需的用户凭证 |
completionHandler | 完成后的处理回调 |
+ (void)closeWithCompletionHandler:(HMRCompletionHandler _Nullable)completionHandler;
登出SDK
注意:
- 登出SDK是一个异步操作,应该在completionHandler回调中处理错误的情况
参数 | 描述 |
---|---|
completionHandler | 完成后的处理回调 |
+ (void)refreshToken:(NSString *)token;
刷新用户凭证
参数 | 描述 |
---|---|
token | 待刷新用户凭证 |
+ (void)setLogger:(void (^)(HMRLoggerLevel level, NSString *log))logger;
设置 SDK 日志输出托管回调
注意:
- 业务可以通过该方法进行设置对应的 Logger,那么 SDK 则会将日志的输出和打印交给业务来处理
- 业务则需要保证日志的上报等,用于后期出现问题时可以查到具体的信息
参数 | 描述 |
---|---|
logger | SDK 日志输出回调, 日志级别详见HMRLoggerLevel |
+ (void)addStateObserver:(id<HMRHummerStateObserver>)observer;
添加 SDK 状态变更监听器
参数 | 描述 |
---|---|
observer | 待添加监听器, 详见 HMRHummerStateObserver |
+ (void)removeStateObserver:(id<HMRHummerStateObserver>)observer;
移除 SDK 状态变更监听器
参数 | 描述 |
---|---|
observer | 待移除监听器, 详见 HMRHummerStateObserver |
+ (void)addChannelStateObserver:(id<HMRChannelStateObserver>)observer;
添加 连接 状态变更监听器
参数 | 描述 |
---|---|
observer | 待添加监听器, 详见 HMRChannelStateObserver |
+ (void)removeChannelStateObserver:(id<HMRChannelStateObserver>)observer;
移除 连接 状态变更监听器
参数 | 描述 |
---|---|
observer | 待移除监听器, 详见 HMRChannelStateObserver |
+ (NSString *)sdkVersion;
获取 SDK 版本信息
typedef NS_ENUM(NSUInteger, HMRHummerState)
SDK 状态
枚举值 | 含义 |
---|---|
HMRHummerStateUnavailable(0) | 不可用状态, 当 SDK 未初始化时则处于该状态 |
HMRHummerStateClosed(1) | 已关闭 |
HMRHummerStateOpening(2) | 正在打开 |
HMRHummerStateOpened(3) | 已打开 |
HMRHummerStateClosing(4) | 正在关闭 |
typedef NS_ENUM(NSInteger, HMRChannelState)
SDK 连接状态
枚举值 | 含义 |
---|---|
HMRChannelStateDisconnected(0) | 通道处于断开连接的状态 |
HMRChannelStateConnecting(1) | 通道处于连接中的状态 |
HMRChannelStateConnected(2) | 通道处于连接成功的状态 |
typedef NS_OPTIONS(NSUInteger, HMRLoggerLevel)
日志级别
位运算 | 含义 |
---|---|
HMRLoggerLevelError(1 << 0) | 错误信息 |
HMRLoggerLevelWarning(1 << 1) | 告警信息 |
HMRLoggerLevelInfo(1 << 2) | 关键信息 |
HMRLoggerLevelDebug(1 << 3) | 调试信息 |
HMRLoggerLevelVerbose(1 << 4) | 所有信息 |
+ (instancetype)instance;
创建 HMRChatRoomService 实例并初始化。
@property (nonatomic, strong) NSString *region;
设置聊天室区域
注意:
- 需要在使用聊天室相关功能之前调用设置
- 未设置将默认中国区域
参数 | 描述 |
---|---|
region | 聊天室区域 |
- (void)createChatRoom:(HMRChatRoomInfo *)chatRoomInfo
completionHandler:(HMRChatRoomCompletionHandler)completionHandler;
创建聊天室
注意:
- 由于聊天室模块的所需的聊天室必须要通过创建才能使用,故需要对应的创建聊天室接口。
- 在创建聊天室完成后,服务器会返回对应的聊天室标识,用于后续在使用聊天室时的标识。
- 同时在创建聊天室时需要提供对应的聊天室信息,如名称、描述、公告以及扩展信息等。
- 默认容量上限:
一个AppId创建聊天室个数:100w个
单个聊天室对应人数:10w个- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
chatRoomInfo | 聊天室信息对象,包含名称、描述、公告以及扩展信息 ,详见HMRChatRoomInfo |
completionHandler | 创建完成后的回调,其中创建成功后会携带对应的 聊天室标识 返回给业务,用于后面聊天室操作中使用;同时在创建失败后,回调中也携带了对应的失败原因 |
- (void)dismissChatRoom:(HMRChatRoom *)chatRoom
completionHandler:(HMRCompletionHandler)completionHandler;
解散聊天室
注意:
- 销毁时需要提供对应的聊天室标识用于服务器识别对应的聊天室,并正常销毁。
- 销毁需要HMROwnerRole权限
- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
chatRoom | 聊天室标识符 |
completionHandler | 销毁完成后的回调,业务可以根据对应的销毁结果做不同的业务逻辑处理,销毁失败时也会携带对应的失败原因 |
- (void)joinChatRoom:(HMRChatRoom *)chatRoom
extraProps:(NSDictionary<NSString *, NSString *> * _Nullable)extraProps
completionHandler:(HMRCompletionHandler)completionHandler;
加入聊天室
注意:
- 对应聊天室操作都需要进入聊天室之后才能正常的操作,如发公屏、发信令以及接受信令都要进入聊天室之后才能正常处理。
- 加入聊天室会涉及多端互踢的逻辑,相关互踢逻辑请咨询后台配置。
- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
chatRoom | 聊天室标识符 |
extraProps | 扩展字段,用于业务扩展,SDK 只负责透传 |
completionHandler | 加入聊天室完成后的回调,业务可以根据对应的加入结果做不同的业务处理,加入失败时也会携带对应的错误原因 |
- (void)leaveChatRoom:(HMRChatRoom *)chatRoom
completionHandler:(HMRCompletionHandler)completion;
退出聊天室
注意:
- 在进入聊天室后处理完所有需要处理的逻辑后,可以通过离开聊天室来结束跟聊天室之间的交互,同时也会停止监听聊天室的公屏、信令消息和对应的回调通知。
参数 | 描述 |
---|---|
chatRoom | 聊天室标识符 |
completionHandler | 离开聊天室完成后的回调,业务可以根据对应的离开结果做不同的业务处理,离开失败时也会携带对应的错误原因 |
- (void)kickMember:(HMRUser *)member
fromChatRoom:(HMRChatRoom *)chatRoom
extraInfo:(NSDictionary<NSString *, NSString *> *)extraInfo
completionHandler:(HMRCompletionHandler)completionHandler;
将用户踢出聊天室
注意:
- 踢出成员需要对应的角色(HMRAdminRole 和 HMROwnerRole) 才可以踢出对应的成员,并且 HMRAdminRole 不可以踢出 HMRAdminRole 和 HMROwnerRole, 而 HMROwnerRole 可以踢出频道内所有成员。
- 并且踢出成员以及被踢出的成员都需要在频道内可以操作。
- 踢出成功后,SDK 后台并不会限制该成员无法进入,但是 SDK 会透传给业务服务器,由业务服务器做决定是否允许进入聊天室。
- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
member | 踢出的聊天室成员 |
chatRoom | 聊天室标识符 |
extraInfo | 踢人的额外信息,目前支持的Key主要是两个: 一个是 HMRKickReasonExtraKey, 用于携带踢人原因的 Key, 其 Key 对应的 Value 只需填写对应的踢人原因的字符串即可; 另一个是 HMRKickTimeExtraKey 用于携带限制时长的 Key(单位:秒), 其 Key 对应的 Value 只需要填写踢人限制时长的秒数转换成字符串即可, 这些字段都是透传字段,服务器不做处理 |
completionHandler | 踢出完成的回调,业务可以根据对应的踢出结果做不同的业务处理,踢出失败后也会携带对应的错误原因 |
- (void)addRole:(NSString *)role
forMember:(HMRUser *)member
chatRoom:(HMRChatRoom *)chatRoom
completionHandler:(HMRCompletionHandler)completionHandler;
添加聊天室权限角色
注意:
- 聊天室的 HMROwnerRole 可以给对应的成员添加 HMRAdminRole 的角色,但是 HMRAdminRole 没办法给普通成员添加 HMRAdminRole 的角色。
- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
role | 角色类型,目前只能填写 HMRAdminRole |
member | 被添加角色的聊天室成员 |
chatRoom | 聊天室标识符 |
completionHandler | 添加角色完成后的对调,业务可以根据对应添加结果做不同的业务处理 |
- (void)removeRole:(NSString *)role
forMember:(HMRUser *)member
chatRoom:(HMRChatRoom *)chatRoom
completionHandler:(HMRCompletionHandler)completionHandler;
移除聊天室权限角色
注意:
- 聊天室的 HMROwnerRole 才可以移除对应的 HMRAdminRole 角色,但是 HMRAdminRole 没办法给 HMRAdminRole 移除角色。
- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
role | 角色类型, 目前只能填写 HMRAdminRole |
member | 被移除角色的聊天室成员 |
chatRoom | 聊天室标识符 |
completionHandler | 移除角色完成后的对调,业务可以根据对应移除结果做不同的业务处理 |
- (void)fetchMembers:(HMRChatRoom *)chatRoom
offset:(NSUInteger)offset
num:(NSUInteger)num
completionHandler:(HMRFetchMembersCompletionHandler)completionHandler;
获取聊天室在线成员列表
注意:
- 由于一些场景下,一个聊天室的内的成员可能有十几万,故聊天室 SDK 提供了对应的按需分页获取成员的结果。同时也会按照一定的默认规则来进行排序对应的成员列表。
- 获取成员列表的接口,可以在不进入聊天室时也可以获取。
- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
chatRoom | 聊天室标识符 |
offset | 第几页 (第一页从0开始) |
num | 设置每页的返回成员数(建议不超过200) |
completionHandler | 获取完成后的回调,业务可以根据对应的获取的结果来做不同的业务处理,在获取成功的后可以通过成功后的 成员列表 来进行业务处理 |
- (void)fetchRoleMembers:(HMRChatRoom *)chatRoom
onlineOnly:(BOOL)onlineOnly
completionHandler:(HMRFetchRoleMemberCompletionHandler)completionHandler;
获取聊天室带有角色的成员列表
注意:
- 获取可以根据需要拉取对应的角色列表,业务可以根据对应的角色列表在界面上展示不同的UI界面以及赋予对应角色权限。
- 获取角色列表无需进入聊天室后获取,进入聊天室前即可获取。
- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
chatRoom | 聊天室标识符 |
onlineOnly | 是否只获取在线的成员: YES:只获取在线的有角色的成员列表; NO:获取所有带有角色的成员列表 |
completionHandler | 获取完成后的回调,业务可以根据需要对应的获取结果做不同的业务处理,在获取成功后会返回对应的 角色名-角色成员的列表 的键值对 |
- (void)fetchBasicInfo:(HMRChatRoom *)chatRoom
completionHandler:(HMRChatRoomInfoCompletionHandler)completionHandler;
获取聊天室基本属性信息
注意:
- 获取聊天室信息可以获取到对应聊天室的名称、描述、公告以及对应的扩展字段信息。
- 获取聊天室信息无需进入聊天室也可以获取。
- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
chatRoom | 聊天室标识符 |
completionHandler | 获取完成后的回调,业务可以根据对应的获取结果做不同的业务逻辑处理,在获取成功后可以从对应的参数中获取到对应的聊天室信息 |
- (void)changeBasicInfo:(NSDictionary<NSNumber *, NSString *> *)propInfo
forChatRoom:(HMRChatRoom *)chatRoom
completionHandler:(HMRCompletionHandler)completionHandler;
变更聊天室基本属性信息
注意:
- 可以修改一个或多个属性,只需要在参数中指定需要修改的聊天室信息的键值对即可。
- 需要 HMRAdminRole 或者 HMROwnerRole 的角色。
- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
propInfo | 修改的属性值,其中key值参见枚举详见:HMRChatRoomBasicInfoType |
chatRoom | 聊天室标识符 |
completionHandler | 改完成后的回调,业务可以根据对应的修改结果做不同的业务处理 |
- (void)muteMember:(HMRUser *)member
inChatRoom:(HMRChatRoom *)chatRoom
reason:(NSString *)reason
completionHandler:(HMRCompletionHandler)completionHandler;
禁言聊天室内的成员
注意:
- 业务可以根据对应的需要禁言某个成员,目前后台默认的禁言时间为三天,到期自动解禁。
- 禁言需要 HMRAdminRole 或者 HMROwnerRole 的角色:
HMROwnerRole:可以禁言频道内的所有人包括 HMRAdminRole
HMRAdminRole:只可以禁言普通成员。- 禁言的成员需要在聊天室内
- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
member | 需要禁言的成员 |
chatRoom | 成员所在的聊天室 |
reason | 禁言的原因 |
completionHandler | 禁言完成后的回调,业务可以根据对应禁言结果做不同的业务处理 |
- (void)unmuteMember:(HMRUser *)member
inChatRoom:(HMRChatRoom *)chatRoom
reason:(NSString *)reason
completionHandler:(HMRCompletionHandler)completionHandler;
解禁聊天室内的成员
注意:
- 解禁的成员需要在聊天室内
- 解除禁言需要 HMRAdminRole 或者 HMROwnerRole 的角色, HMROwnerRole 可以解禁频道内的所有人包括 HMRAdminRole, 而 HMRAdminRole 则只可以解禁普通成员。
- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
member | 需要解除禁言的成员 |
chatRoom | 成员所在的聊天室 |
reason | 接触禁言的原因 |
completionHandler | 解除禁言完成后的回调,业务可以根据对应解除禁言结果做不同的业务处理 |
- (void)fetchMutedUsers:(HMRChatRoom *)chatRoom
completionHandler:(HMRFetchMembersCompletionHandler)completionHandler;
获取聊天室内的禁言列表
注意:
- 获取的禁言列表里面的有些用户可能不存在聊天室内
- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
chatRoom | 需要获取禁言列表的聊天室 |
completionHandler | 获取完成后的回调,业务可以根据对应的获取结果做不同的业务处理,在获取成功时,会同时返回对应的禁言成员的数组 |
- (void)isUserMuted:(HMRUser *)user
inChatRoom:(HMRChatRoom *)chatRoom
completionHandler:(HMRBOOLCompletionHandler)completionHandler;
判别某一个用户是否在聊天室的禁言列表里
注意:
- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
user | 需要判别的用户 |
chatRoom | 需要判别的聊天室 |
completionHandler | 判断完成后的回调,业务可以根据对应判断结果来做不同的业务处理: YES:时则表示该用户被禁言了 NO:表示该用户未被禁言 |
- (void)setUserInfo:(NSDictionary<NSString *, NSString *> *)infos
inChatRoom:(HMRChatRoom *)chatRoom
ompletionHandler:(HMRCompletionHandler)completionHandler;
设置自己的用户信息
注意:
- 容量上限:
设置用户属性,最大支持属性个数:32个
单个用户属性的最大值:8k- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
infos | 用户信息键值对 |
chatRoom | 成员所在的聊天室 |
completionHandler | 设置信息返回的回调,可以根据错误码进行处理 |
- (void)deleteUserInfo:(HMRChatRoom *)chatRoom
byKeys:(NSSet<NSString *> *)keys
completionHandler:(HMRCompletionHandler)completionHandler;
删除自己的用户信息
注意:
- 容量上限:
用户属性,最大支持属性个数:32个
单个用户属性的最大值:8k- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
chatRoom | 成员所在的聊天室 |
keys | 待删除信息的key |
completionHandler | 设置信息返回的回调,可以根据错误码进行处理 |
- (void)fetchUserInfo:(HMRUser *)user
inChatRoom:(HMRChatRoom *)chatRoom
completionHandler:(HMRCommonCompletionHandler)completionHandler;
获取指定用户的用户信息
参数 | 描述 |
---|---|
user | 目标用户 |
chatRoom | 成员所在的聊天室 |
completionHandler | 设置信息返回的回调,可以根据错误码进行处理 |
- (void)fetchOnlineUserInfoList:(HMRChatRoom *)chatRoom
completionHandler:(HMRChatRoomUserInfoListCompletionHandler)completionHandler;
获取聊天室已设置用户信息的在线成员列表
注意:
- 获取的人员列表最多返回100个,超过100个的随机返回100个
参数 | 描述 |
---|---|
chatRoom | 待查询聊天室 |
completionHandler | 完成后的回调,业务可以根据对应判断结果来做不同的业务处理 在获取成功后会返回对应的 用户-用户角色信息 的键值对 |
- (void)addChatRoomObserver:(id<HMRChatRoomObserver>)observer;
添加聊天室回调监听器
参数 | 描述 |
---|---|
observer | 监听器对象, 详见 HMRChatRoomObserver |
- (void)removeChatRoomObserver:(id<HMRChatRoomObserver>)observer;
移除聊天室回调监听器
参数 | 描述 |
---|---|
observer | 监听器对象, 详见 HMRChatRoomObserver |
- (void)addMemberObserver:(id<HMRChatRoomMemberObserver>)observer;
添加聊天室成员回调监听器
参数 | 描述 |
---|---|
observer | 监听器对象. 详见 HMRChatRoomMemberObserver |
- (void)removeMemberObserver:(id<HMRChatRoomMemberObserver>)observer;
移除聊天室成员的回调监听器
参数 | 描述 |
---|---|
observer | 监听器对象, 详见 HMRChatRoomMemberObserver |
+ (instancetype)instance;
创建 HMRChatService 实例并初始化。
- (void)sendMessage:(HMRMessage *)chatMessage
completionHandler:(nullable HMRCompletionHandler)completionHandler;
发送消息接口:支持发送公屏消息(只支持文本消息)、单播、广播
注意:
- 业务可以通过自己构造消息体,并且填写对应的消息内容将该消息发送出去
- 该接口也可以在消息发送失败的情况下进行重发消息
- 单个用户调用频率限制:
发送公屏消息:10次/5s
发送自定义单播消息:50次/5s
发送自定义广播消息:50次/5s- 容量上限:
单播单条消息最大长度:2k
广播单条消息最大长度:2k
参数 | 描述 |
---|---|
chatMessage | 需要发送的消息 |
completionHandler | 发送完成的处理Block,其中如果 error 为 nil 的话,则表示发送成功。 如果 error 不为 nil 则表示发送失败 |
- (void)addMessageObserver:(id<HMRMessageObserver>)observer forTarget:(id<HMRIdentifiable> _Nullable)target;
添加一个消息收发监听器
参数 | 描述 |
---|---|
observer | 欲增加的listener对象,详见 HMRMessageObserver |
target | 欲监听消息收发的消息对象 |
- (void)removeMessageObserver:(id<HMRMessageObserver>)observer forTarget:(id<HMRIdentifiable> _Nullable)target;
移除一个消息收发监听器
参数 | 描述 |
---|---|
observer | 欲移除的listener对象,详见 HMRMessageObserver |
target | 欲取消监听消息收发的消息对象 |
typedef NS_ENUM(NSUInteger, HMRMsgFetchStrategy)
消息拉取策略定义,不同的应用场景,可能会使用不同的同步策略。例如使用Continuously提供连续的消息服务,使用SkipFetched提供跨环境消息去重服务等。请根据应用场景选择合适的策略
枚举值 | 含义 |
---|---|
HMRContinuously | 持续获取消息,尽量保证消息获取的连续性。这种策略可以满足绝大部分应用场景。该策略首次激活时不会获取已经被消费过的任何消息 |
HMRSkipFetched | 如果部分消息因为某些原因被其它服务所消费掉,那么应从这些被消费掉的消息之后开始获取后续消息。这种策略仅在非常少的应用场景中会被使用,目前可能包含:1. 用户在多个设备中使用同一账号进行登录,但是业务希望已经被其中一台设备获取过的消息,在另一端的应用启动时,不再重复获取 2. 存在两套同时工作,但是数据互通的IM SDK,在它们之间进行切换时,被其中一个SDK所消费过的消息,不应该再被另一个SDK所获取 |
HMRForceReloadHistories | 强制获取服务器上已经保存的所有消息(还在时效期内的) |
HMRIgnoreBefore | 忽略之前所有未收到的消息,从最先的位置开始拉起,即拉去登陆后才收到的消息 |
typedef NS_ENUM(NSUInteger, HMRChatRoomBasicInfoType)
聊天室基础信息的枚举字段:主要用来修改聊天室信息和监听聊天室信息时候,可以标识那个字段发生变化/需要修改
枚举值 | 含义 |
---|---|
HMRChatRoomBasicInfoTypeName | 聊天室名字 |
HMRChatRoomBasicInfoTypeDescription | 聊天室描述 |
HMRChatRoomBasicInfoTypeBulletin | 聊天室公告 |
HMRChatRoomBasicInfoTypeExtention | 聊天室扩展字段(最大1k) |
@interface HMRChatRoomInfo : NSObject
/**
聊天室名称
*/
@property (nonatomic, copy, readonly) NSString *name;
/**
聊天室描述
*/
@property (nullable, nonatomic, copy, readonly) NSString *desc;
/**
聊天室公告
*/
@property (nullable, nonatomic, copy, readonly) NSString *bulletin;
/**
扩展字段,业务可以通过该字段在聊天室信息内存入自己想要的信息
SDK 和后台不关心这个字段
*/
@property (nullable, nonatomic, copy, readonly) NSString *appExtra;
+ (instancetype)chatRoomInfoWithName:(NSString *)name
description:(NSString * _Nullable)desc
bulletin:(NSString * _Nullable)bulletin
appExtra:(NSString * _Nullable)appExtra;
@end
@interface HMRSignalContent : NSObject <HMRContent>
/**
信令消息需要发送的对象
1. 单播的情况下是需要收到该信令的用户标识
2. 如果是广播的情况下,则该对象为 nil
*/
@property (nullable ,nonatomic, strong, readonly) HMRUser *user;
/**
信令消息所包含的内容
*/
@property (nonatomic, copy, readonly) NSString *content;
HMR_UNAVAILABLE_CONSTRUCTOR;
/**
构造一个单播的信令消息内容
@param user 需要接受单播的用户标识
@param content 信令消息所包含的内容
@return 返回一个信令消息内容
*/
+ (instancetype)unicstWithUser:(HMRUser *)user content:(NSString *)content;
/**
构造一个组播的信令消息内容
@param content 信令消息所包含的内容
@return 返回一个信令消息内容
*/
+ (instancetype)broadcastWithContent:(NSString *)content;
@end
@interface HMRMessage : NSObject
/**
发送者对象
*/
@property (nonatomic, strong, readonly) id<HMRIdentifiable> sender;
/**
接受者对象
*/
@property (nonatomic, strong, readonly) id<HMRIdentifiable> receiver;
/**
发送时间戳(服务器时间戳)
*/
@property (nonatomic, assign, readonly) NSTimeInterval timestamp;
/**
消息的唯一标识字符串
*/
@property (nonatomic, copy, readonly) NSString *uuid;
/**
消息的内容
目前来说消息的内置类型包括了 HMRTextContent, HMRAudioContent, HMRImageContent
业务还可以自定义消息内容,具体查看 README.md 文档
*/
@property (nonatomic, strong, readonly) id<HMRContent> content;
/**
消息状态
*/
@property (nonatomic, strong, readonly) id<HMRMessageState> state;
/**
系统推送内容
*/
@property (nonatomic, strong) HMRPushContent *pushContent;
/**
附带字段,可以通过该字段进行附带一些信息进行透传(如用户的头像和昵称等)
*/
@property (nonatomic, strong) NSString *extra;
HMR_UNAVAILABLE_CONSTRUCTOR;
/**
聊天消息的 Designed Constructor
@param content 消息的内容对象
@param receiver 消息的接受者对象
@return 返回消息的具体实例
*/
+ (instancetype)messageWithContent:(id<HMRContent>)content receiver:(id<HMRIdentifiable>)receiver;
/**
对于当前用户来说,该方法用于返回聊天对应的目标对象。
@return 如果是 P2P 消息,返回当前用户以外的用户对象。如果是群、聊天室、官方号等消息,返回 receiver 作为 target
*/
- (id<HMRIdentifiable> _Nullable)target;
@end
唯一标识抽象类
@protocol HMRIdentifiable <NSObject, NSCopying>
@required
/**
标识唯一的ID
*/
@property (nonatomic, assign) UInt64 ID;
/**
需要实现的构造函数,通过唯一标识的ID来创建对象
@param ID 标识唯一的ID
@return 返回创建的对象
*/
- (instancetype)initWithID:(UInt64)ID;
@end
标识Hummer系统的一个用户对象标识
@interface HMRUser : NSObject <HMRIdentifiable>
HMR_UNAVAILABLE_CONSTRUCTOR;
/**
通过 ID 来创建一个用户对象
@param ID 用户ID
@return 返回对象,如果是当前用户则会返回 HMRMe 对象
*/
+ (instancetype)userWithID:(UInt64)ID;
/**
获取当前登陆 SDK 的用户对象
@return 当前登录 SDK 的用户对象
*/
+ (nullable HMRMe *)getMe;
@end
/**
用于标识当前登录的特殊用户对象,并且为全局单例
*/
HMR_FINAL_CLASS
@interface HMRMe : HMRUser
HMR_UNAVAILABLE_CONSTRUCTOR;
+ (instancetype)userWithID:(UInt64)ID NS_UNAVAILABLE;
/**
是否是匿名登录的用户
@return 如果是匿名登录了的则返回 YES, 反之返回 NO
*/
- (BOOL)isAnonymous;
@end
聊天室唯一标识类
@interface HMRChatRoom : NSObject <HMRIdentifiable>
/**
根据id生成一个HMRChatRoom
@param ID id值
*/
+ (instancetype)chatRoomWithID:(UInt64)ID;
@end
用于表示一个聊天内容类型,具体类型应该由其子类来实现。例如Text, Signal等
@protocol HMRContent <NSObject>
@required
/**
通过消息内容的序列化的数据创建对应的消息内容
@param encodeData 序列化后的数据
@return 返回消息内容
*/
+ (instancetype)contentWithEncodeData:(NSData *)encodeData;
/**
消息内容的序列化
@return 序列化后的数据
*/
- (NSData *)encodeData;
@end
@interface HMRContent : NSObject
/**
自定义消息内容需要通过该方法将自定义消息注册到 SDK 中
@param contentClass 消息内容的Class
@param type 消息内容的类型数值表示,❗❗❗该数值需要大于等于 10000,10000以内为保留范围❗❗❗
*/
+ (void)registerForContentClass:(Class<HMRContent>)contentClass forType:(int32_t)type;
@end
文本消息内容类型
@interface HMRTextContent : NSObject <HMRContent>
@property (nonatomic, copy, readonly) NSString *text;
HMR_UNAVAILABLE_CONSTRUCTOR;
+ (instancetype)contentWithText:(NSString *)text;
@end