升级指南(V2)
更新时间: 2024/08/23 10:16:57
本文介绍呼叫组件 iOS 端从 V1.8.2 版本升级至 V2 版本的说明和注意事项。
V2.0
- V2.0 版本既包括 V2.0 新版本的接口,也包括原 V1.x 版本的接口(兼容 V1.X 版本)。
- 请确保代码中全使用 V2.0 版本的接口或全使用 V1.x 版本的接口, V2.0 版本的接口和 V1.x 版本的接口不要混用。
新增接口
功能 | 接口名称 |
---|---|
超时设置 | setTimeout |
接口变更
从 V1.8.2 升级至 V2 版本,涉及如下接口方法和接口参数变更,您需要结合实际业务场景更新相关的 App 代码。
请修改对应的类名,替换对应的接口名称,并根据 API 参考中的参数差异,修改相应的实现。
功能 | V1 接口(NERtcCallKit类) | V2 接口(NECallEngine类) | 变更描述 |
---|---|---|---|
初始化 | setupAppKey | setup | 接口名称和接口参数变更。 将 appKey 、 options 等参数合并为 config 参数。 |
呼叫 | call | call | 接口参数变更。 将 userID 、type 、 attachment 等参数合并为 param 参数。 |
接听 | acceptWithToken | accept | 接口名称和接口参数变更。 删除 token 参数。 |
取消呼叫 | cancel | hangup | 接口名称和接口参数变更。 新增 param 参数。 |
拒绝 | rejectWithReason | 接口名称和接口参数变更。 将 reason 、 参数修改为 param 参数。 |
|
挂断 | hangup | 接口参数变更。 新增 param 参数。 |
|
设置本端画布 | setupLocalView | setupLocalView | 参数变更。localView 参数变更为 view 。 |
设置远端画布 | setupRemoteView | setupRemoteView | 参数变更。 删除 userID 参数。remoteView 参数变更为 view 。 |
切换通话类型 | switchCallType | switchCallType | 参数变更。 删除 type 和 state 参数。改为 param 参数。 |
添加代理 | addDelegate | addCallDelegate | 接口名称变更。 |
移除代理 | removeDelegate | removeCallDelegate | 接口名称变更。 |
配置音视频切换是否需要确认 | enableSwitchCallTypeConfirmVideo | setCallConfig | 接口名称和接口参数变更。 将 video 和 audio 参数 合并为 config 参数。 |
邀请回调 | onInvited | onReceiveInvited | 接口名称和接口参数变更。 将 invitor 等参数合并为 info 参数。 |
通话建立的回调 | onUserEnter | onCallConnected | 接口名称和接口参数变更。 将 userID 参数修改为 info 参数。 |
拒绝邀请回调 | onUserReject | onCallEnd | 接口名称和接口参数变更。 将 userID 参数修改为 info 参数。 |
取消邀请回调 | onUserCancel | ||
用户离开回调 | onUserLeave | ||
用户异常离开回调 | onUserDisconnect | ||
用户接受回调 | onUserAccept | ||
用户忙回调 | onUserBusy | ||
通话结束回调 | onCallEnd | 接口参数变更。 增加 info 参数。 |
|
呼叫超时回调 | onCallingTimeOut | ||
呼叫请求已被其他端接收的回调 | onOtherClientAccept | ||
呼叫请求已被其他端拒绝的回调 | onOtherClientReject | ||
连接断开回调 | onDisconnect | 接口名称和接口参数变更。 将 reason 参数修改为 info 参数。 |
删除接口/回调
功能 | 接口/回调 | 集成修改建议 |
---|---|---|
切换通话类型回调 | onCallTypeChange:withState: | 合并为 onCallTypeChange 回调。若您的代码中有用到该接口,请替换为新的接口名称。 |
外部传入RTC Token 回调 | NERtcCallKitTokenHandler | 呼叫组件 V1.8.0 之后, Token 通过IM 获取,不需要业务侧自己实现获取 |
示例代码
以下列举重要功能变更前后的示例代码。
自定义推送内容
-
V1.8.2
使用
pushConfigHandler
回调实现自定义推送内容。[NERtcCallKit sharedInstance].pushConfigHandler = ^(NERtcCallKitPushConfig *config, NERtcCallKitContext *context) { config.pushTitle = @"custom push title"; config.pushContent = @"custom push content"; };
-
V2.0
在呼叫接口的
NECallParam#pushConfig
参数中,每次呼叫主动传入自定义推送内容。NECallParam *param = [[NECallParam alloc] initWithAccId:@"remote accId" withCallType:NECallTypeVideo]; NECallPushConfig *config = [[NECallPushConfig alloc] init]; config.pushTitle = @"custom push title"; config.pushContent = @"custom push content"; ... [[NECallEngine sharedInstance] call:param completion:^(NSError * _Nullable error, NECallInfo * _Nullable callInfo) { }];
关闭话单
-
V1.8.2
初始化呼叫组件时,通过
NERtcCallOptions#disableRecord
参数设置。NERtcCallOptions *options = [[NERtcCallOptions alloc] init]; options.disableRecord = YES; ... [[NERtcCallKit sharedInstance] setupAppKey:@"your app key" options:options];
-
V2.0
如果需要关闭话单,在代理中不做任何操作即可,如果需要自定义话单,代理回调中会携带默认信息,请根据需求自行更改发送。
关闭话单的示例代码如下:
@protocol NERecordProvider <NSObject> - (void)onRecordSend:(NERecordConfig *)config; @end
自定义话单的示例代码如下:
/// 设置发送话单回调(如果实现会截断内部话单流程,请在此实现中自己处理话单发送相关功能) /// @param provider 话单实现接口 - (void)setCallRecordProvider:(id<NERecordProvider>)provider;
私有化配置
-
V1.8.2
私有化和非私有化接口为两个接口,示例代码如下:
NERtcCallOptions *option = [NERtcCallOptions new]; option.APNSCerName = @"推送证书名"; NERtcEngineContext *context = [[NERtcEngineContext alloc] init]; option.supportAutoJoinWhenCalled = YES; NERtcCallKit *callkit = [NERtcCallKit sharedInstance]; context.appKey = @"app key"; NERtcServerAddresses *serverAddress = [[NERtcServerAddresses alloc] init]; // 参考 NERtc 文档对 serverAddress 进行私有化参数配置 // 私有化服务器配置 context.serverAddress = serverAddress; [callkit setupAppKey:@"app key" options:option withContext:context];
-
V2.0
初始化呼叫组件时,根据是否包含
NESetupConfig#rtcInfo
参数,来判断是初始化配置还是公共云配置。NESetupConfig *setupConfig = [[NESetupConfig alloc] initWithAppkey:@"app key"]; NERtcEngineContext *context = [[NERtcEngineContext alloc] init]; NERtcServerAddresses *address = [[NERtcServerAddresses alloc] init]; address.channelServer = @"your channel server"; // 设置RTC私有化服务地址 ... // 设置私有化服务器地址信息 context.serverAddress = address; setupConfig.rtcInfo = context; [[NECallEngine sharedInstance] setup:setupConfig];
初始化 RTC
-
V1.8.2
通过
NERtcCallOptions#globalInit
参数,控制 NERTC SDK 是全局初始化一次,还是每次通话重新初始化以及释放。 - YES:全局初始化。呼叫组件挂断时,不会销毁 NERTC 实例。 - NO:呼叫组件发起呼叫或被叫收到来电时,会自动初始化NERTC 实例。呼叫组件挂断时,销毁 NERTC 实例。NERtcCallOptions *option = [NERtcCallOptions new]; ... option.globalInit = YES; ... NERtcCallKit *callkit = [NERtcCallKit sharedInstance]; [callkit setupAppKey:@"your appkey" options:option];
-
V2.0
通过
NESetupConfig#initRtcMode
参数,控制 NERTC SDK 是全局初始化一次,还是每次通话重新初始化以及释放。 - 1:全局初始化。呼叫组件挂断时,不会销毁 NERTC 实例。 - 2:呼叫组件发起呼叫或被叫收到来电时,会自动初始化NERTC 实例。呼叫组件挂断时,销毁 NERTC 实例。 - 3:呼叫组件发起呼叫或被叫接听来电时,会自动初始化NERTC 实例。呼叫组件挂断时,销毁 NERTC 实例。NECallEngine *engine = [NECallEngine sharedInstance]; NESetupConfig *config = [[NESetupConfig alloc] initWithAppkey:@"your app key"]; ... config.initRtcMode = InitRtcInNeed; ... [engine setup:config];
初始化 IM
-
V1.8.2
初始化呼叫组件时,内部会初始化 IM,开发者无需调用初始化 IM 的接口。
-
V2.0
初始化呼叫组件时,内部不会初始化 IM,开发者需要调用初始化 IM 的接口。具体步骤请参见实现1对1呼叫(含UI集成-V2)。
登录和登出
-
V1.8.2
通过呼叫组件的
-[NERtcCallKit login:]
接口登录 IM,使用-[NERtcCallKit logout:]
接口登出 IM,呼叫组件通过这两个接口透传给 IM 。[[NERtcCallKit sharedInstance] login:@"im accid" token:@"im token" completion:^(NSError * _Nullable error) { }]; [[NERtcCallKit sharedInstance] logout:^(NSError * _Nullable error) { }];
-
V2.0
直接调用 IM 的登录登出接口。
[NIMSDK.sharedSDK.loginManager login:@"accid" token:@"token" completion:^(NSError * _Nullable error) { }]; [NIMSDK.sharedSDK.loginManager logout:^(NSError * _Nullable error) { }];
onCallEnd 回调逻辑变更
V2.0 版本开始,主叫挂断、取消操作、加入 RTC 失败等导致通话无法进行的事件,都会触发 onCallEnd
回调。
UI 组件拦截呼叫请求 & 修改被叫传入UI组件参数
-
V1.8.2
NERtcCallUIConfig *config = [[NERtcCallUIConfig alloc] init]; config.uiConfig.disableShowCalleeView = YES; // 设置ui组件不弹出被叫页面,如果设置为YES,请自己监听回调实现被叫UI [[NERtcCallUIKit sharedInstance] setupWithConfig:config];
-
V2.0
- (void)didCallComingWithInviteInfo:(NEInviteInfo *)inviteInfo withCallParam:(NEUICallParam *)callParam withCompletion:(void (^)(BOOL))completion { // 此回调会携带会呼叫信息,UI组件参数 // 自定义缺省头像被叫传入示例 callParam.remoteDefaultImage = [[SettingManager shareInstance] remoteDefaultImage]; callParam.muteDefaultImage = [[SettingManager shareInstance] muteDefaultImage]; // completion(NO); 拦截被叫呼叫页面弹出,传YES时被叫弹出呼叫页面 completion(YES); }
更新 Token
-
V1.8.2
调用呼叫组件的接口,透传给 IM SDK。
- (void)updateApnsToken:(NSData *)deviceToken - (void)updatePushKitToken:(NSData *)pushkitToken
-
V2.0
开发者直接调用 IM SDK的相关接口。
[[NIMSDK sharedSDK] updateApnsToken:deviceToken]; [[NIMSDK sharedSDK] updatePushKitToken:pushkitToken];
获取 RTC uid 和 IM accid 的对应关系
-
V1.8.2
- 调用
memberOfAccid
接口,根据用户的 IM accid 获取 RTC uid。 - 调用
memberOfUid
接口,根据RTC uid 获取对应的 IM accid。
根据 IM accid 获取用户的 uid :
/// @param accid IM 用户id /// @discussion 只有在通话中才能通过accid获取获取uid - (void)memberOfAccid:(NSString *)accid completion:(nullable void (^)(NIMSignalingMemberInfo *_Nullable info))completion;
根据RTC uid 获取对应的 IM accid :
/// @param uid RTC用户id /// @discussion 只有在通话中才能通过uid获取accid - (void)memberOfUid:(uint64_t)uid completion:(nullable void (^)(NIMSignalingMemberInfo *_Nullable info))completion;
- 调用
-
V2.0 通过
(nullable NECallInfo *)getCallInfo
获取主被叫用户的 accid 和 uid 对应关系。- 获取主叫的 accid 和 uid 对应关系:NECallInfo#callerInfo
- 获取被叫的 accid 和 uid 对应关系:NECallInfo#calleeInfo