客户端实现
本文介绍如何使用声网灵隼纯呼叫版本的客户端示例项目在 iOS 客户端实现呼叫和通话等功能。
纯呼叫版本的客户端示例项目提供呼叫、实时音视频等功能。你需要自行实现账号管理和设备管理相关逻辑。
如果你已有自研的设备管理等模块,声网建议你使用纯呼叫版本示例项目。
前提条件
开始前,请确保你的开发环境满足以下条件:
- Xcode(推荐最新版本)。
- iOS 12.0 或以上版本的 Apple 设备。
- 参考开通并配置声网灵隼物联网服务开通灵隼服务。
业务流程
在纯呼叫模式下,你需要自行实现账号系统与设备管理功能。基本流程如下:
跑通示例项目
-
从 GitHub 上下载最新版本的 iOS 客户端示例项目。
-
在项目的根目录运行
pod install
安装依赖。 -
连接上 iOS 设备后,点击
.xcworkspace
文件打开项目,并在 iOS Device 选项中勾选上你的 iOS 设备。 -
使用 Xcode 打开项目。修改配置文件
Config.swift
,将以下配置项修改为你在灵隼控制台的应用配置>>开发者选项页面中获取的相关参数。详见开通并配置声网灵隼服务。Swift// 声网灵隼控制台的应用配置>>开发者选项中的 App ID
public static let appId = "4b31f**********************3037" //appid
// 声网灵隼控制台的应用配置>>开发者选项中的 Project ID
public static let projectId:String = "a******_C" // 项目id"
// 声网灵隼控制台的应用配置>>开发者选项中的 Easemob App Key
public static let ntfAppKey: String = "52****88#3****2" //离线推送的appkey
// APNS 证书名。用于离线推送。在开通声网灵隼服务之后,可以在应用配置页面中的开发者选项选项卡中获取
public static let ntfApnsCertName:String = "xxx.xxx.xxx"//离线推送的AnpsCertName
// 声网灵隼控制台的应用配置>>开发者选项中的 Master Server URL
public static let masterServerUrl:String = "https://un2nfllop5.execute-api.cn-north-1.amazonaws.com.cn/Prod"
// 声网灵隼控制台的应用配置>>开发者选项中的 Slave Server URL
public static let slaveServerUrl:String = "https://api.sd-rtn.com/agoralink/cn/api" -
在项目 TARGETS 下的 Signing & Capabilities 界面勾选 Automatically manage signing,配置你的苹果开发者账号和 Bundle Identifier。
-
连接上 Apple 设备后,编译并运行项目。
-
进入主界面,直接输入要登录的账号名称。
-
登录成功后,会显示当前账号信息。 如果要呼叫的对端是一个设备,你可以根据设备的 (Porduct Key + deviceId) 来计算出设备的账号 ID。
-
当对端有呼叫进来时,可以进行接听处理,接听之后进入正常的通话界面。
客户端实现
iOS 客户端的核心逻辑如下。
初始化
参考以下步骤调用 initialize
方法进行初始化。
let param:InitParam = InitParam()
// 声网 App ID。在开通声网灵隼服务之后,可以在应用配置页面中的开发者选项选项卡中获取
param.rtcAppId = Config.appId
param.logFilePath = FileCenter.logFilePath()
param.subscribeVideo = true
param.subscribeAudio = true
param.publishVideo = false
param.publishAudio = false
// APNS 证书名。在开通声网灵隼服务之后,可以在应用配置页面中的开发者选项选项卡中获取
param.ntfApnsCertName = Config.ntfApnsCertName
// APNS 证书秘钥。在开通声网灵隼服务之后,可以在应用配置页面中的开发者选项选项卡中获取
param.ntfAppKey = Config.ntfAppKey
// 开发者选项>>呼叫服务>>Master Server URL 获取
param.masterServerUrl = "http://iot-api-gateway.sh.agoralab.co/api"
// 开发者选项>>呼叫服务>>Slave Server URL 获取
param.slaveServerUrl = "https://un2nfllop5.execute-api.cn-north-1.amazonaws.com.cn/Prod"
// 开发者选项>>呼叫服务>>Project ID 获取
param.projectId = "Your Project ID"
let ret = AgoraIotSdk.iotsdk.initialize(initParam: param, netStatus: {status,msg in}, callBackFilter: { ec, msg in return (ec,msg)})
登录用户账号
纯呼叫模式中不需要进行账号注册,直接输入用户账号名字进行无密码登录。如果该账号不存在,系统会自动分配新账号。
AgoraIotSdk.iotsdk.accountMgr.login(account: acc, result: {errCode,errMsg in})
当用户账号成功登录后,可以开始进行正式的操作,包括设备管理、告警信息查询、系统信息查询、用户信息更新等。
客户端呼叫设备端
-
客户端发出呼叫请求。
Swift// 呼叫设备端,可以同时附带一些呼叫消息
AgoraIotSdk.iotsdk.callkitMgr.callDial(device:dev,attachMsg: "",result:{
(ec,msg) in
cb(ec == ErrCode.XOK ? true : false , msg)
},peerAction: {s in
log.i("peer \(s)")
}) -
客户端发出呼叫请求成功后,设备端会有三种状态回应:
- 如果设备端正常接听,
peerAction
返回.Answer
,开始音视频通话。 - 如果设备端拒绝接听,
peerAction
返回.Hangup
,结束本次通话。 - 如果设备端接听超时,
peerAction
返回.Timeout
,结束本次通话。
- 如果设备端正常接听,
-
正常通话过程中,客户端可以发送音视频,对端也发送音视频。当设备接听后挂断电话,
peerAction
返回.Hangup
。 -
如果客户端想要结束通话,调用
AgoraIotSdk.iotsdk.callkitMgr.callHangup()
方法主动挂断电话。SwiftAgoraIotSdk.iotsdk.callkitMgr.callHangup(result: {errCode,errMsg in})
设备端呼叫客户端
-
接收到来电呼叫事件需要在初始化完成后注册来电回调接口
SwiftAgoraIotSdk.iotsdk.callkitMgr.register(incoming: {peerId,msg,action in})
-
客户端处于空闲状态时,如果有设备端呼叫,会接收到来电呼叫事件
AgoraIotSdk.iotsdk.ICallkitMgrCallback.onPeerIncoming
,你可以根据自己的业务逻辑显示来电界面。 -
客户端根据实际的业务逻辑进行处理。
- 如果客户端拒绝,则调用
AgoraIotSdk.iotsdk.callkitMgr.callHangup()
方法挂断 ,结束本次通话。 - 如果客户端接听,则调用
AgoraIotSdk.iotsdk.callkitMgr.callAnswer()
方法,进入双方通话状态。客户端可以使用AgoraIotSdk.iotsdk.callkitMgr.callHangup()
主动挂断通话。如果设备端挂断通话,客户端会收到AgoraIotSdk.iotsdk.ICallkitMgrCallback.onPeerHangup()
回调。
- 如果客户端拒绝,则调用
登出用户账号
你可以通过以下方法登出用户账号。
AgoraIotSdk.iotsdk.accountMgr.logout(result: {errCode,errMsg in})