| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- #import "V2TIMManager.h"
- #import "V2TIMManager+Message.h"
- /////////////////////////////////////////////////////////////////////////////////
- // 信令
- /////////////////////////////////////////////////////////////////////////////////
- /// 信令信息
- @class V2TIMSignalingInfo;
- /// 信令监听
- V2TIM_EXPORT @protocol V2TIMSignalingListener;
- V2TIM_EXPORT @interface V2TIMManager (Signaling)
- /**
- * 获取信令信息成功回调
- */
- typedef void (^V2TIMSignalingInfoSucc)(V2TIMSignalingInfo * signalInfo);
- /**
- * 添加信令监听
- */
- - (void)addSignalingListener:(id<V2TIMSignalingListener>)listener
- NS_SWIFT_NAME(addSignalingListener(listener:));
- /**
- * 移除信令监听
- */
- - (void)removeSignalingListener:(id<V2TIMSignalingListener>)listener
- NS_SWIFT_NAME(removeSignalingListener(listener:));
- /**
- * 邀请某个人
- *
- * @param invitee 被邀请人用户 ID
- * @param data 自定义数据
- * @param timeout 超时时间,单位 s,如果设置为 0,SDK 不会做超时检测,也不会触发 onInvitationTimeout 回调
- * @param onlineUserOnly 是否只有在线用户才能收到邀请,如果设置为 YES,只有在线用户才能收到,并且 invite 操作也不会产生历史消息(针对该次 invite 的后续 cancel、accept、reject、timeout 操作也同样不会产生历史消息)。
- * @param offlinePushInfo 苹果 APNS 离线推送时携带的标题和声音,其中 desc 为必填字段,推送的时候会默认展示 desc 信息。
- * @return inviteID 邀请 ID,如果邀请失败,返回 nil
- *
- */
- - (NSString*)invite:(NSString *)invitee
- data:(NSString *)data
- onlineUserOnly:(BOOL)onlineUserOnly
- offlinePushInfo:(V2TIMOfflinePushInfo *)offlinePushInfo
- timeout:(int)timeout
- succ:(V2TIMSucc)succ
- fail:(V2TIMFail)fail;
- /**
- * 邀请群内的某些人
- *
- * @param groupID 发起邀请所在群组
- * @param inviteeList 被邀请人列表,inviteeList 必须已经在 groupID 群里,否则邀请无效
- * @param timeout 超时时间,单位 s,如果设置为 0,SDK 不会做超时检测,也不会触发 onInvitationTimeout 回调
- * @param onlineUserOnly 是否只有在线用户才能收到邀请,如果设置为 YES,只有在线用户才能收到,并且 invite 操作也不会产生历史消息(针对该次 invite 的后续 cancel、accept、reject、timeout 操作也同样不会产生历史消息)。
- * @return inviteID 邀请 ID,如果邀请失败,返回 nil
- *
- * @note 群邀请暂不支持离线推送,如果您需要离线推送,可以针对被邀请的用户单独发离线推送自定义消息。
- */
- - (NSString*)inviteInGroup:(NSString *)groupID
- inviteeList:(NSArray *)inviteeList
- data:(NSString *)data
- onlineUserOnly:(BOOL)onlineUserOnly
- timeout:(int)timeout
- succ:(V2TIMSucc)succ
- fail:(V2TIMFail)fail;
- /**
- * 邀请方取消邀请
- *
- * @param inviteID 邀请 ID
- *
- * @note 如果所有被邀请人都已经处理了当前邀请(包含超时),不能再取消当前邀请。
- */
- - (void)cancel:(NSString *)inviteID data:(NSString *)data succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
- /**
- * 接收方接受邀请
- *
- * @note 不能接受不是针对自己的邀请,请在收到 onReceiveNewInvitation 回调的时候先判断 inviteeList 有没有自己,如果没有自己,不能 accept 邀请。
- */
- - (void)accept:(NSString *)inviteID data:(NSString *)data succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
- /**
- * 接收方拒绝邀请
- *
- * @note 不能拒绝不是针对自己的邀请,请在收到 onReceiveNewInvitation 回调的时候先判断 inviteeList 有没有自己,如果没有自己,不能 reject 邀请。
- */
- - (void)reject:(NSString *)inviteID data:(NSString *)data succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
- /**
- * 获取信令信息
- *
- * 如果 invite 设置 onlineUserOnly 为 NO,每次信令操作(包括 invite、cancel、accept、reject、timeout)都会产生一条自定义消息,该消息会通过 V2TIMAdvancedMsgListener -> onRecvNewMessage 抛给用户,用户也可以通过历史消息拉取,如果需要根据信令信息做自定义化文本展示,可以调用下面接口获取信令信息。
- *
- * @param msg 消息对象
- * @return V2TIMSignalingInfo 信令信息,如果为 nil,则 msg 不是一条信令消息。
- */
- - (V2TIMSignalingInfo *)getSignallingInfo:(V2TIMMessage *)msg;
- /**
- * 添加邀请信令
- *
- * 主要用于邀请者在被邀请者离线期间,发送了群聊邀请,被邀请者上线后将该信令同步给 SDK,从而正常使用信令功能。
- *
- * 当被邀请者点击离线推送提示,拉起 App 时:
- * 1. 如果被邀请者离线期间,邀请者发送的是 1V1 信令,SDK 可以自动同步邀请信令。邀请未超时,回调 onReceiveNewInvitation。
- * 2. 如果被邀请者离线期间,邀请者发送的是群聊信令,不同 SDK 版本表现如下:
- * - 6.7 以前的版本:
- * SDK 无法自动同步邀请信令(信令本质上就是一条自定义消息,群离线消息在程序启动后无法自动同步)。
- * 如果被邀请者需要处理该邀请信令,可以让邀请者在发起信令时,向每个被邀请者额外发送一条 C2C 离线推送消息,消息携带 V2TIMSignalingInfo 信息。
- * 被邀请者收到离线推送时通过 addInvitedSignaling 将 V2TIMSignalingInfo 信息告知 SDK。
- * - 6.7 及以后的版本:
- * SDK 会自动同步最近 30 秒的消息。如果其中包含了未超时的邀请信令,回调 onReceiveNewInvitation。您无需再调用本接口同步邀请信令。
- *
- * @note 如果添加的信令信息已存在,fail callback 会抛 ERR_SDK_SIGNALING_ALREADY_EXISTS 错误码。
- */
- - (void)addInvitedSignaling:(V2TIMSignalingInfo *)signallingInfo succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
- /**
- * 修改邀请信令(6.7 及其以上版本支持)
- *
- * @note 仅支持修改邀请信令的自定义字段 data。只有在线用户才能收到的邀请信令不能被修改。
- */
- - (void)modifyInvitation:(NSString *)inviteID data:(NSString *)data succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
- @end
- V2TIM_EXPORT @protocol V2TIMSignalingListener <NSObject>
- @optional
- /// 收到邀请的回调
- -(void)onReceiveNewInvitation:(NSString *)inviteID inviter:(NSString *)inviter groupID:(NSString *)groupID inviteeList:(NSArray<NSString *> *)inviteeList data:(NSString * __nullable)data;
- /// 被邀请者接受邀请
- -(void)onInviteeAccepted:(NSString *)inviteID invitee:(NSString *)invitee data:(NSString * __nullable)data;
- /// 被邀请者拒绝邀请
- -(void)onInviteeRejected:(NSString *)inviteID invitee:(NSString *)invitee data:(NSString * __nullable)data;
- /// 邀请被取消
- -(void)onInvitationCancelled:(NSString *)inviteID inviter:(NSString *)inviter data:(NSString * __nullable)data;
- /// 邀请超时
- -(void)onInvitationTimeout:(NSString *)inviteID inviteeList:(NSArray<NSString *> *)inviteeList;
- /// 邀请被修改(6.7 及其以上版本支持)
- -(void)onInvitationModified:(NSString *)inviteID data:(NSString *)data;
- @end
- // 操作类型
- typedef NS_ENUM(NSInteger,SignalingActionType) {
- SignalingActionType_Invite = 1, // 邀请方发起邀请
- SignalingActionType_Cancel_Invite = 2, // 邀请方取消邀请
- SignalingActionType_Accept_Invite = 3, // 被邀请方接受邀请
- SignalingActionType_Reject_Invite = 4, // 被邀请方拒绝邀请
- SignalingActionType_Invite_Timeout = 5, // 邀请超时
- };
- V2TIM_EXPORT @interface V2TIMSignalingInfo : NSObject
- @property(nonatomic,strong) NSString *inviteID;
- @property(nonatomic,strong) NSString *groupID;
- @property(nonatomic,strong) NSString *inviter;
- @property(nonatomic,strong) NSMutableArray *inviteeList;
- @property(nonatomic,strong) NSString * __nullable data;
- @property(nonatomic,assign) uint32_t timeout;
- @property(nonatomic,assign) SignalingActionType actionType;
- @end
|