本文介绍如何在 iOS 客户端实现呼叫和通话等功能。
在纯呼叫模式下,你需要自行实现账号系统与设备管理功能。基本流程如下:
开始前,请确保你的开发环境满足以下条件:
参考开通并配置声网灵隼服务。
从 GitHub 上下载最新版本的 iOS 客户端示例项目。
在项目的根目录运行 pod install
安装依赖。
连接上 iOS 设备后,点击 .xcworkspace
文件打开项目,并在 iOS Device 选项中勾选上你的 iOS 设备。
使用 Xcode 打开项目。修改配置文件 Config.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.agora.io/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})
当用户账号成功登录后,可以开始进行正式的操作,包括设备管理、告警信息查询、系统信息查询、用户信息更新等。
应用端发出呼叫请求。
// 呼叫设备端,可以同时附带一些呼叫消息
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()
方法主动挂断电话。
AgoraIotSdk.iotsdk.callkitMgr.callHangup(result: {errCode,errMsg in})
接收到来电呼叫事件需要在初始化完成后注册来电回调接口
AgoraIotSdk.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})
你可以通过客户端 iOS API 参考(纯呼叫)了解 API 的详细信息。