IPC UI 业务包

更新时间:2023-05-08 08:52:45下载pdf

本文介绍了 IP 摄像机(IPC)相关的业务包,不同的业务包有不同的功能,您可以根据自己的需求加载。

IPC 面板业务包

涂鸦 iOS IPC 面板业务包 (TuyaSmartCameraPanelBizBundle) 是基于 智能生活 App SDK 开发的一系列摄像机功能相关的面板 SDK。

功能说明

业务包主要包括以下功能:

  • 预览面板
  • 回放面板
  • 云存储面板
  • 消息中心面板
  • 相册面板
  • 设置面板

接入组件

  1. Podfile 文件中加入以下代码:

    source "https://github.com/tuya/tuya-pod-specs"
    source 'https://cdn.cocoapods.org/'
    platform :ios, '11.0'
    
    target 'your_target_name' do
    	# 添加摄像机面板业务包
    	pod 'TuyaSmartCameraPanelBizBundle'
    end
    
  2. 然后在项目根目录下执行 pod update 命令,通过 CocoaPods 集成第三方库。CocoaPods 的使用请参考 CocoaPods Guides

  3. 在工程的 info.plist 文件中添加需要的权限声明。

    业务包中封装了一系列 RN(React Native)接口供面板调用,其中会涉及到部分苹果隐私权限的声明。

    • 如果接入的设备面板有使用图片相关的权限,例如 相册,则需要添加:
      NSPhotoLibraryAddUsageDescription
      
    • 如果接入的设备面板有使用到麦克风的权限,例如 摄像机对讲,则需要添加:
      NSMicrophoneUsageDescription
      

服务协议

业务包实现 TYCameraProtocol 协议以提供服务。在 TYModuleServices 组件中查看 TYCameraProtocol.h 协议文件内容为:

#import <UIKit/UIKit.h>

@class TuyaSmartDeviceModel;

@protocol TYCameraProtocol <NSObject>

/**
 获取摄像头 Native 面板
 @param devId 摄像头设备的 devId
 @param uiName 摄像头设备的 uiName,不同的 uiName 对应不同版本的面板 为 deviceModel 里的 uiName 属性
 */
- (UIViewController *)viewControllerWithDeviceId:(NSString *)devId uiName:(NSString *)uiName;

@optional

/**
 跳转摄像头回放面板
 @param deviceModel 摄像头设备
 */
- (void)deviceGotoCameraNewPlayBackPanel:(TuyaSmartDeviceModel *)deviceModel;

/**
 跳转摄像头云存储面板
 @param deviceModel 摄像头设备
 */
- (void)deviceGotoCameraCloudStoragePanel:(TuyaSmartDeviceModel *)deviceModel;

/**
 跳转摄像头消息中心面板
 @param deviceModel 摄像头设备
 */
- (void)deviceGotoCameraMessageCenterPanel:(TuyaSmartDeviceModel *)deviceModel;

/**
 跳转摄像头相册面板
 @param deviceModel 摄像头设备
 */
- (void)deviceGotoPhotoLibrary:(TuyaSmartDeviceModel *)deviceModel;

@end

依赖服务

业务包主要会依赖如下几个协议: TYSmartHomeDataProtocolTYOTAGeneralProtocol

  • TYSmartHomeDataProtocol:提供加载设备面板所需的当前家庭信息,为 必须实现 的协议。

    /**
    获取当前的家庭,当前没有家庭的时候,返回 nil。
    
    @return TuyaSmartHome
    */
    - (TuyaSmartHome *)getCurrentHome;
    
  • TYOTAGeneralProtocol:进入设备面板时,提供检查设备固件更新的事件。实现如下方法用于检查固件升级:

    /**
    检查设备固件更新,如果有更新会显示展示出固件更新提示
    
    @param deviceModel 需要检查固件升级的设备
    @param isManual 是否手动检测升级
    @param theme 主题色
    YES: 手动检测升级,检测时弹出 loading 框。当有固件新版本时(检测升级、强制升级、提醒升级),显示 OTA VC。
    NO: 自动检测升级,检测时不弹出 loading 框。当有强制升级时、提醒升级时,弹出固件升级提示,点确定后显示 OTA VC。
    */
    - (void)checkFirmwareUpgrade:(TuyaSmartDeviceModel *)deviceModel isManual:(BOOL)isManual theme:(TYOTAControllerTheme)theme;
    

