门铃呼叫

更新时间:2023-05-22 06:38:31下载pdf

门铃设备成功绑定到家庭,且保持在线状态时,如果有人按门铃,IPC SDK 将收到门铃呼叫的事件。门铃呼叫相关处理全部通过管理类进行,比如门铃呼叫状态变化监听、接听、挂断、拒绝等操作。

如果想要实现门铃呼叫时显示视频,您需要接入 视频直播

获取门铃呼叫管理类

示例代码

Objective C:

TuyaSmartDoorBellManager *manager = [TuyaSmartDoorBellManager sharedInstance];

Swift:

let manager = TuyaSmartDoorBellManager.sharedInstance()

门铃呼叫模型

门铃呼叫使用 TuyaSmartDoorBellCallModel 模型类封装,用来保存门铃呼叫相关信息,以及维护门铃呼叫的当前状态。一次门铃呼叫对应一个 TuyaSmartDoorBellCallModel 模型。唯一标识为 messageId,即门铃呼叫的消息 ID。

参数 描述
type 门铃呼叫类型,取值:
  • doorbell
  • ac_doorbell
  • 自定义类型
devId 设备 ID
messageId 门铃呼叫消息的唯一标识
time 门铃呼叫触发的时间点,采用 Unix 时间戳,单位为秒
answeredBySelf 呼叫是否已被自己接听
answeredByOther 呼叫是否已被其他人接听
canceled 呼叫是否已经被取消

获取门铃呼叫模型

如果您想知道某个门铃呼叫的状态,可通过 TuyaSmartDoorBellCallModel 模型返回对应的 TuyaSmartDoorBellCallModel 实例来查询。

接口说明

- (TuyaSmartDoorBellCallModel *)callModelWithMessageId:(NSString *)messageId;

参数说明

参数 说明
messageId 门铃呼叫消息的唯一标识

注册门铃呼叫监听

监听生效前提是 App 进程处于活跃状态。当 App 进程进入后台,或者被终止后,该监听无效。

接口说明

- (void)addObserver:(id<TuyaSmartDoorBellObserver>)observer;

参数说明

参数 说明
TuyaSmartDoorBellObserver 门铃呼叫监听者

TuyaSmartDoorBellObserver

门铃呼叫监听者,包含门铃呼叫整个生命周期的回调,详见下表:

