本文将介绍如何快速完成 TUICallKit 组件的接入，您将在 10 分钟内完成以下几个关键步骤，并最终得到一个包含完备 UI 界面的视频通话功能。
| 1v1 视频通话 | 群组通话 |
| --- | --- |
|  |  |

## 环境准备
- Xcode 13 及以上。

- iOS 13.0 及以上。

- CocoaPods 环境安装，单击 [查看](https://guides.cocoapods.org/using/getting-started.html)。

- 如果您的接入和使用中遇到问题，请参见 常见问题。

## 步骤一：开通服务

请参见 开通服务，获取 `SDKAppID、SDKSecretKey`，他们将在 步骤四：初始化 TUICallKit 组件 作为**必填参数**使用。

## 步骤二：导入组件

使用 CocoaPods 导入组件，如果您遇到问题，请先参见 环境准备。导入组件具体骤如下：
1. 请在您的 `Podfile` 文件中添加 `pod 'TUICallKit_Swift'` 依赖，建议指定`Subspec`为`Professional`，如果您遇到任何问题，请参见 [Example](https://github.com/Tencent-RTC/TUICallKit/blob/main/iOS/Example/Podfile) 工程。

   ``` bash
   target 'xxxx' do
     ...
     pod 'TUICallKit_Swift/Professional'
   end
   ```

   > **说明：**
   >

   > 如果您的项目中缺少`Podfile` 文件，您需要在终端中`cd` 到`xxxx.xcodeproj`目录，然后，通过执行以下命令来创建`Podfile`文件：
   >
   > `pod init`

2. 在终端中，首先`cd`到`Podfile`目录下，然后执行以下命令，安装组件。

   ``` bash
   pod install
   ```

   > **说明：**
   >

   > 如果无法安装 TUICallKit 最新版本，可以先删除 **Podfile.lock **和 **Pods**。然后执行以下命令更新本地的 CocoaPods 仓库列表。
   >
   > `pod repo update`

   > 之后执行以下命令，更新组件库的 Pod 版本。
   >
   > `pod update`

3. 建议您编译并运行一次。如果遇到问题，可以参见我们的 常见问题。如果问题仍未解决，您可以尝试运行我们的 [Example](https://github.com/Tencent-RTC/TUICallKit/tree/main/iOS/Example) 工程。在接入和使用过程中，如果遇到问题，欢迎向我们 [反馈](https://github.com/Tencent-RTC/TUICallKit/issues)。

## 步骤三：工程配置

使用音视频功能，需要授权摄像头和麦克风的使用权限，请根据实际项目需要，设置项目所需权限。
1. 在 **Xcode** 中，选择 **TARGETS** > **Info** > **Custom iOS Target Properties **菜单。

2. 单击 **+**，添加摄像头和麦克风权限。

- `Privacy - Camera Usage Description`

- `Privacy - Microphone Usage Description`

## 步骤四：登录 TUI 组件

   在您的项目中添加如下代码，它的作用是通过调用 TUICore 中的相关接口完成 TUI 组件的登录。这一步骤至关重要，只有在成功登录之后，您才能正常使用 TUICallKit 提供的各项功能。

【Swift】
``` swift
import TUICore
import TUICallKit_Swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    let userID = "denny"       // 请替换为您的 UserId
    let sdkAppID: Int32 = 0    // 请替换为第一步在控制台得到的 SDKAppID
    let secretKey = "****"     // 请替换为第一步在控制台得到的 SecretKey

    let userSig = GenerateTestUserSig.genTestUserSig(userID: userID, sdkAppID: sdkAppID, secretKey: secretKey)

    TUILogin.login(sdkAppID, userID: userID, userSig: userSig) {
      print("login success")
    } fail: { code, message in
      print("login failed, code: \(code), error: \(message ?? "nil")")
    }

    return true
}
```

【Objective-C】
``` objectivec
#import <TUICore/TUILogin.h>
#import <TUICallKit_Swift/TUICallKit_Swift-Swift.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    NSString *userID = @"denny";     // 请替换为您的 UserId
    int sdkAppID = 0;                // 请替换为第一步在控制台得到的 SDKAppID
    NSString *secretKey = @"****";   // 请替换为第一步在控制台得到的 SecretKey

    NSString *userSig = [GenerateTestUserSig genTestUserSigWithUserID:userID sdkAppID:sdkAppID secretKey:secretKey];

    [TUILogin login:sdkAppID
             userID:userID
            userSig:userSig
               succ:^{
        NSLog(@"login success");
    } fail:^(int code, NSString * _Nullable msg) {
        NSLog(@"login failed, code: %d, error: %@", code, msg);
    }];

    return YES;
}
```

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| userID | String | 客户根据自己的业务自定义用户 ID，只允许包含大小写英文字母(a-z A-Z)、数字(0-9)及下划线和连词符。 |
| sdkAppID | Int32 | 在 [实时音视频 TRTC 控制台](https://console.cloud.tencent.com/trtc) 创建的音视频应用的唯一标识 SDKAppID。 |
| secretKey | String | 在 [实时音视频 TRTC 控制台](https://console.cloud.tencent.com/trtc) 创建的音视频应用的 SDKSecretKey。 |
| userSig | String | 一种安全保护签名，用于对用户进行登录鉴权认证，确认用户是否真实，阻止恶意攻击者盗用您的云服务使用权。 |

   > **注意：**
   >
>   - **开发环境**：如果您处于本地开发调试阶段，可以使用本地 GenerateTestUserSig.genTestSig 函数生成 userSig。但请注意，该方法中的 secretKey 容易被反编译逆向破解。一旦密钥泄露，攻击者可能盗用您的腾讯云流量。
>   - **生产环境**：如果您的项目要发布上线，请采用 服务端生成 UserSig 的方式。

## 步骤五：拨打您的第一通电话

通过调用 TUICallKit 的 calls 函数并指定通话类型和被叫方的 userId，就可以发起语音或者视频通话。

【Swift】
``` swift
import TUICallKit_Swift
import RTCRoomEngine

// 发起1对1语音通话(假设 userId 为 mike)
TUICallKit.createInstance().calls(userIdList: ["mike"], callMediaType: .audio, params: nil) {

} fail: { code, message in

}
```

【Objective-C】
``` objectivec
#import <TUICallKit_Swift/TUICallKit_Swift-Swift.h>
#import <RTCRoomEngine/TUICallEngine.h>

// 发起1对1语音通话(假设 userId 为 mike)
[[TUICallKit createInstance] calls:@[@"mike"] callMediaType:TUICallMediaTypeAudio params:NULL succ:^{
} fail:^(int code, NSString * _Nullable errMsg) {
}];
```
| 主叫方 | 被叫方 |
| --- | --- |
|  |  |

## 更多特性
- 界面定制

- 离线推送

- 多人通话

- 悬浮窗

- 美颜特效

- 自定义铃声

- 监听通话状态

- 云端录制

## 常见问题

如果您的接入和使用中遇到问题，请参见 常见问题。

## 交流与反馈
- 如果您在使用过程中，有什么建议或者意见，可以在这里反馈：[TUICallKit 产品反馈问卷](https://wj.qq.com/s2/10796805/6960/)，感谢您的反馈。

- 如果您是开发者，也欢迎您加入我们的 TUICallKit 技术交流平台 [zhiliao](https://zhiliao.qq.com/s/cWSPGIIM62CC/cEUPGIIM62CE)，进行技术交流和产品沟通。