注意事项

  1. 使用任何接口之前,务必确认该设备在当前用户下。
  2. 此接口,只适用于摄像机设备调用,即 deviceModel.categorysp 类型的设备。
  3. 调用业务包逻辑前,要先实现 TYSmartHomeDataProtocol 中的协议方法getCurrentHome
  4. 此业务包,与之前的 TuyaSmartCameraPanelSDK 互斥,二者不能共存。迁移之前,请参考 业务包迁移

Objective-C

#import <TuyaSmartBizCore/TuyaSmartBizCore.h>
#import <TYModuleServices/TYSmartHomeDataProtocol.h>

- (void)initCurrentHome {
    // 注册要实现的协议
    [[TuyaSmartBizCore sharedInstance] registerService:@protocol(TYSmartHomeDataProtocol) withInstance:self];
}

// 实现对应的协议方法
- (TuyaSmartHome *)getCurrentHome {
    TuyaSmartHome *home = [TuyaSmartHome homeWithHomeId:@"当前家庭 id"];
    return home;
}

Swift

import TuyaSmartDeviceKit

class TYActivatorTest: NSObject,TYSmartHomeDataProtocol{

    func test() {
        TuyaSmartBizCore.sharedInstance().registerService(TYSmartHomeDataProtocol.self, withInstance: self)
    }

    func getCurrentHome() -> TuyaSmartHome! {
        let home = TuyaSmartHome.init(homeId: 111)
        return home
    }

}

查看预览面板 (UIViewController)

摄像机原生预览面板包括视频实时预览、清晰度切换、声音开关控制、截图、录制、对讲、移动侦测、PTZ 方向控制、收藏点添加/删除、巡航控制等功能。

Objective-C

id<TYCameraProtocol> impl = [[TuyaSmartBizCore sharedInstance] serviceOfProtocol:@protocol(TYCameraProtocol)];
UIViewController *vc = [impl viewControllerWithDeviceId:self.deviceModel.devId uiName:self.device.uiName];
[self.navigationController pushViewController:vc animated:YES];

Swift

let impl = TuyaSmartBizCore.sharedInstance().service(of: TYCameraProtocol.self) as? TYCameraProtocol
impl?.viewControllerWithDeviceId(withDeviceId: deviceModel.devId!, uiName: deviceModel.uiName)

IPC RN 面板业务包

涂鸦 iOS IPC RN 业务包( TuyaSmartCameraRNPanelBizBundle )是基于 智能生活 App SDK 开发的一系列摄像机功能相关的面板 SDK。

功能说明

业务包主要包括以下功能:

  • 预览面板
  • 回放面板
  • 云存储面板
  • 消息中心面板
  • 相册面板
  • 设置面板

接入组件

  1. Podfile 文件中加入以下代码:

    source "https://github.com/TuyaInc/TuyaPublicSpecs.git"
    source 'https://cdn.cocoapods.org/'
    
    target 'your_target_name' do
    	# 添加面板控制业务包
    	pod 'TuyaSmartPanelBizBundle'
    	# 添加摄像机面板业务包,接入 RN 页面业务包的同时,也接入该业务包,使得原生相册等功能也可以正常使用。
    	pod 'TuyaSmartCameraPanelBizBundle'
    	# 添加摄像机 RN 面板业务包
    	pod 'TuyaSmartCameraRNPanelBizBundle'
    end
    
  2. 然后在项目根目录下执行 pod update 命令,通过 CocoaPods 集成第三方库。CocoaPods 的使用请参考 CocoaPods Guides

  3. 在工程的 info.plist 文件中添加需要的权限声明。

    业务包中封装了一系列 RN(React Native)接口供面板调用,其中会涉及到部分苹果隐私权限的声明。

    • 如果接入的设备面板有使用图片相关的权限,例如 相册,则需要添加:
      NSPhotoLibraryAddUsageDescription
      
    • 如果接入的设备面板有使用到麦克风的权限,例如 摄像机对讲,则需要添加:
      NSMicrophoneUsageDescription
      

使用说明

使用涂鸦 iOS IPC RN 预览面板前,需要集成设备控制业务包,详情请参考 设备面板

业务包实现 TYPanelProtocol 协议以提供服务。在 TYModuleServices 组件中 TYPanelProtocol.h 协议文件内容包括:

#import <UIKit/UIKit.h>

