• 聊天室管理
    • 概述
      • 聊天室对象
      • 获取应用下聊天室列表
      • 获取当前用户加入的聊天室列表
      • 查询指定roomID的聊天室信息
      • 进入聊天室
      • 离开聊天室
      • 获取聊天室会话
      • 创建聊天室会话
      • 删除聊天室会话
      • 聊天室消息
        • 聊天室消息发送
        • 聊天室消息接收
      • 聊天室管理员
        • 添加
        • 删除
        • 获取列表
      • 聊天室黑名单
        • 添加
        • 删除
        • 获取列表
      • 聊天室成员禁言
        • 设置成员禁言
        • 删除成员禁言
        • 获取禁言状态
        • 获取禁言列表
      • 聊天室通知事件

    聊天室管理

    概述

    JMessage iOS SDK 从 3.4.0 版本开始提供聊天室功能,包括查询基本信息,加入聊天室,退出聊天室等。

    • 主要特点

      • 聊天室的消息没有推送通知和离线保存
      • 没有常驻成员的概念,只要进入聊天室即可接收消息,开始聊天
      • 一旦退出聊天室,不再会接收到任何消息、通知和提醒
    • 发送消息

      • 聊天室消息的发送与单聊、群聊是一样的,通用的发送接口
    • 接收消息

      • 聊天室消息的接收与单聊、群聊做了区分,聊天室消息的接收将通过 JMSGConversationDelegate 类里的 ">onReceiveChatRoomConversation:messages: 方法通知到上层注意:进入聊天室会自动获取最近50条消息。客户端目前不支持创建聊天室

    聊天室对象

    属性/方法类型/返回值说明
    roomIDNSString聊天室 id
    nameNSString名称
    appkeyNSString聊天室所属应用 AppKey
    descNSString描述信息
    totalMemberCountNSInteger聊天室人数
    maxMemberCountNSString聊天室最大人数限制
    ctimeNSNumber聊天室的创建时间

    获取应用下聊天室列表

    可以获取对应 AppKey 应用下的聊天室列表,不传 AppKey 则默认是当前应用。

    1. /*!
    2. * @abstract 分页获取聊天室详情
    3. *
    4. * @param appKey 选填,为 nil 则获取当前应用下的聊天室
    5. * @param start 分页获取的下标,第一页从 index = 0 开始
    6. * @param count 一页的数量,每页最大值是 50
    7. * @param handler 结果回调. 正常返回时 resultObject 类型是 NSArray<JMSGChatRoom>
    8. *
    9. * @discussion 该接口总是向服务器端发起请求.
    10. */
    11. + (void)getChatRoomListWithAppKey:(NSString *JMSG_NULLABLE)appKey
    12. start:(NSInteger)start
    13. count:(NSInteger)count
    14. completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;

    获取当前用户加入的聊天室列表

    1. /*!
    2. * @abstract 获取当前用户已加入的聊天室列表
    3. *
    4. * @param handler 结果回调. 正常返回时 resultObject 类型是 NSArray<JMSGChatRoom>
    5. *
    6. * @discussion 该接口总是向服务器端发起请求.
    7. */
    8. + (void)getMyChatRoomListCompletionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;

    查询指定roomID的聊天室信息

    1. /*!
    2. * @abstract 获取聊天室详情
    3. *
    4. * @param roomIds 待获取详情的聊天室 ID 数组
    5. * @param handler 结果回调. 正常返回时 resultObject 类型是 NSArray<JMSGChatRoom>
    6. *
    7. * @discussion 该接口总是向服务器端发起请求.
    8. */
    9. + (void)getChatRoomInfosWithRoomIds:(NSArray *JMSG_NONNULL)roomIds
    10. completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;

    进入聊天室

    成功进入聊天室之后,会将聊天室中最近 50 条聊天记录同步下来,并上抛通知上层,上层可以通过 ">onReceiveChatRoomConversation:messages: 监听并获取返回的消息列表。

    1. /*!
    2. * @abstract 加入聊天室
    3. *
    4. * @param roomId 聊天室 id
    5. * @param handler 结果回调. error = nil 表示加入成功,resultObject 为 JMSGConversation 类型
    6. *
    7. * @discussion 成功进入聊天室之后,会将聊天室中最近若干条聊天记录同步下来并以 onReceiveChatRoomConversation: 事件的形式通知到上层,进入聊天室会自动获取最近50条消息。
    8. */
    9. + (void)enterChatRoomWithRoomId:(NSString *JMSG_NONNULL)roomId
    10. completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;

    离开聊天室

    注意:退出聊天室后获取不到任何消息和通知

    1. /*!
    2. * @abstract 退出聊天室
    3. *
    4. * @param roomId 聊天室 id
    5. * @param handler 结果回调. error = nil 表示加入成功.
    6. *
    7. * @discussion 退出聊天室后获取不到任何消息和通知.
    8. */
    9. + (void)leaveChatRoomWithRoomId:(NSString *JMSG_NONNULL)roomId
    10. completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;

    获取聊天室会话

    1. /*!
    2. * @abstract 返回聊天室 conversation 列表(异步,已排序)
    3. *
    4. * @param handler 结果回调。正常返回时 resultObject 的类型为 NSArray,数组里成员的类型为 JMSGConversation
    5. *
    6. * @discussion 当前是返回所有的chatroom conversation 列表,不包括单聊和群聊会话,默认是已经排序。
    7. */
    8. + (void)allChatRoomConversation:(JMSGCompletionHandler)handler;
    1. /*!
    2. * @abstract 获取聊天室会话
    3. *
    4. * @param roomId 聊天室 ID
    5. *
    6. * @discussion 如果会话还不存在,则返回 nil
    7. */
    8. + (JMSGConversation * JMSG_NULLABLE)chatRoomConversationWithRoomId:(NSString *)roomId;

    创建聊天室会话

    1. /*!
    2. * @abstract 创建聊天室会话
    3. *
    4. * @param roomId 聊天室 ID。
    5. * @param handler 结果回调。正常返回时 resultObject 类型为 JMSGConversation。
    6. *
    7. * @discussion 如果会话已经存在,则直接返回。如果不存在则创建。
    8. * 创建会话时如果发现该 roomId 的信息本地还没有,则需要从服务器端上拉取。
    9. * 如果从服务器上获取 roomId 的信息不存在或者失败,则创建会话失败。
    10. */
    11. + (void)createChatRoomConversationWithRoomId:(NSString *)roomId
    12. completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;

    删除聊天室会话

    1. /*!
    2. * @abstract 删除聊天室会话
    3. *
    4. * @param roomId 聊天室 ID
    5. *
    6. * @discussion 除了删除会话本身,还会删除该会话下所有的聊天消息。
    7. */
    8. + (BOOL)deleteChatRoomConversationWithRoomId:(NSString *)roomId;

    聊天室消息

    聊天室消息发送

    聊天室消息的发送接口与单聊、群里的发送接口是共用的,接口请查看会话与消息 - 发送消息

    聊天室消息接收

    1. /*!
    2. * @abstract 接收聊天室消息
    3. *
    4. * @param conversation 聊天室会话
    5. * @param messages 接收到的消息数组,元素是 JMSGMessage
    6. *
    7. * @discussion 注意:
    8. *
    9. * 接收聊天室的消息与单聊、群聊消息不同,聊天室消息都是通过这个代理方法来接收的。
    10. *
    11. * @since 3.4.0
    12. */
    13. - (void)onReceiveChatRoomConversation:(JMSGConversation *)conversation
    14. messages:(NSArray JMSG_GENERIC(__kindof JMSGMessage *)*)messages;

    聊天室管理员

    添加

    1. /*!
    2. * @abstract 添加黑名单
    3. *
    4. * @param usernames 用户名列表
    5. * @param appkey 用户 appKey,usernames 中的所有用户必须在同一个 AppKey 下,不填则默认为本应用 appKey
    6. * @param handler 结果回调。error 为 nil 表示成功.
    7. *
    8. * @since 3.8.0
    9. */
    10. - (void)addBlacklistWithUsernames:(NSArray <__kindof NSString *>*)usernames
    11. appKey:(NSString *JMSG_NULLABLE)appKey
    12. handler:(JMSGCompletionHandler JMSG_NULLABLE)handler;

    删除

    1. /*!
    2. * @abstract 删除黑名单
    3. *
    4. * @param usernames 用户名列表
    5. * @param appkey 用户 appKey,usernames 中的所有用户必须在同一个 AppKey 下,不填则默认为本应用 appKey
    6. * @param handler 结果回调。error 为 nil 表示成功.
    7. *
    8. * @since 3.8.0
    9. */
    10. - (void)deleteBlacklistWithUsernames:(NSArray <__kindof NSString *>*)usernames
    11. appKey:(NSString *JMSG_NULLABLE)appKey
    12. handler:(JMSGCompletionHandler JMSG_NULLABLE)handler;

    获取列表

    1. /*!
    2. * @abstract 聊天室的黑名单列表
    3. *
    4. * @param handler 结果回调. resultObject 是 NSArray 类型,元素是 JMSGUser
    5. *
    6. * @since 3.8.0
    7. */
    8. - (void)chatRoomBlacklist:(JMSGCompletionHandler JMSG_NULLABLE)handler;

    聊天室黑名单

    添加

    1. /*!
    2. * @abstract 添加管理员
    3. *
    4. * @param usernames 用户名列表
    5. * @param appkey 用户 AppKey,不填则默认为本应用 AppKey
    6. * @param handler 结果回调。error 为 nil 表示成功.
    7. *
    8. * @discussion 注意:非 VIP 应用最多设置 15 个管理员,不包括群主本身
    9. *
    10. * @since 3.8.0
    11. */
    12. - (void)addAdminWithUsernames:(NSArray <__kindof NSString *>*)usernames
    13. appKey:(NSString *JMSG_NULLABLE)appkey
    14. handler:(JMSGCompletionHandler JMSG_NULLABLE)handler;

    删除

    1. /*!
    2. * @abstract 删除管理员
    3. *
    4. * @param usernames 用户名列表
    5. * @param appkey 用户 AppKey,不填则默认为本应用 AppKey
    6. * @param handler 结果回调。error 为 nil 表示成功.
    7. *
    8. * @since 3.8.0
    9. */
    10. - (void)deleteAdminWithUsernames:(NSArray <__kindof NSString *>*)usernames
    11. appKey:(NSString *JMSG_NULLABLE)appkey
    12. handler:(JMSGCompletionHandler JMSG_NULLABLE)handler;

    获取列表

    1. /*!
    2. * @abstract 管理员列表
    3. *
    4. * @param handler 结果回调. resultObject 是 NSArray 类型,元素是 JMSGUser
    5. *
    6. * @discussion 注意:返回列表中不包含房主.
    7. *
    8. * @since 3.8.0
    9. */
    10. - (void)chatRoomAdminList:(JMSGCompletionHandler JMSG_NULLABLE)handler;

    聊天室成员禁言

    设置成员禁言

    1. /*!
    2. * @abstract 设置成员禁言(可设置禁言时间)
    3. *
    4. * @param silenceTime 禁言时间戳,单位:毫秒,必须不小于5分钟,不大于1年
    5. * @param usernames 用户的 username 数组,一次最多500人
    6. * @param appKey 用户的 appKey,若传入空则默认使用本应用appKey,同一次设置的 usernames 必须在同一个 AppKey 下
    7. * @param handler 结果回调,error = nil 时,表示成功
    8. *
    9. * @discussion 只有房主和管理员可设置;设置成功的话上层会收到相应下发事件。
    10. *
    11. * @since 3.8.1
    12. */
    13. - (void)addChatRoomSilenceWithTime:(SInt64)silenceTime
    14. usernames:(NSArray *JMSG_NONNULL)usernames
    15. appKey:(NSString *JMSG_NULLABLE)appkey
    16. handler:(JMSGCompletionHandler JMSG_NULLABLE)handler;

    删除成员禁言

    1. /*!
    2. * @abstract 取消成员禁言
    3. *
    4. * @param usernames 用户的 username 数组,一次最多500人
    5. * @param appKey 用户的 appKey,若传入空则默认使用本应用appKey,同一次设置的 usernames 必须在同一个 AppKey 下
    6. * @param handler 结果回调,error = nil 时,表示成功
    7. *
    8. * @discussion 只有房主和管理员可设置;取消成功的话上层会收到相应下发事件。
    9. *
    10. * @since 3.8.1
    11. */
    12. - (void)deleteChatRoomSilenceWithUsernames:(NSArray *JMSG_NONNULL)usernames
    13. appKey:(NSString *JMSG_NULLABLE)appkey
    14. handler:(JMSGCompletionHandler JMSG_NULLABLE)handler;

    获取禁言状态

    1. /*!
    2. * @abstract 获取禁言状态
    3. *
    4. * @param username 用户名
    5. * @param appKey 用户所在应用 AppKey,不填这默认本应用
    6. * @param handler 结果回调,resultObject 是 JMSGMemberSilenceInfo 类型
    7. * 若 error == nil && resultObject != nil,该成员已被禁言
    8. * 若 error == nil && resultObject == nil,该成员未被禁言
    9. * 若 error != nil ,请求失败,
    10. *
    11. * @discussion 详细信息可查看 JMSGMemberSilenceInfo 类
    12. *
    13. * @since 3.8.1
    14. */
    15. - (void)getChatRoomMemberSilenceWithUsername:(NSString *JMSG_NONNULL)username
    16. appKey:(NSString *JMSG_NULLABLE)appKey
    17. handler:(JMSGCompletionHandler JMSG_NULLABLE)handler;

    获取禁言列表

    1. /*!
    2. * @abstract 禁言列表
    3. *
    4. * @param start 开始位置
    5. * @param count 需要获取的个数,必须大于 0
    6. * @param handler 结果回调
    7. *
    8. * @since 3.8.1
    9. */
    10. - (void)getChatRoomSilencesWithStart:(SInt64)start
    11. count:(SInt64)count
    12. handler:(void(^)(NSArray <__kindof JMSGMemberSilenceInfo *>*JMSG_NULLABLE list,SInt64 total,NSError *JMSG_NULLABLE error))handler;

    聊天室通知事件

    聊天室事件目前有管理员变更事件、黑名单变更事件,具体事件详情和监听请查看事件与代理 - 聊天室事件