iOS 版 TalkPlus WebRTC SDK 使用 Objective-C 语言编写,可以用于在 iOS 客户端应用程序中构建语音和视频通话功能。在这个存储库中,您可以找到在项目之前实现 TalkPlus WebRTC SDK 所需的某些步骤,以及使用 Swift 语言和 UIKit 编写的示例应用程序。
不支持多方通话(群组通话),仅支持一对一(1:1)通话。
进行通话需要频道标识符(Channel ID)+ 用户标识符(User ID)信息。
使用 talkplus-webrtc-ios SDK 的最小要求
- Xcode 15.0+
- 已安装 iOS / iPadOS 12.0+ 的实际设备(物理设备)
从 2024 年 4 月 29 日起,如果要将应用程序提交到苹果应用商店,需要使用 Xcode 15.0 以上版本进行构建和测试。
talkplus-webrtc-ios SDK 可以通过 CocoaPods 安装。
pod 'talkplus-webrtc-ios'
在 macOS 上打开终端(Terminal),然后转到您的应用程序项目目录,使用以下命令打开 Podfile
。
$ open Podfile
请确认 Podfile
文件中包含以下内容。
platform :ios, '12.0'
target 'Project' do
use_frameworks!
pod 'talkplus-webrtc-ios'
end
使用 CocoaPods CLI 命令安装 talkplus-webrtc-ios
框架。
$ pod install --repo-update
- 在 Xcode 项目 > Info > Custom iOS Target Properties > NSMicrophoneUsageDescription 键中添加
- 在 Xcode 项目 > Info > Custom iOS Target Properties > NSCameraUsageDescription 键中添加
- 在 Xcode 项目 > Signing & Capabilities > 点击顶部
+ Capability
>Push Notification
添加
- 在 Xcode 项目 > Signing & Capabilities > 选择
Voice over IP
- 在 Xcode 项目 > Signing & Capabilities > 选择
Remote Notifications
此存储库中的示例应用程序配置为使用 CallKit 和 PushKit 来请求通话或接收通话。
按照以下步骤测试此示例应用程序。
只能单独使用 PushKit,必须 Additionally 添加 CallKit
添加 PushKit 后,如果调用 pushRegistry(_:didReceiveIncomingPushWith:for:completion:) 方法,则需要调用 reportNewIncomingCall(with:update:completion:) 方法。否则可能会发生错误终止(CRASH)。有关使用 PushKit 接收 VoIP 通知的进一步说明,请参阅以下链接。
通过 PushKit 接收 VoIP 通知的处理
- 使用 TalkPlus 仪表板 登录或注册。
- 点击 'Apps > 创建新应用' 按钮创建 TalkPlus 应用程序
- Apps > [创建的应用名称] > Settings > 检查
App ID
- 应用 > [创建的应用名称] > 设置 >
匿名登录 (匿名用户)
启用 - 应用 > [创建的应用名称] > 频道 >
创建频道
点击
选择频道类型为PUBLIC
,输入频道名
后点击创建
按钮。 - 通过上述步骤,确认生成的
App ID
和Channel ID
对应的字符串信息。
-
打开样本应用 (TalkPlusWebRTCSwift.xcworkspace) 工作空间文件。
-
在
AppDelegate.swift
文件 >application(_:didFinishLaunchingWithOptions:)
方法 > 将YOUR_APP_ID
字符串替换为之前步骤中创建的App ID
。 -
在
AppDelegate.swift
文件 >talkPlusLogin
方法 > 确认匿名登录所使用的用户标识符 (User ID)。在提供的样本应用中,假设使用
test1
和test2
作为用户标识符(User ID)进行登录。如果有两台设备,则在一个设备上使用用户标识符
test1
运行应用,而在另一个设备上运行应用时将用户标识符值更改为test2
。 -
在
VideoCallViewController.swift
文件 >didTapMakeCall(_:)
方法 > 将YOUR_CHANNEL_ID
字符串替换为之前步骤中创建的Channel ID
。
使用VoIP Push Notification
而不是普通的Push Notification
,即使应用已关闭或在后台运行,的应用也能接收通话请求。
应用处于前台时可以直接接收通话请求事件(
didReceiveCallIncoming:
),但在应用处于后台或关闭状态时则不能接收这些事件。因此,需要通过PushKit来处理通话请求事件。
若要发起通话或接收通话,需要通过以下方法调用VoIP Push Token并将其传递给TalkPlus服务器。
- (void)registerVoIPPushToken:(NSData *_Nonnull)token
success:(void (^_Nullable)(void))successBlock
failure:(void (^_Nonnull)(int errorCode, NSError * _Nullable error))failureBlock;
应用启动后,通过创建PKPushRegistry对象来确保在调用pushRegistry(_:didUpdate:for:)方法时,调用上述方法将推送令牌传递给服务器。
并在Apple开发者网站上创建VoIP专用证书,并将证书注册到TalkPus服务器上。此证书用于发送VoIP Push Notification。请通过技术支持注册VoIP专用证书(APNs证书)。
- 登录Apple开发者网站
- 在
证书、标识符及配置文件
部分,选择证书
。 - 点击
Certificate +
按钮 - 在
服务
部分,选择VoIP服务证书
后点击继续
按钮 - 选择将添加VoIP服务的
App ID (Bundle ID)
后点击继续
按钮 - 执行MacOS密钥链访问 (Keychain Access) > 通过
密钥链访问 - 证书支持 - 从认证机构请求证书
菜单创建Certificate Signing Request (CSR)
文件 - 上传创建的CSR文件后,点击
继续
按钮 - 确认
Certificate Type
显示为VoIP Services
后,点击下载
按钮下载证书
// 영상통화 요청
- (void)makeCall:(TalkPlusCallParams * _Nonnull)params
completion:(void(^_Nullable)(BOOL result, TalkPlusCall *_Nullable))completion;
// 영상통화 요청에 대한 수락
- (void)acceptCall:(void(^_Nullable)(BOOL result, TalkPlusCall *_Nullable))completion;
// 영상통화 종료/거절/취소
- (void)endCall:(void(^_Nullable)(BOOL result, TalkPlusCall *_Nullable))completion;
// 영상통화 관련 이벤트를 수신하기 위한 객체 등록
- (void)addDelegate:(id<TPWebRTCClientDelegate>_Nonnull)delegate
identifier:(NSString * _Nonnull)identifier
// 영상통화 관련하여 등록된 객체 등록 해제
- (void)removeDelegate:(NSString * _Nonnull)identifier;
// 영상통화 관련하여 등록된 모든 객체 등록 해제
- (void)removeAllDelegates;
// 오디오 또는 비디오 트랙의 활성화 또는 비활성화
- (void)setEnableTrack:(BOOL)isEnabled track:(RTCMediaStreamTrack * _Nonnull)track;
// 오디오 또는 비디오 트랙의 활성화 여부
- (BOOL)isTrackEnabled:(RTCMediaStreamTrack * _Nonnull)track;
// VoIP 전용 Push Notification Token를 TalkPlus 서버로 전송
- (void)registerVoIPPushToken:(NSData *_Nonnull)token
success:(void (^_Nullable)(void))successBlock
failure:(void (^_Nonnull)(int errorCode, NSError * _Nullable error))failureBlock;
// VoIP 전용 Push Notification의 페이로드(Payload) 데이터를 SDK에서 처리
- (void)voipPushRegistry:(NSDictionary * _Nullable)payload;
@protocol TPWebRTCClientDelegate <NSObject>
@required
- (void)didReceiveCallIncoming:(TalkPlusCall *_Nonnull)call; // 통화 요청 수신
- (void)didReceiveCallEnd:(TalkPlusCall *_Nonnull)call; // 통화 종료/취소/거절
- (void)didReceiveCallConnect:(TalkPlusCall *_Nonnull)call; // 통화 연결 성공
- (void)didReceiveCallDisconnected:(TalkPlusCall *_Nonnull)call; // 연결이 일시적으로 끊힌 경우
- (void)didReceiveCallFailed:(TalkPlusCall *_Nonnull)call; // 연결 실패 또는 재연결 불가
@optional
- (void)didReceiveCallError:(TalkPlusCall *_Nonnull)call // 통화 연결 에러 발생
error:(NSDictionary *_Nonnull)error;
- (void)didReceiveStateChange:(TalkPlusCall *_Nonnull)call // 통화 연결 상태 변경
newState:(RTCIceConnectionState)newState;
@end
Neptune公司
talkplus-webrtc-ios SDK可在MIT许可证下使用。