@protocol TYPanelProtocol <NSObject>

/**
 * 获取设备面板控制器
 * @param deviceModel 设备模型
 * @param initialProps  自定义初始化参数,会以 'extraInfo' 为 key 设置进 RN 应用的 initialProps 中
 * @param contextProps  自定义面板上下文,会以 'extraInfo' 为 key 设置进 Panel Context 中
 * @param completionHandler 回调返回视图控制器
*/
- (void)getPanelViewControllerWithDeviceModel:(TuyaSmartDeviceModel *)deviceModel
                                 initialProps:(nullable NSDictionary *)initialProps
                                 contextProps:(nullable NSDictionary *)contextProps
                            completionHandler:(void (^ _Nullable)(__kindof UIViewController * _Nullable panelViewController, NSError * _Nullable error))completionHandler;

@end

依赖服务

业务包主要会依赖如下几个协议:TYSmartHomeDataProtocolTYOTAGeneralProtocol

  • TYSmartHomeDataProtocol:提供加载设备面板所需的当前家庭信息,为 必须实现 的协议。

    /**
    获取当前的家庭,当前没有家庭的时候,返回 nil。
    
    @return TuyaSmartHome
    */
    - (TuyaSmartHome *)getCurrentHome;
    
  • TYOTAGeneralProtocol:进入设备面板时,提供检查设备固件更新的事件。实现如下方法用于检查固件升级:

    /**
    检查设备固件更新,如果有更新会显示展示出固件更新提示
    
    @param deviceModel 需要检查固件升级的设备
    @param isManual 是否手动检测升级
    @param theme 主题色
    YES: 手动检测升级,检测时弹出 loading 框。当有固件新版本时(检测升级、强制升级、提醒升级),显示 OTA VC。
    NO: 自动检测升级,检测时不弹出 loading 框。当有强制升级时、提醒升级时,弹出固件升级提示,点确定后显示 OTA VC。
    */
    - (void)checkFirmwareUpgrade:(TuyaSmartDeviceModel *)deviceModel isManual:(BOOL)isManual theme:(TYOTAControllerTheme)theme;
    

注意事项

  1. 使用任何接口之前,务必确认该设备在当前用户下。
  2. 此接口,只适用于摄像机设备调用,即 deviceModel.category 为 “sp” 类型的设备。
  3. 调用业务包逻辑前,要先实现 TYSmartHomeDataProtocol 中的协议方法getCurrentHome
  4. 接入此业务包后,必须同时也接入 TuyaSmartCameraPanelBizBundle 业务包。因为例如摄像机相册面板等的相关功能代码在该业务包中。

Objective-C

#import <TuyaSmartBizCore/TuyaSmartBizCore.h>
#import <TYModuleServices/TYSmartHomeDataProtocol.h>

- (void)initCurrentHome {
    // 注册要实现的协议
    [[TuyaSmartBizCore sharedInstance] registerService:@protocol(TYSmartHomeDataProtocol) withInstance:self];
}

// 实现对应的协议方法
- (TuyaSmartHome *)getCurrentHome {
    TuyaSmartHome *home = [TuyaSmartHome homeWithHomeId:@"当前家庭 id"];
    return home;
}

Swift

import TuyaSmartDeviceKit

class TYActivatorTest: NSObject,TYSmartHomeDataProtocol{

    func test() {
        TuyaSmartBizCore.sharedInstance().registerService(TYSmartHomeDataProtocol.self, withInstance: self)
    }

    func getCurrentHome() -> TuyaSmartHome! {
        let home = TuyaSmartHome.init(homeId: 111)
        return home
    }

}

查看预览面板(UIViewController)

摄像机 RN 预览面板包括视频实时预览、清晰度切换、声音开关控制、截图、录制、对讲等功能。

Objective-C

id<TYPanelProtocol> impl = [[TuyaSmartBizCore sharedInstance] serviceOfProtocol:@protocol(TYPanelProtocol)];
// 获取面板视图控制器,自行跳转
if (deviceModel) {
    [impl getPanelViewControllerWithDeviceModel:deviceModel initialProps:nil contextProps:nil completionHandler:^(__kindof UIViewController * _Nullable panelViewController, NSError * _Nullable error) {
    }];
}

Swift

