更新时间:2024-06-17 07:54:00下载pdf
App 启动状态时,设备成功绑定到家庭且处于在线状态下,App 端通过监听 MQTT,可收到来自门铃设备的呼叫。之后,App 端可以通过 MQTT,对门铃呼叫进行接听、挂断、拒绝等操作。为了让您更方便地接入门铃业务,降低开发成本,IPC SDK 对该流程进行了完整封装。
当收到门铃呼叫时,IPC SDK 会通过 门铃呼叫监听 通知 App。后续 App 可通过 IPC SDK 对门铃呼叫进行接听、挂断、拒绝等操作。
MQTT 连接断开(App 完全退出或进入后台一段时间)时,App 可以通过接入推送,来通知用户来自门铃设备的呼叫。用户点击门铃推送通知后,IPC SDK 对这种情况的呼叫无感知。为了解决该问题,您可以调用 IPC SDK 开放的方法,当用户点击门铃推送的时候,手动把来自推送的门铃呼叫加入到 IPC SDK 的管理范畴。更多信息,参考 处理其他来源的门铃呼叫。
如果想要在门铃呼叫页面显示视频流,需要另外接入 视频直播。
目前,IPC 的可视门铃(type
为 ac_doorbell
)完全采用上述方案。但需特别注意,不是所有门铃设备的呼叫原理都跟上述一致。
以图片门铃(type
为 doorbell
)为例,虽然门铃呼叫是通过 MQTT 消息通知 App,但是接听、挂断、拒绝等操作都是通过 DP 进行。因此,您可以通过 门铃呼叫监听 来监听设备的呼叫。但是,对这类设备的接听、挂断、拒绝等操作,需要使用 设备控制 相关 API 进行单独开发。
对于部分门锁设备,门铃呼叫、接听、挂断、拒绝等操作全是通过 DP 进行,那么 IPC SDK 对门铃呼叫业务的封装,就完全不适用。
示例代码
Objective-C:
ThingSmartDoorBellManager *manager = [ThingSmartDoorBellManager sharedInstance];
Swift:
let manager = ThingSmartDoorBellManager.sharedInstance()
门铃呼叫使用 ThingSmartDoorBellCallModel
模型类封装,用来保存门铃呼叫相关信息,以及维护门铃呼叫的当前状态。一次门铃呼叫对应一个 ThingSmartDoorBellCallModel
模型。唯一标识为 messageId
,即门铃呼叫的消息 ID。
参数 | 描述 |
---|---|
type | 门铃呼叫类型,取值:
|
devId | 设备 ID |
messageId | 门铃呼叫消息的唯一标识 |
time | 门铃呼叫触发的时间点,采用 Unix 时间戳,单位为秒 |
answeredBySelf | 呼叫是否已被自己接听 |
answeredByOther | 呼叫是否已被其他人接听 |
canceled | 呼叫是否已经被取消 |
如果您想知道某个门铃呼叫的状态,可通过 ThingSmartDoorBellCallModel
模型返回对应的 ThingSmartDoorBellCallModel
实例来查询。
接口说明
- (ThingSmartDoorBellCallModel *)callModelWithMessageId:(NSString *)messageId;
参数说明
参数 | 说明 |
---|---|
messageId | 门铃呼叫消息的唯一标识 |
监听生效前提是 App 进程处于活跃状态。当 App 进程进入后台,或者被终止后,该监听无效。
接口说明
- (void)addObserver:(id<ThingSmartDoorBellObserver>)observer;
参数说明
参数 | 说明 |
---|---|
ThingSmartDoorBellObserver | 门铃呼叫监听者 |
ThingSmartDoorBellObserver
门铃呼叫监听者,包含门铃呼叫整个生命周期的回调,详见下表:
接口名 | 参数列表 | 返回值 | 描述 |
---|---|---|---|
didReceivedFromDevice | ThingSmartDoorBellCallModel, ThingSmartDeviceModel | void | 收到设备的门铃呼叫事件。 |
doorBellCallDidHangUp | ThingSmartDoorBellCallModel | void | 设备端挂断了门铃呼叫。 |
doorBellCallDidAnsweredByOther | ThingSmartDoorBellCallModel | void | 门铃呼叫已经被其他人接听。由业务层去处理是否需要自动取消或者仍然可以接听门铃呼叫:
|
doorBellCallDidAnswered | ThingSmartDoorBellCallModel | void | 门铃呼叫已被接听。 |
doorBellCallDidCanceled | ThingSmartDoorBellCallModel, BOOL | void | 门铃呼叫被取消。可以从 isTimeOut 参数判断是超时自动取消,还是设备端主动取消。 |
doorBellCallDidRefuse | ThingSmartDoorBellCallModel | void | 门铃呼叫已拒绝 |
收到设备的门铃呼叫事件 didReceivedFromDevice
时,建议保存 ThingSmartDoorBellCallModel
对象,或者其中门铃呼叫唯一标识符 messageId
起来,作为后续接听、挂断、拒绝等方法的请求参数。
示例代码
Objective-C:
@interface CameraDoorbellManager ()<ThingSmartDoorBellObserver>
@property (nonatomic, copy) NSString *messageId;
@end
@implementation CameraDoorbellManager
- (void)doorBellCall:(ThingSmartDoorBellCallModel *)callModel didReceivedFromDevice:(ThingSmartDeviceModel *)deviceModel {
self.messageId = callModel.messageId;
}
- (void)doorBellCallDidRefuse:(ThingSmartDoorBellCallModel *)callModel {
}
- (void)doorBellCallDidHangUp:(ThingSmartDoorBellCallModel *)callModel {
}
- (void)doorBellCallDidAnsweredByOther:(ThingSmartDoorBellCallModel *)callModel {
}
- (void)doorBellCallDidAnswered:(ThingSmartDoorBellCallModel *)callModel {
}
- (void)doorBellCallDidCanceled:(ThingSmartDoorBellCallModel *)callModel timeOut:(BOOL)isTimeOut {
}
@end
Swift:
class DoorbellManager: NSObject {
let manager = ThingSmartDoorBellManager.sharedInstance()
var messageId:String = ""
}
extension DoorbellManager:ThingSmartDoorBellObserver {
func doorBellCall(_ callModel: ThingSmartDoorBellCallModel!, didReceivedFromDevice deviceModel: ThingSmartDeviceModel!) {
messageId = callModel.messageId
}
func doorBellCallDidRefuse(_ callModel: ThingSmartDoorBellCallModel!) {
}
func doorBellCallDidHangUp(_ callModel: ThingSmartDoorBellCallModel!) {
}
func doorBellCallDidAnswered(byOther callModel: ThingSmartDoorBellCallModel!) {
}
func doorBellCallDidCanceled(_ callModel: ThingSmartDoorBellCallModel!, timeOut isTimeOut: Bool) {
}
}
门铃呼叫监听不使用后,请在合适的时机移除。
接口说明
- (void)removeObserver:(id<ThingSmartDoorBellObserver>)observer;
示例代码
Objective-C:
[[ThingSmartDoorBellManager sharedInstance] removeObserver:self];
Swift:
ThingSmartDoorBellManager.sharedInstance()?.remove(self)
用户正在接听某个门铃呼叫时,您可以设置是否自动忽略此设备的后续呼叫。
属性说明
@property (nonatomic, assign) BOOL ignoreWhenCalling;
属性 | 说明 |
---|---|
ignoreWhenCalling |
|
设置门铃呼叫超时时间后,用户如果在规定时间内未接听门铃呼叫,会回调 doorBellCallDidCanceled
进行通知,并结束此次门铃呼叫。
属性说明
@property (nonatomic, assign) NSInteger doorbellRingTimeOut;
属性 | 说明 |
---|---|
doorbellRingTimeOut | 门铃呼叫超时时间,单位为秒,默认值为 25 |
建议使用 设置指定门铃呼叫超时时间。
根据设备 ID 设置门铃呼叫超时时间后,用户如果在规定时间内未接听门铃呼叫,会回调 doorBellCallDidCanceled
进行通知,并结束此次门铃呼叫。
属性说明
@property (nonatomic, weak) id<ThingSmartDoorBellConfigDataSource> doorBellConfigDataSource;
参数说明
参数 | 说明 |
---|---|
ThingSmartDoorBellConfigDataSource | 门铃呼叫设置数据源 |
ThingSmartDoorBellConfigDataSource
门铃呼叫设置数据源,详见下表:
接口名 | 参数列表 | 返回值 | 描述 |
---|---|---|---|
doorbellRingTimeOut | NSInteger, NSString * | NSInteger | 根据设备 ID,设置门铃呼叫超时时长 |
收到门铃呼叫之后,可接听门铃。但是呼叫可能因为已经被接听、取消或者其他原因而导致无法成功接听。如果接听失败,失败原因会以返回值错误码的形式告知,详情请参考下文 错误码。
接口说明
- (ThingDoorBellError)answerDoorBellCall:(NSString *)messageId;
示例代码
Objective-C:
[[ThingSmartDoorBellManager sharedInstance] answerDoorBellCall:self.messageId];
Swift:
ThingSmartDoorBellManager.sharedInstance()?.answerDoorBellCall(messageId)
收到门铃呼叫之后,用户可直接拒绝接听门铃。
接口说明
- (void)refuseDoorBellCall:(NSString *)messageId;
示例代码
Objective-C:
[[ThingSmartDoorBellManager sharedInstance] refuseDoorBellCall:self.messageId];
Swift:
ThingSmartDoorBellManager.sharedInstance()?.refuseDoorBellCall(messageId)
门铃呼叫接听后,可挂断接听。挂断接听可能由于呼叫未被接听等原因而失败,失败原因会以返回值错误码的形式告知,详情请参考下文 错误码。
接口说明
- (ThingDoorBellError)hangupDoorBellCall:(NSString *)messageId;
示例代码
Objective-C:
[[ThingSmartDoorBellManager sharedInstance] hangupDoorBellCall:self.messageId];
Swift:
ThingSmartDoorBellManager.sharedInstance()?.hangupDoorBellCall(messageId)
门铃呼叫除了通过 MQTT 协议消息通知客户端,还可能通过消息推送进行通知。您可以根据外部传入参数来生成门铃呼叫模型,达到管理后续门铃接听、挂断、拒绝的操作。
接口说明
- (void)generateCall:(NSDictionary *)params;
参数说明
参数 | 说明 |
---|---|
params | 收到的呼叫消息数据,推送消息详细解析请参考 Demo |
params 键值对说明
key | value |
---|---|
devId | 设备 ID |
cid | 设备 nodeId |
edata | 消息 ID |
eType | 收到的呼叫消息类型 |
time | 收到的呼叫消息时间戳 |
示例代码
更多信息,参考 Demo。
更多详情,您可以参考 SDK 错误码。
枚举值 | 错误码 | 说明 |
---|---|---|
ThingDoorBellError_NoError | 0 | 操作成功,无错误 |
ThingDoorBellError_CallFailed | -2300 | 呼叫处理失败,原因可能为:
|
ThingDoorBellError_AnsweredByOther | -2301 | 门铃呼叫时已经被其他用户接听 |
ThingDoorBellError_DidCanceled | -2302 | 设备端已经取消了门铃呼叫 |
ThingDoorBellError_TimeOut | -2303 | 门铃呼叫已经超时 |
ThingDoorBellError_AnsweredBySelf | -2304 | 门铃呼叫已经被接听过 |
ThingDoorBellError_NotAnswered | -2305 | 调用挂断呼叫接口,但门铃呼叫还没有被接听 |
ThingDoorBellError_NotSupport | -2306 | 不支持此类型设备,例如 doorbell 类型设备 |
使用低功耗门铃功能时,您需要下载默认资源文件 resources.zip,解压并加入工程。或者您也可以按默认文件名,添加自定义的音频文件。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