概述
555 RTC SDK 提供了 APIs,允许 iOS 开发者创建具有音频/视频/PSTN 通话、会议通话、聊天、屏幕共享等不同功能的 app。SDK 提供的服务由 555 平台的可靠且可扩展的基础设施支持,该基础设施旨在处理大量通话。
以下步骤允许用户进行端到端 PSTN 通话。这包括用户认证、登录、创建媒体连接的通知。
- 按照安装指南将 SDK 集成到项目中。
- 从555门户获取API密钥和访问令牌。
- 完成登录以获取访问任何SDK或后端API所需的JWT。
- 按照通知指南来实现应用中对APNS通知的支持。
- 使用以下SDK API文档来制作来电/去电PSTN电话。
用法
PSTN 呼叫
本文档列出所有 SDK API 调用以及它们在发起/接收 PSTN 呼叫和使用高级呼叫功能如呼叫保持/释放、静音/取消静音等的使用方法。
在发起或接收 PSTN 呼叫之前,确保您已登录到 555 平台。这里登录。
SDK初始化
以下API用于初始化并设置SDK的上下文。建议在应用程序启动时调用此API。
Rtc555Sdk.initializeLibrary()
添加SDK配置。
为了进行PSTN/语音相关API调用,SDK需要有以下提到的必填配置数据,以便与555平台后端建立连接。
let config:Rtc555Config = Rtc555Sdk.sharedInstance.getConfig()
config.phoneNumber = // Source Telephone Number
config.routingId = // 555 platform login response will provide unique id for the logged in user.
config.url = // Event manager URL
config.token = /// 555 platform login response will provide unique jwt token for the logged in user.
Rtc555Sdk.setConfig(config: config)
发起电话拨打
要发起电话拨打,请将目标电话号码和通知有效载荷传递给dial API。通知有效载荷包含两个字段,分别是data和notification。用户可以在data键的部分添加任何自定义数据,这些数据将成为通知的一部分发送到远程端。通知键包含通知类型和联邦通知类型(以下示例中这两个值均已填充)。
dial API返回枚举类型为Result。成功的拨打电话API调用将返回电话ID,失败情况返回错误代码和错误原因。
Rtc555Voice.dial( number: targetTelephoneNumber, notificationPayload:buildNotificationPayload()){ result in
switch result {
case .success(let callId):
print("Dial was success and callid is = \(callId)")
case .failure(let error):
print(error)
}
}
//build notification payload
private func buildNotificationPayload() -> String{
let data = ["cname" : <Source Telephone Number>, // source telephone number
"cid" : <Source Telephone Number>, // source telephone number
"tar" : <Target Telephone Number>] // target telephone number
let notificationPayload = ["type" : "pstn",
"topic": "federation/pstn"]
let userData = ["data": data, "notification" : notificationPayload]
do{
let jsonData = try JSONSerialization.data(withJSONObject: userData, options: JSONSerialization.WritingOptions.prettyPrinted)
return String(data: jsonData, encoding: String.Encoding.utf8)!
}catch {
Log.e("Error creating notification payload")
}
return " "
}
参数 | 类型 | 描述 |
---|---|---|
targetTelephoneNumber | 字符串 | 包含目标10位电话号码 |
notificationPayload | 字典 | cname, cid, targtid,type,topic |
以下是为外出通知Data构建通知有效载荷
参数 | 类型 | 描述 |
---|---|---|
data | 字典 |
|
notification | 字典 |
|
注意:请在访问Dial/Accept呼叫API之前,确保在您的info.plist文件中添加必选麦克风权限,以便允许SDK创建本地音频流。
接听/拒绝来电
当用户收到PSTN来电提醒时,用户可以选择
接受通话
如果用户想接受 incoming PSTN 通话请求,请使用 accept API 并传入从 incoming APNS 推送通知接收到的通知有效载荷。 accept API 返回枚举结果。结果成功的情况将返回通话 ID,失败情况返回错误代码和错误原因。
Rtc555Voice.rtcDelegate = self
Rtc555Voice.accept(notificationData: notificationdata){ result in
switch result {
case .success(let callId):
print("callId :: \(callId)")
self.callId = callId
case .failure(let error):
print(error)
}
}
传递在 incoming 通知中接收到的通知有效载荷。
参数 | |
---|---|
trace_id | 跟踪 ID |
room_id | 需要加入的房间名称,该名称包含在通知有效载荷中。 |
room_token | 包含在通知有效载荷中的房间令牌。 |
room_token_expiry_time | 从通知有效载荷中检索到的房间令牌过期时间。 |
to_routing_id | toRoutingId |
rtc_server | 从通知有效载荷中提取的 RTC 服务器 URL。 |
拒绝来电
用户可以使用拒绝 API 拒绝来电。通过传入接收到的来电 APNs 推送通知的负载。
Rtc555Voice.reject(notificationData: notificationdata){ result in
switch result {
case .success(let callId):
print("Reject was success = \(callId)")
self.callId = result
case .failure(let error):
print(error)
}
}
参数 | |
---|---|
trace_id | 跟踪 ID |
room_id | 需要加入的房间名称,该名称包含在通知有效载荷中。 |
room_token | 包含在通知有效载荷中的房间令牌。 |
room_token_expiry_time | 从通知有效载荷中检索到的房间令牌过期时间。 |
to_routing_id | toRoutingId |
rtc_server | 从通知有效载荷中提取的 RTC 服务器 URL。 |
结束活动通话
用户需要调用挂断API来结束正在通话。
Rtc555Voice.hangup(callId: callId)
参数 | |
---|---|
callId | callId是此通话的唯一标识符,由拨号/接受API返回。 |
清理会话。
在Rtc555Sdk中调用以下API来释放SDK使用的所有资源。此调用还允许客户端与555平台后端断开连接。如果应用进入后台或终止状态,应用开发者应调用此API。
Rtc555Sdk.cleanup()
在呼功能
由iOS SDK提供用于PSTN通话的功能包括
挂断电话
此API调用允许用户挂起当前通话。在调用此通话之后,主叫和被叫双方将无法相互听到对方。
Rtc555Voice.hold(callId: callIds)
参数 | |
---|---|
callId | callId是此通话的唯一标识符,由拨号/接受API返回。 |
解除通话
此API调用允许用户解除已持有的通话。调用此调用后,主叫方和被叫方将能够互相听到对方。
Rtc555Voice.unhold(callId: callId)
参数 | |
---|---|
callId | callId是此通话的唯一标识符,由拨号/接受API返回。 |
静音本地音频
这个API调用允许用户在通话中静音其音频。
Rtc555Voice.mute(callId: callId)
参数 | |
---|---|
callId | callId是此通话的唯一标识符,由拨号/接受API返回。 |
取消本地音频静音
此API调用允许用户取消通话中的音频静音。
Rtc555Voice.unmute(callId: callId)
参数 | |
---|---|
callId | callId是此通话的唯一标识符,由拨号/接受API返回。 |
要获取通话状态或错误报告,实现 Rtc555SdkDelegate 协议并将音频委托初始化如下
Rtc555Voice.rtcDelegate = self
onStatus
当接收到进行中的PSTN电话状态时,此回调将被调用。
func onStatus(status callStatus: CallStatus,id callId:String) {
}
参数 | |
---|---|
状态 | 进行中电话的状态 |
callId | 从后端接收到的callId |
状态
- 初始化 - 当电话正在初始化时
- 连接 - 当电话正在连接时
- 已连接 - 当电话已连接时
- 已断开连接 - 当电话已断开连接时
- 挂起 - 当电话处于挂起状态时
onError
此回调在接收到进行的PSTN通话错误时被调用。
func onError(error errorInfo: Error,id callId:String) {
}
参数 | |
---|---|
错误信息 | 错误对象包含错误代码和错误消息 |
callId | 从后端接收到的callId |
onNotification
如果您想使用XMPP通知(而不是APNS),请使用此可选的代理调用。客户需要连接到555后端才能获取此通知回调。
@objc func onNotification(notification notificationData: [AnyHashable : Any]) {
}
参数 | |
---|---|
notificationData | 进来通知的通知有效载荷 |