let impl = TuyaSmartBizCore.sharedInstance().service(of: TYPanelProtocol.self) as? TYPanelProtocol
// 获取面板视图控制器,自行跳转
impl?.getPanelViewController(with: deviceModel, initialProps: nil, contextProps: nil, completionHandler: { (vc, err) in

})

IPC 设置面板业务包

涂鸦智能 iOS IPC 设置业务包 (TuyaSmartCameraSettingBizBundle) 是基于 智能生活 App SDK 开发的一系列摄像机常用设置等相关的面板。

功能说明

业务包主要包括以下功能:

  • 设备详情
  • 基础设置
  • 存储卡设置
  • 增值服务
  • 其他例如重启等

接入组件

  1. Podfile 文件中加入以下代码:

    source "https://github.com/TuyaInc/TuyaPublicSpecs.git"
    source 'https://cdn.cocoapods.org/'
    
    target 'your_target_name' do
    	# 添加摄像机设置面板业务包
    	pod 'TuyaSmartCameraSettingBizBundle'
    end
    
  2. 然后在项目根目录下执行 pod update 命令,通过 CocoaPods 集成第三方库。CocoaPods 的使用请参考 CocoaPods Guides

服务协议

摄像机设置业务包实现 TYCameraSettingProtocol 协议以提供服务。在 TYModuleServices 组件中查看 TYCameraSettingProtocol.h 协议文件内容为:

#import <UIKit/UIKit.h>
@protocol TYCameraSettingProtocol <NSObject>

/**
 Generate settingViewController
 获取摄像头设置面板
 @param params 摄像头设置页面相关的参数(例如:设置首页为 @{@"devId" : 设备 devID, @"cameraSettingPanelIdentifier" : @"cameraSettingIndexIdentifier"} )
 */
- (UIViewController *)settingViewControllerWithDeviceParams:(NSDictionary *)params;

/**
 Generate config item
 生成自定义配置
 @param tag see developer doc identifiers.
 @param visible whether is visible or not
 @param callBack you can custom jump action
 */
- (id)generateSettingCustomModelWithTag:(NSString *)tag visible:(BOOL)visible callBack:(void(^_Nullable)(void))callBack;

/**
 Config custom setting action and display
 配置设置项是否可见及设置项跳转
 @param items custom items, generated by generateSettingCustomModelWithTag:visible:callBack:
 */
- (void)configCustomItemWithItems:(NSArray<id>*)items;

@end

注意事项

  1. 使用任何接口之前,务必确认该设备在当前用户下。
  2. 此业务包,只适用于摄像机设备调用,即 deviceModel.categorysp 类型的设备。
  3. 接入此业务包后,默认就可以实现摄像机设置相关功能。如果您想自行实现摄像头设置面板,注册下文中描述的对应协议,实现代理方法即可。

注册 TYCameraSettingProtocol 协议

TYCameraSettingProtocol 的协议方法,只有在需要实现自定义摄像机设置面板(返回自定义的摄像机设置面板)的情况下,才需要自己去注册和实现。默认情况下,TuyaSmartCameraSettingBizBundle 业务包内部会有对应的实现逻辑。

Objective-C

[[TuyaSmartBizCore sharedInstance] registerService:@protocol(TYCameraSettingProtocol) withInstance:self];

Swift

TuyaSmartBizCore.sharedInstance().registerService(TYCameraSettingProtocol.self, withInstance: self)

设置页面配置(TYCameraSettingProtocol)

支持自定义配置设置页面上每项功能的显示、隐藏、点击事件拦截,相关接口定义在 TYCameraSettingProtocol 中。

接口说明

/**
 Generate config item
 生成自定义配置
 @param tag see developer doc identifiers.
 @param visible whether is visible or not
 @param callBack you can custom jump action
 */
- (id)generateSettingCustomModelWithTag:(NSString *)tag visible:(BOOL)visible callBack:(void(^_Nullable)(void))callBack;

参数说明

参数 说明
visible 是否显示。
  • YES:显示
  • NO:隐藏
callBack 点击事件拦截的回调,可自定义跳转事件
tag 功能项的标识符,取值见下文表格

tag 名称说明

