talkplus-webrtc-ios 0.6.2

talkplus-webrtc-ios 0.6.2

JCLEE 维护。



 
依赖
talkplus-ios= 0.6.3
WebRTC-lib= 123.0.0
 

  • Neptune

talkplus-webrtc-ios

Platform Languages Languages License: MIT

talkplus-webrtc-ios SDK 介绍

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 以上版本进行构建和测试。

SDK 安装

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

依赖库(Dependencies)

iOS 项目设置

info.plist 文件设置

推送通知激活

  • 在 Xcode 项目 > Signing & Capabilities > 点击顶部 + Capability > Push Notification 添加

背景模式设置

  • 在 Xcode 项目 > Signing & Capabilities > 选择 Voice over IP
  • 在 Xcode 项目 > Signing & Capabilities > 选择 Remote Notifications

构建和运行示例应用程序

此存储库中的示例应用程序配置为使用 CallKitPushKit 来请求通话或接收通话。
按照以下步骤测试此示例应用程序。

只能单独使用 PushKit,必须 Additionally 添加 CallKit

添加 PushKit 后,如果调用 pushRegistry(_:didReceiveIncomingPushWith:for:completion:) 方法,则需要调用 reportNewIncomingCall(with:update:completion:) 方法。否则可能会发生错误终止(CRASH)。有关使用 PushKit 接收 VoIP 通知的进一步说明,请参阅以下链接。
通过 PushKit 接收 VoIP 通知的处理

TalkPlus 应用程序创建

  1. 使用 TalkPlus 仪表板 登录或注册。
  2. 点击 'Apps > 创建新应用' 按钮创建 TalkPlus 应用程序
  3. Apps > [创建的应用名称] > Settings > 检查 App ID
  4. 应用 > [创建的应用名称] > 设置 > 匿名登录 (匿名用户) 启用
  5. 应用 > [创建的应用名称] > 频道 > 创建频道 点击
    选择频道类型为 PUBLIC,输入 频道名 后点击 创建 按钮。
  6. 通过上述步骤,确认生成的 App IDChannel ID 对应的字符串信息。

输入应用程序标识符 (App ID),频道标识符 (Channel ID) 和用户标识符 (User ID)。

  1. 打开样本应用 (TalkPlusWebRTCSwift.xcworkspace) 工作空间文件。

  2. AppDelegate.swift 文件 > application(_:didFinishLaunchingWithOptions:) 方法 > 将 YOUR_APP_ID 字符串替换为之前步骤中创建的 App ID

  3. AppDelegate.swift 文件 > talkPlusLogin 方法 > 确认匿名登录所使用的用户标识符 (User ID)。

    在提供的样本应用中,假设使用 test1test2 作为用户标识符(User ID)进行登录。

    如果有两台设备,则在一个设备上使用用户标识符 test1 运行应用,而在另一个设备上运行应用时将用户标识符值更改为 test2

  4. VideoCallViewController.swift 文件 > didTapMakeCall(_:) 方法 > 将 YOUR_CHANNEL_ID 字符串替换为之前步骤中创建的 Channel ID

VoIP专用证书及Push Token

使用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证书)。

VoIP专用证书创建方法

  1. 登录Apple开发者网站
  2. 证书、标识符及配置文件 部分,选择 证书
  3. 点击 Certificate + 按钮
  4. 服务 部分,选择 VoIP服务证书 后点击 继续 按钮
  5. 选择将添加VoIP服务的 App ID (Bundle ID) 后点击 继续 按钮
  6. 执行MacOS密钥链访问 (Keychain Access) > 通过 密钥链访问 - 证书支持 - 从认证机构请求证书 菜单创建 Certificate Signing Request (CSR) 文件
  7. 上传创建的CSR文件后,点击 继续 按钮
  8. 确认 Certificate Type 显示为 VoIP Services 后,点击 下载 按钮下载证书

APIs

APIs

// 영상통화 요청
- (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;

Delegate (Events)

@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许可证下使用。