接口名 参数列表 返回值 描述
didReceivedFromDevice TuyaSmartDoorBellCallModel, TuyaSmartDeviceModel void 收到设备的门铃呼叫事件。
doorBellCallDidHangUp TuyaSmartDoorBellCallModel void 设备端挂断了门铃呼叫。
doorBellCallDidAnsweredByOther TuyaSmartDoorBellCallModel void 门铃呼叫已经被其他人接听。由业务层去处理是否需要自动取消或者仍然可以接听门铃呼叫:
  • 如果不能接听,需要 拒绝门铃 以结束呼叫。
  • 如果仍然可以接听,在被其他人接听的情况下,再次接听只能听见设备声音,无法开启对讲。
    doorBellCallDidAnswered TuyaSmartDoorBellCallModel void 门铃呼叫已被接听。
    doorBellCallDidCanceled TuyaSmartDoorBellCallModel, BOOL void 门铃呼叫被取消。可以从 isTimeOut 参数判断是超时自动取消,还是设备端主动取消。
    doorBellCallDidRefuse TuyaSmartDoorBellCallModel void 门铃呼叫已拒绝

    收到设备的门铃呼叫事件 didReceivedFromDevice 时,建议保存 TuyaSmartDoorBellCallModel 对象,或者其中门铃呼叫唯一标识符 messageId 起来,作为后续接听、挂断、拒绝等方法的请求参数。

    示例代码

    Objective C:

    @interface CameraDoorbellManager ()<TuyaSmartDoorBellObserver>
    @property (nonatomic, copy) NSString *messageId;
    @end
    
    @implementation CameraDoorbellManager
    
    - (void)doorBellCall:(TuyaSmartDoorBellCallModel *)callModel didReceivedFromDevice:(TuyaSmartDeviceModel *)deviceModel {
        self.messageId = callModel.messageId;
    }
    
    - (void)doorBellCallDidRefuse:(TuyaSmartDoorBellCallModel *)callModel {
    
    }
    
    - (void)doorBellCallDidHangUp:(TuyaSmartDoorBellCallModel *)callModel {
    
    }
    
    - (void)doorBellCallDidAnsweredByOther:(TuyaSmartDoorBellCallModel *)callModel {
    
    }
    
    - (void)doorBellCallDidAnswered:(TuyaSmartDoorBellCallModel *)callModel {
      
    }
    
    - (void)doorBellCallDidCanceled:(TuyaSmartDoorBellCallModel *)callModel timeOut:(BOOL)isTimeOut {
    
    }
    
    @end
    

    Swift:

    class DoorbellManager: NSObject {
        let manager = TuyaSmartDoorBellManager.sharedInstance()
        var messageId:String = ""
    }
    
    extension DoorbellManager:TuyaSmartDoorBellObserver {
        func doorBellCall(_ callModel: TuyaSmartDoorBellCallModel!, didReceivedFromDevice deviceModel: TuyaSmartDeviceModel!) {
            messageId = callModel.messageId
        }
    
        func doorBellCallDidRefuse(_ callModel: TuyaSmartDoorBellCallModel!) {
    
        }
    
        func doorBellCallDidHangUp(_ callModel: TuyaSmartDoorBellCallModel!) {
    
        }
    
        func doorBellCallDidAnswered(byOther callModel: TuyaSmartDoorBellCallModel!) {
    
        }
    
        func doorBellCallDidCanceled(_ callModel: TuyaSmartDoorBellCallModel!, timeOut isTimeOut: Bool) {
    
        }
    }
    

    移除门铃呼叫监听

    门铃呼叫监听不使用后,请在合适的时机移除。

    接口说明

    - (void)removeObserver:(id<TuyaSmartDoorBellObserver>)observer;
    

    示例代码

    Objective C:

    [[TuyaSmartDoorBellManager sharedInstance] removeObserver:self];
    

    Swift:

    TuyaSmartDoorBellManager.sharedInstance()?.remove(self)
    

    忽略指定门铃的后续呼叫

    用户正在接听某个门铃呼叫时,您可以设置是否自动忽略此设备的后续呼叫。

    属性说明

    @property (nonatomic, assign) BOOL ignoreWhenCalling;
    
    属性 说明
    ignoreWhenCalling
    • YES:如果某个设备正在接听一个门铃呼叫时,自动忽略掉此设备的后续呼叫。
    • NO:不忽略该设备的后续呼叫。
    默认值为 YES。

    设置门铃呼叫超时时间

    设置门铃呼叫超时时间后,用户如果在规定时间内未接听门铃呼叫,会回调 doorBellCallDidCanceled 进行通知,并结束此次门铃呼叫。

    属性说明

    @property (nonatomic, assign) NSInteger doorbellRingTimeOut;
    
    属性 说明
    doorbellRingTimeOut 门铃呼叫超时时间,单位为秒,默认值为 25

    接听门铃呼叫

    收到门铃呼叫之后,可接听门铃。但是呼叫可能因为已经被接听、取消或者别的原因而导致无法成功接听。如果接听失败,失败原因会以返回值错误码的形式告知,详情请参考下文 错误码

    接口说明

    - (TYDoorBellError)answerDoorBellCall:(NSString *)messageId;
    

    示例代码

    Objective C:

    [[TuyaSmartDoorBellManager sharedInstance] answerDoorBellCall:self.messageId];
    

    Swift:

    TuyaSmartDoorBellManager.sharedInstance()?.answerDoorBellCall(messageId)
    

    拒绝门铃呼叫

    收到门铃呼叫之后,用户可直接拒绝接听门铃。

    接口说明

    - (void)refuseDoorBellCall:(NSString *)messageId;
    

    示例代码

    Objective C:

    [[TuyaSmartDoorBellManager sharedInstance] refuseDoorBellCall:self.messageId];
    

    Swift:

    TuyaSmartDoorBellManager.sharedInstance()?.refuseDoorBellCall(messageId)
    

    挂断门铃呼叫

    门铃呼叫接听后,可挂断接听。挂断接听可能由于呼叫未被接听等原因而失败,失败原因会以返回值错误码的形式告知,详情请参考下文 错误码

    接口说明

    - (TYDoorBellError)hangupDoorBellCall:(NSString *)messageId;
    

    示例代码

    Objective C:

    [[TuyaSmartDoorBellManager sharedInstance] hangupDoorBellCall:self.messageId];
    

    Swift:

    TuyaSmartDoorBellManager.sharedInstance()?.hangupDoorBellCall(messageId)
    

    处理其他来源的门铃呼叫

    门铃呼叫除了通过 MQTT 协议消息通知客户端,还可能通过消息推送进行通知。您可以根据外部传入参数来生成门铃呼叫模型,达到管理后续门铃接听、挂断、拒绝的操作。

    接口说明

    - (void)generateCall:(NSDictionary *)params;
    

    参数说明

    参数 说明
    params 收到的呼叫消息数据

    错误码

    错误码 说明
    0 操作成功,无错误
    -1001 门铃呼叫时已经被其他用户接听
    -1002 设备端已经取消了门铃呼叫
    -1003 门铃呼叫已经超时
    -1004 门铃呼叫已经被接听过
    -1005 调用挂断呼叫接口,但门铃呼叫还没有被接听
    -1006 不支持此类型设备,例如 doorbell 类型设备
    -1007 参数无效