多人通话
本文 介绍了 CallPlus 多人通话的主要功能,包括如何发起多人通话、单人通话转为多人通话等。
因为 CallPlus for iOS 多人通话与一对一通话流程相似,本文仅介绍多人通话与一对一通话有差异的使用方法。我们建议您先按照一对一通话实现完整的通话流程。
发起多人通话
从 CallPlus 2.X 开始,新增 startCallWithUserIds:callType:mediaType:pushConfig:extra: 方法,支持在发起呼叫时通过配置推送属性自定义推送标题等属性。支持携带自定义数据。如不需要配置推送属性,可以使用 startCallWithUserIds:callType:mediaType:。
如果您需要直接发起多人通话,请在 startCallWithUserIds:callType:mediaType:pushConfig:extra: 方法中传入多个远端用户 ID,并设置通话类型为 RCCallPlusGroupType。媒体类型可为视频或音频。您可以创建最多 16 名视频参与者的多人通话,或最多 32 名音频参与者的多人通话。
发起多人通话的方法为异步方法,执行结果在 RCCallPlusResultDelegate 协议的 didStartCallResultCode:callId:busylineUsers: 方法中获取。被叫用户会通过 RCCallPlusEventDelegate 协议的 didReceivedCall:extra: 方法收到来电通知。
接口原型
/// 发起呼叫
- (void)startCallWithUserIds:(NSArray<NSString *> *)userIds
callType:(RCCallPlusType)callType
mediaType:(RCCallPlusMediaType)mediaType
pushConfig:(nullable RCCallPlusPushConfig *)pushConfig
extra:(nullable NSString *)extra;
参数说明
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
userIds | NSArray<NSString *> | 是 | 被叫用户 ID 列表,多人呼叫时传入多个用户 ID |
callType | RCCallPlusType | 是 | 通话类型,多人通话时传入 RCCallPlusGroupType |
mediaType | RCCallPlusMediaType | 是 | 媒体类型(音频、视频) |
pushConfig | [RCCallPlusPushConfig][RCCallPlusPushConfig] | 否 | 推送配置 |
extra | NSString | 否 | 附加信息,透传给被呼叫方 |
示例代码
- (void)startGroupCall {
/// 创建推送配置
RCCallPlusPushConfig *pushConfig = [[RCCallPlusPushConfig alloc] init];
pushConfig.disablePushTitle = NO; // 启用推送标题
/// 发起多人音视频通话
[[RCCallPlusClient sharedInstance] startCallWithUserIds:@[@"userId1",@"userId2"]
callType:RCCallPlusGroupType
mediaType:RCCallPlusAudioVideoMediaType
pushConfig:pushConfig
extra:@"extraString"];
}
/// 发起呼叫结果回调
- (void)didStartCallResultCode:(RCCallPlusCode)code
callId:(nullable NSString *)callId
busylineUsers:(nullable NSArray<RCCallPlusUser *> *)busylineUsers {
if (code == 0) {
// 发起通话成功
}
}
接听多人通话
- 非兼容性变更:从 CallPlus 2.X 开始,不再提供 CallPlus 1.X 的
didReceivedCall:回调方法。请改为使用携带 extra 字段的didReceivedCall:extra:方法。 - 被叫用户必须在连接 IM 之前设置
RCCallPlusEventDelegate代理,并实现didReceivedCall:extra:方法。被叫用户可通过与融云的 IM 连接或者 APNs 的离线推送通知接收来电通知。注意,要通过离线推送接收来电通知,App 必须已集成 APNs 推送,详见集成 APNs 推送。
被叫用户收到来电通知后,可以选择接听或拒绝来电。您可以通过 RCCallPlusSession 的 callId 属性获取通话 ID,可以通过 callType 属性查询通话类型是否为多人通话。
- 接听来电,请使用
acceptWithCallId:pushConfig:方法,或者joinCall:方法。 - 挂断来电,请使用
hangupWithCallId:pushConfig:方法。
接听方法与挂断方法为异步方法,执行结果在 RCCallPlusResultDelegate 的以下代理方法中获取。RCCallPlusCode 为 0 表示成功。
- 接听电话:
didAcceptCallResultCode:callId: - 加入通话:
didJoinCallResultCode:callId: - 挂断电话:
didHangupCallResultCode:callId:
接口原型
/// 接听通话
- (void)acceptWithCallId:(NSString *)callId
pushConfig:(nullable RCCallPlusPushConfig *)pushConfig;
/// 加入进行中的群组通话
- (void)joinCall:(NSString *)callId;
/// 挂断通话
- (void)hangupWithCallId:(NSString *)callId
pushConfig:(nullable RCCallPlusPushConfig *)pushConfig;
参数说明
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
callId | NSString | 是 | 通话 ID |
pushConfig | [RCCallPlusPushConfig][RCCallPlusPushConfig] | 否 | 推送配置 |
示例代码
/// 被叫用户/被邀请用户接收到通话呼叫通知
- (void)didReceivedCall:(RCCallPlusSession *)session
extra:(nullable NSString *)extra {
// 接听来电
[[RCCallPlusClient sharedInstance] acceptWithCallId:session.callId pushConfig:nil];
// 或者加入通话
// [[RCCallPlusClient sharedInstance] joinCall:session.callId];
// 或者挂断来电
// [[RCCallPlusClient sharedInstance] hangupWithCallId:session.callId pushConfig:nil];
}
/// 接听电话结果回调
- (void)didAcceptCallResultCode:(RCCallPlusCode)code callId:(NSString *)callId {
if (code == 0) {
// 接听成功
}
}
/// 加入通话结果回调
- (void)didJoinCallResultCode:(RCCallPlusCode)code callId:(NSString *)callId {
if (code == 0) {
// 加入成功
}
}
/// 挂断电话结果回调
- (void)didHangupCallResultCode:(RCCallPlusCode)code
callId:(nullable NSString *)callId {
if (code == 0) {
// 挂断成功
}
}
邀请他人加入通话
您可以向某些用户发送邀请来让用户进入多人通话。被邀请者可以接受或拒绝您的邀请。
CallPlus 暂不支持取消邀请。