升级指南(V2)

更新时间: 2023/08/11 03:00:08

本文介绍呼叫组件 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 接口名称和接口参数变更。
appKeyoptions 等参数合并为 config 参数。
呼叫 call call 接口参数变更。
userIDtypeattachment 等参数合并为 param 参数。
接听 acceptWithToken accept 接口名称和接口参数变更。
删除 token 参数。
取消呼叫 cancel hangup 接口名称和接口参数变更。
新增 param 参数。
拒绝 rejectWithReason 接口名称和接口参数变更。

reason、 参数修改为 param 参数。
挂断 hangup 接口参数变更。
新增 param 参数。
设置本端画布 setupLocalView setupLocalView 参数变更。
localView 参数变更为 view
设置远端画布 setupRemoteView setupRemoteView 参数变更。
删除 userID 参数。remoteView 参数变更为 view
切换通话类型 switchCallType switchCallType 参数变更。
删除 typestate 参数。改为 param 参数。
添加代理 addDelegate addCallDelegate 接口名称变更。
移除代理 removeDelegate removeCallDelegate 接口名称变更。
配置音视频切换是否需要确认 enableSwitchCallTypeConfirmVideo setCallConfig 接口名称和接口参数变更。
videoaudio 参数 合并为 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
此文档是否对你有帮助?
有帮助
去反馈
  • V2.0
  • 新增接口
  • 接口变更
  • 删除接口/回调
  • 示例代码
  • 自定义推送内容
  • 关闭话单
  • 私有化配置
  • 初始化 RTC
  • 初始化 IM
  • 登录和登出
  • onCallEnd 回调逻辑变更
  • UI 组件拦截呼叫请求 & 修改被叫传入UI组件参数
  • 更新 Token
  • 获取 RTC uid 和 IM accid 的对应关系