tag 名称 功能
cameraSetting_iconInfoItem 设备图标、名称等信息
cameraSetting_infoItem 设备信息
cameraSetting_autoItem 一键执行和自动化
cameraSetting_networkItem 设备网络信息
cameraSetting_thirdPartyItem 支持的第三方服务
cameraSetting_privateModeCfgItem 隐私模式开关
cameraSetting_basicSectionHeaderCfgItem 基础设置标题
cameraSetting_basicFuncCfgItem 基础设置
cameraSetting_nightvisionCfgItem 夜视模式
cameraSetting_irNightCfgItem 红外夜视功能
cameraSetting_displaySettingCfgItem 画面调节
cameraSetting_soundCfgItem 声音调节
cameraSetting_workModeCfgItem 工作模式
cameraSetting_advanceSectionHeaderCfgItem 高级设置标题
cameraSetting_detectCfgItem 侦测报警
cameraSetting_pirFuncCfgItem PIR
cameraSetting_powerCfgItem 电源管理
cameraSetting_bellCfgItem 铃铛设置
cameraSetting_sirenSettingCfgItem 蜂鸣器调节
cameraSetting_videoLayoutCfgItem 视频布局
cameraSetting_presentPointCfgItem 预设点设置
cameraSetting_onvifCfgItem onvif
cameraSetting_gatewaySectionHeaderCfgItem 网关标题
cameraSetting_gatewayCfgItem 网关
cameraSetting_storageSectionHeaderCfgItem 存储设置标题
cameraSetting_storageCfgItem 存储设置
cameraSetting_valueAddedSectionHeaderCfgItem 增值服务标题
cameraSetting_valueAddedCfgItem 增值服务
cameraSetting_offlineSectionHeaderCfgItem 离线提醒标题
cameraSetting_offlineCfgItem 离线提醒
cameraSetting_otherSectionHeaderCfgItem 其他标题
cameraSetting_feedbackCfgItem 常见问题与反馈
cameraSetting_shareDeviceCfgItem 共享设备
cameraSetting_firmwareCfgItem 设备升级
cameraSetting_restartCfgItem 重启设备
cameraSetting_removeCfgItem 移除设备
cameraSetting_indicatorLightItem 状态指示灯
cameraSetting_besharedItem 设备来自
cameraSetting_soundDetectedItem 声音检测
cameraSetting_apModeItem 热点模式
cameraSetting_unlockItem 远程解锁
cameraSetting_cloudDisk 基站云盘页面
cameraSetting_privacyZone 隐私区域设置
cameraSetting_recording_time 单段录影时间设置
cameraSetting_parking_mode 停车模式设置
cameraSetting_collision_alert 碰撞报警
cameraSetting_antiDismantle 防拆告警开关
cameraSetting_notification 消息推送设置
cameraSetting_carInspection 车型检测开关
cameraSetting_nonCarInspection 非机动检测开关
cameraSetting_thirdPartyHeaderItem 支持的第三方标题
cameraSetting_pirSetItem PIR 设置
cameraSetting_stationDoorbellItem 基站门铃设置
cameraSetting_stationDetectionItem 基站侦测报警

接口说明

/**
 Config custom setting action and display
 配置设置项是否可见及设置项跳转
 @param items custom items, generated by generateSettingCustomModelWithTag:visible:callBack:
 */
- (void)configCustomItemWithItems:(NSArray<id>*)items;

参数说明

参数 说明
items 传入数组,数组中的 item 由 generateSettingCustomModelWithTag:visible:callBack: 生成

Objective-C

id <TYCameraSettingProtocol> cameraSettingProtocol = [[TuyaSmartBizCore sharedInstance] serviceOfProtocol:@protocol(TYCameraSettingProtocol)];

id item1 = [cameraSettingProtocol generateSettingCustomModelWithTag:@"cameraSetting_infoItem" visible:NO callBack:nil];
id item2 = [cameraSettingProtocol generateSettingCustomModelWithTag:@"cameraSetting_networkItem" visible:NO callBack:nil];

[cameraSettingProtocol configCustomItemWithItems:@[item1, item2]];

Swift

let cameraSettingProtocolImpl = TuyaSmartBizCore.sharedInstance().service(of: TYCameraSettingProtocol.self) as? TYCameraSettingProtocol
if let impl = cameraSettingProtocolImpl {
    let item1 = impl.generateSettingCustomModel(withTag: "cameraSetting_infoItem", visible: false, callBack: nil)
    let item2 = impl.generateSettingCustomModel(withTag: "cameraSetting_networkItem", visible: false, callBack: nil)
    impl.configCustomItem(withItems: [item1!, item2!])
}