V2TIMManager+Signaling.h 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. #import "V2TIMManager.h"
  2. #import "V2TIMManager+Message.h"
  3. /////////////////////////////////////////////////////////////////////////////////
  4. // 信令
  5. /////////////////////////////////////////////////////////////////////////////////
  6. /// 信令信息
  7. @class V2TIMSignalingInfo;
  8. /// 信令监听
  9. V2TIM_EXPORT @protocol V2TIMSignalingListener;
  10. V2TIM_EXPORT @interface V2TIMManager (Signaling)
  11. /**
  12. * 获取信令信息成功回调
  13. */
  14. typedef void (^V2TIMSignalingInfoSucc)(V2TIMSignalingInfo * signalInfo);
  15. /**
  16. * 添加信令监听
  17. */
  18. - (void)addSignalingListener:(id<V2TIMSignalingListener>)listener
  19. NS_SWIFT_NAME(addSignalingListener(listener:));
  20. /**
  21. * 移除信令监听
  22. */
  23. - (void)removeSignalingListener:(id<V2TIMSignalingListener>)listener
  24. NS_SWIFT_NAME(removeSignalingListener(listener:));
  25. /**
  26. * 邀请某个人
  27. *
  28. * @param invitee 被邀请人用户 ID
  29. * @param data 自定义数据
  30. * @param timeout 超时时间,单位 s,如果设置为 0,SDK 不会做超时检测,也不会触发 onInvitationTimeout 回调
  31. * @param onlineUserOnly 是否只有在线用户才能收到邀请,如果设置为 YES,只有在线用户才能收到,并且 invite 操作也不会产生历史消息(针对该次 invite 的后续 cancel、accept、reject、timeout 操作也同样不会产生历史消息)。
  32. * @param offlinePushInfo 苹果 APNS 离线推送时携带的标题和声音,其中 desc 为必填字段,推送的时候会默认展示 desc 信息。
  33. * @return inviteID 邀请 ID,如果邀请失败,返回 nil
  34. *
  35. */
  36. - (NSString*)invite:(NSString *)invitee
  37. data:(NSString *)data
  38. onlineUserOnly:(BOOL)onlineUserOnly
  39. offlinePushInfo:(V2TIMOfflinePushInfo *)offlinePushInfo
  40. timeout:(int)timeout
  41. succ:(V2TIMSucc)succ
  42. fail:(V2TIMFail)fail;
  43. /**
  44. * 邀请群内的某些人
  45. *
  46. * @param groupID 发起邀请所在群组
  47. * @param inviteeList 被邀请人列表,inviteeList 必须已经在 groupID 群里,否则邀请无效
  48. * @param timeout 超时时间,单位 s,如果设置为 0,SDK 不会做超时检测,也不会触发 onInvitationTimeout 回调
  49. * @param onlineUserOnly 是否只有在线用户才能收到邀请,如果设置为 YES,只有在线用户才能收到,并且 invite 操作也不会产生历史消息(针对该次 invite 的后续 cancel、accept、reject、timeout 操作也同样不会产生历史消息)。
  50. * @return inviteID 邀请 ID,如果邀请失败,返回 nil
  51. *
  52. * @note 群邀请暂不支持离线推送,如果您需要离线推送,可以针对被邀请的用户单独发离线推送自定义消息。
  53. */
  54. - (NSString*)inviteInGroup:(NSString *)groupID
  55. inviteeList:(NSArray *)inviteeList
  56. data:(NSString *)data
  57. onlineUserOnly:(BOOL)onlineUserOnly
  58. timeout:(int)timeout
  59. succ:(V2TIMSucc)succ
  60. fail:(V2TIMFail)fail;
  61. /**
  62. * 邀请方取消邀请
  63. *
  64. * @param inviteID 邀请 ID
  65. *
  66. * @note 如果所有被邀请人都已经处理了当前邀请(包含超时),不能再取消当前邀请。
  67. */
  68. - (void)cancel:(NSString *)inviteID data:(NSString *)data succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  69. /**
  70. * 接收方接受邀请
  71. *
  72. * @note 不能接受不是针对自己的邀请,请在收到 onReceiveNewInvitation 回调的时候先判断 inviteeList 有没有自己,如果没有自己,不能 accept 邀请。
  73. */
  74. - (void)accept:(NSString *)inviteID data:(NSString *)data succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  75. /**
  76. * 接收方拒绝邀请
  77. *
  78. * @note 不能拒绝不是针对自己的邀请,请在收到 onReceiveNewInvitation 回调的时候先判断 inviteeList 有没有自己,如果没有自己,不能 reject 邀请。
  79. */
  80. - (void)reject:(NSString *)inviteID data:(NSString *)data succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  81. /**
  82. * 获取信令信息
  83. *
  84. * 如果 invite 设置 onlineUserOnly 为 NO,每次信令操作(包括 invite、cancel、accept、reject、timeout)都会产生一条自定义消息,该消息会通过 V2TIMAdvancedMsgListener -> onRecvNewMessage 抛给用户,用户也可以通过历史消息拉取,如果需要根据信令信息做自定义化文本展示,可以调用下面接口获取信令信息。
  85. *
  86. * @param msg 消息对象
  87. * @return V2TIMSignalingInfo 信令信息,如果为 nil,则 msg 不是一条信令消息。
  88. */
  89. - (V2TIMSignalingInfo *)getSignallingInfo:(V2TIMMessage *)msg;
  90. /**
  91. * 添加邀请信令
  92. *
  93. * 主要用于邀请者在被邀请者离线期间,发送了群聊邀请,被邀请者上线后将该信令同步给 SDK,从而正常使用信令功能。
  94. *
  95. * 当被邀请者点击离线推送提示,拉起 App 时:
  96. * 1. 如果被邀请者离线期间,邀请者发送的是 1V1 信令,SDK 可以自动同步邀请信令。邀请未超时,回调 onReceiveNewInvitation。
  97. * 2. 如果被邀请者离线期间,邀请者发送的是群聊信令,不同 SDK 版本表现如下:
  98. * - 6.7 以前的版本:
  99. * SDK 无法自动同步邀请信令(信令本质上就是一条自定义消息,群离线消息在程序启动后无法自动同步)。
  100. * 如果被邀请者需要处理该邀请信令,可以让邀请者在发起信令时,向每个被邀请者额外发送一条 C2C 离线推送消息,消息携带 V2TIMSignalingInfo 信息。
  101. * 被邀请者收到离线推送时通过 addInvitedSignaling 将 V2TIMSignalingInfo 信息告知 SDK。
  102. * - 6.7 及以后的版本:
  103. * SDK 会自动同步最近 30 秒的消息。如果其中包含了未超时的邀请信令,回调 onReceiveNewInvitation。您无需再调用本接口同步邀请信令。
  104. *
  105. * @note 如果添加的信令信息已存在,fail callback 会抛 ERR_SDK_SIGNALING_ALREADY_EXISTS 错误码。
  106. */
  107. - (void)addInvitedSignaling:(V2TIMSignalingInfo *)signallingInfo succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  108. /**
  109. * 修改邀请信令(6.7 及其以上版本支持)
  110. *
  111. * @note 仅支持修改邀请信令的自定义字段 data。只有在线用户才能收到的邀请信令不能被修改。
  112. */
  113. - (void)modifyInvitation:(NSString *)inviteID data:(NSString *)data succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  114. @end
  115. V2TIM_EXPORT @protocol V2TIMSignalingListener <NSObject>
  116. @optional
  117. /// 收到邀请的回调
  118. -(void)onReceiveNewInvitation:(NSString *)inviteID inviter:(NSString *)inviter groupID:(NSString *)groupID inviteeList:(NSArray<NSString *> *)inviteeList data:(NSString * __nullable)data;
  119. /// 被邀请者接受邀请
  120. -(void)onInviteeAccepted:(NSString *)inviteID invitee:(NSString *)invitee data:(NSString * __nullable)data;
  121. /// 被邀请者拒绝邀请
  122. -(void)onInviteeRejected:(NSString *)inviteID invitee:(NSString *)invitee data:(NSString * __nullable)data;
  123. /// 邀请被取消
  124. -(void)onInvitationCancelled:(NSString *)inviteID inviter:(NSString *)inviter data:(NSString * __nullable)data;
  125. /// 邀请超时
  126. -(void)onInvitationTimeout:(NSString *)inviteID inviteeList:(NSArray<NSString *> *)inviteeList;
  127. /// 邀请被修改(6.7 及其以上版本支持)
  128. -(void)onInvitationModified:(NSString *)inviteID data:(NSString *)data;
  129. @end
  130. // 操作类型
  131. typedef NS_ENUM(NSInteger,SignalingActionType) {
  132. SignalingActionType_Invite = 1, // 邀请方发起邀请
  133. SignalingActionType_Cancel_Invite = 2, // 邀请方取消邀请
  134. SignalingActionType_Accept_Invite = 3, // 被邀请方接受邀请
  135. SignalingActionType_Reject_Invite = 4, // 被邀请方拒绝邀请
  136. SignalingActionType_Invite_Timeout = 5, // 邀请超时
  137. };
  138. V2TIM_EXPORT @interface V2TIMSignalingInfo : NSObject
  139. @property(nonatomic,strong) NSString *inviteID;
  140. @property(nonatomic,strong) NSString *groupID;
  141. @property(nonatomic,strong) NSString *inviter;
  142. @property(nonatomic,strong) NSMutableArray *inviteeList;
  143. @property(nonatomic,strong) NSString * __nullable data;
  144. @property(nonatomic,assign) uint32_t timeout;
  145. @property(nonatomic,assign) SignalingActionType actionType;
  146. @end