浏览 SDKs · iOS
平台
SDKsiOS商业版

处理通话事件

集中设置和移除 iOS SDK 的通话信令 delegate。

复制

通话状态层实现稳定的 OIMSignalingListener,并使用同一实例注册和移除:

@interface CallStore () <OIMSignalingListener>
@end

@implementation CallStore

- (void)startListening {
    [[OIMManager callbacker] addSignalingListener:self];
}

- (void)stopListening {
    [[OIMManager callbacker] removeSignalingListener:self];
}

- (void)onReceiveNewInvitation:(OIMSignalingInfo *)info {
    [self upsertCall:info state:@"ringing"];
}
- (void)onInviteeAccepted:(OIMSignalingInfo *)info { [self mergeCall:info state:@"accepted"]; }
- (void)onInviteeRejected:(OIMSignalingInfo *)info { [self mergeCall:info state:@"rejected"]; }
- (void)onInvitationCancelled:(OIMSignalingInfo *)info { [self finishCall:info.invitation.roomID]; }
- (void)onInvitationTimeout:(OIMSignalingInfo *)info { [self finishCall:info.invitation.roomID]; }
- (void)onInviteeAcceptedByOtherDevice:(OIMSignalingInfo *)info { [self stopRinging:info.invitation.roomID]; }
- (void)onInviteeRejectedByOtherDevice:(OIMSignalingInfo *)info { [self stopRinging:info.invitation.roomID]; }
- (void)onHunguUp:(OIMSignalingInfo *)info { [self finishCall:info.invitation.roomID]; }
- (void)onRoomParticipantConnected:(OIMParticipantConnectedInfo *)info {
    [self mergeParticipants:info roomID:info.roomID];
}
- (void)onRoomParticipantDisconnected:(OIMParticipantConnectedInfo *)info {
    [self removeParticipants:info roomID:info.roomID];
}
- (void)onStreamChange:(OIMMeetingStreamEvent *)event {
    [self updateStream:event roomID:event.roomID];
}

@end

所有通话信令事件均按 roomID 为合并标识,参与者状态同时使用用户 ID。在退出登录、切换账号或销毁通话状态管理层时,必须使用注册时的同一 listener 实例调用移除监听方法,以避免内存泄漏与跨账号事件干扰。