更新时间:2023-05-22 06:38:27下载pdf
涂鸦 智能场景 UI 业务包 iOS 版的业务功能包括 智能场景 模块的 添加智能 和 编辑智能 的业务逻辑和 UI 界面。
智能场景分为 一键执行场景 和 自动化场景,分别简称为 场景 和 自动化。
涂鸦支持用户根据实际生活场景,通过设置气象或设备条件,当条件满足时,让一个或多个设备执行相应的任务。
在工程的 Podfile
文件中添加场景业务包组件,并执行 pod update
命令:
source 'https://github.com/tuya/tuya-private-specs.git'
source 'https://cdn.cocoapods.org/'
platform :ios, '11.0'
target 'your_target_name' do
# 添加场景业务包
pod 'TuyaSmartSceneBizBundle'
pod 'TuyaRNApi/Scene'
pod 'TuyaSmartCameraSettingBizBundle'
end
场景业务包中 天气条件 会用到位置信息,其中会涉及到部分苹果隐私权限的声明。请在工程的 info.plist
中添加如下权限声明:
NSLocationWhenInUseUsageDescription
场景业务包开放了 地理围栏 功能,地理围栏需要位置服务的 始终 权限声明。请在工程的 info.plist
中添加如下权限声明:
NSLocationAlwaysUsageDescription
场景业务包实现了 TYSmartSceneProtocol
、TYSmartSceneBizProtocol
和 TYSmartGeofenceServiceProtocol
,以提供服务。您可以在在 TYModuleServices
组件中,查看协议文件内容:
TYSmartSceneProtocol.h
:
@protocol TYSmartSceneProtocol <NSObject>
/**
* 跳入新增场景页面,新增场景或者自动化
*
* @param callback 创建完成后结果回调
*/
- (void)addAutoScene:(void(^)(TuyaSmartSceneModel *secneModel, BOOL addSuccess))callback;
/**
* 跳入编辑场景页面,编辑指定场景或者自动化。
* 注意调用此方法前,需要调用 TYSmartSceneBizProtocol 的 getSceneListWithHomeId:方法查询家庭下的场景列表,这样会生成场景缓存,之后才能正常跳入编辑页面。
*
* @param model 要进行编辑的场景 model 对象
*/
- (void)editScene:(TuyaSmartSceneModel *)model;
@end
TYSmartSceneBizProtocol.h
:
/**
* 查询场景列表,包括自动化和场景
*
* @param 家庭 ID
*/
- (void)getSceneListWithHomeId:(long long)homeId withSuccess:(void(^)(NSArray <TuyaSmartSceneModel *> *scenes))success failure:(void(^)(NSError *error))failure;
TYSmartGeofenceServiceProtocol.h
:
/// 查询所有已创建的地理围栏列表,并注册到系统服务中
- (void)getAllSmartGeofenceListAndRegisterGeofenceIntoSystem;
/// 移除所有地理围栏服务
- (void)removeAllMonitors;
场景业务包正常运行需要依赖 TYSmartHomeDataProtocol
这个协议提供的协议方法。调用业务包之前,您需要实现以下协议:
协议一(已废弃):TYSmartHomeDataProtocol
提供场景组件所需的当前家庭信息。
建议实现 TYFamilyProtocol
协议方法来提供当前家庭 ID。
/**
查询当前的家庭,当前没有家庭的时候,返回 nil。
@return TuyaSmartHome
*/
- (TuyaSmartHome *)getCurrentHome;
协议二:TYFamilyProtocol
提供场景组件所需的当前家庭 ID。
/// 返回当前家庭 ID
- (long long)currentFamilyId;
如果同时引入了家庭业务包和场景业务包,家庭的使用方法详见 家庭管理 UI 业务包。
协议三:TYSmartHouseIndexProtocol
提供场景组件所需的管理员身份信息。如果非管理员也允许编辑场景,返回 YES
即可。
/**
* 是否是当前家庭的管理员。
*
* @return YES 代表是管理员
*/
- (BOOL)homeAdminValidation;
调用任何接口之前,务必确认用户已登录。
调用场景业务包逻辑前,要先实现:
TYFamilyProtocol
中的协议方法 currentFamilyId
。TYSmartHouseIndexProtocol
中的协议方法 homeAdminValidation
。如果是 Swift 工程,您需要在桥接文件内引用业务包头文件。
#import <TuyaSmartBizCore/TuyaSmartBizCore.h>
#import <TYModuleServices/TYModuleServices.h>
#import <TuyaSmartSceneKit/TuyaSmartSceneModel.h>
Objective-C 示例
#import <TuyaSmartBizCore/TuyaSmartBizCore.h>
#import <TYModuleServices/TYModuleServices.h>
#import <TuyaSmartDeviceKit/TuyaSmartDeviceKit.h>
- (void)registerProtocol {
// 注册要实现的协议
[[TuyaSmartBizCore sharedInstance] registerService:@protocol(TYSmartHomeDataProtocol) withInstance:self];
[[TuyaSmartBizCore sharedInstance] registerService:@protocol(TYSmartHouseIndexProtocol) withInstance:self];
[[TuyaSmartBizCore sharedInstance] registerService:@protocol(TYFamilyProtocol) withInstance:self];
}
// 实现对应的协议方法
- (TuyaSmartHome *)getCurrentHome {
TuyaSmartHome *home = [TuyaSmartHome homeWithHomeId:@"当前家庭 ID"];
return home;
}
- (BOOL)homeAdminValidation {
//可根据实际用户身份返回,也可直接返回 YES 允许所有用户编辑
return YES;
}
/// 返回当前家庭 ID
- (long long)currentFamilyId {
return [TYDemoSmartHomeManager sharedInstance].currentHomeModel.homeId;
}
Swift 示例
class TYSceneTest: NSObject,TYSmartHomeDataProtocol,TYSmartHouseIndexProtocol,TYFamilyProtocol {
func test() {
TuyaSmartBizCore.sharedInstance().registerService(TYSmartHomeDataProtocol.self, withInstance: self)
TuyaSmartBizCore.sharedInstance().registerService(TYSmartHouseIndexProtocol.self, withInstance: self)
TuyaSmartBizCore.sharedInstance().registerService(TYFamilyProtocol.self, withInstance: self)
}
func getCurrentHome() -> TuyaSmartHome! {
let home = TuyaSmartHome.init(homeId: 111)
return home
}
func homeAdminValidation() -> Bool {
return true
}
func currentFamilyId() -> Int64 {
return 111
}
}
Objective-C 示例
#import <TuyaSmartBizCore/TuyaSmartBizCore.h>
#import <TYModuleServices/TYSmartSceneProtocol.h>
- (void)gotoAddScene {
id<TYSmartSceneProtocol> impl = [[TuyaSmartBizCore sharedInstance] serviceOfProtocol:@protocol(TYSmartSceneProtocol)];
[impl addAutoScene:^(TuyaSmartSceneModel *secneModel, BOOL addSuccess) {
}];
}
Swift 示例
func addScene() {
let impl = TuyaSmartBizCore.sharedInstance().service(of: TYSmartSceneProtocol.self) as? TYSmartSceneProtocol
impl?.addAutoScene({ (sceneModel, result) in
})
}
Objective-C 示例
#import <TuyaSmartBizCore/TuyaSmartBizCore.h>
#import <TYModuleServices/TYSmartSceneProtocol.h>
- (void)gotoEditScene {
id<TYSmartSceneProtocol> impl = [[TuyaSmartBizCore sharedInstance] serviceOfProtocol:@protocol(TYSmartSceneProtocol)];
[impl editScene:(your sceneModel)];
}
Swift 示例
func editScene() {
let impl = TuyaSmartBizCore.sharedInstance().service(of: TYSmartSceneProtocol.self) as? TYSmartSceneProtocol
impl?.editScene(your scenemodel)
}
}
Objective-C 示例
#import <TuyaSmartBizCore/TuyaSmartBizCore.h>
#import <TYModuleServices/TYSmartSceneBizProtocol.h>
- (void)getSceneList {
id<TYSmartSceneBizProtocol> impl = [[TuyaSmartBizCore sharedInstance] serviceOfProtocol:@protocol(TYSmartSceneBizProtocol)];
[impl getSceneListWithHomeId:'your homeId' withSuccess:^(NSArray<TuyaSmartSceneModel *> * _Nonnull scenes) {
} failure:^(NSError * _Nonnull error) {
}];
}
Swift 示例
func getSceneList() {
let impl = TuyaSmartBizCore.sharedInstance().service(of: TYSmartSceneBizProtocol.self) as? TYSmartSceneBizProtocol
impl?.getSceneList(withHomeId: 111, withSuccess: { (sceneArr) in
}, failure: { (error) in
})
}
场景业务包已开放地理围栏功能,但每次使用业务包前,您必须要查询地理围栏信息列表,并注册到系统服务中。
Objective-C 示例
- (void)getGeofenceListAndRegister {
id<TYSmartGeofenceServiceProtocol> geofenceService = [[TuyaSmartBizCore sharedInstance] serviceOfProtocol:@protocol(TYSmartGeofenceServiceProtocol)];
[geofenceService getAllSmartGeofenceListAndRegisterGeofenceIntoSystem];
}
Swift 示例
func getGeofenceListAndRegister() {
let geofenceImpl = TuyaSmartBizCore.sharedInstance().service(of: TYSmartGeofenceServiceProtocol.self) as! TYSmartGeofenceServiceProtocol
geofenceImpl.getAllSmartGeofenceListAndRegisterGeofenceIntoSystem()
}
kNotificationSmartSceneListUpdate
,通知发送事件:
TuyaSmartSceneRecommendTypeNone
和 TuyaSmartSceneCollectionTypeNone
)kNotificationSmartSceneSaved
,通知发送事件:
kNotificationSmartSceneRecomDeleted
,通知发送事件:推荐场景或者收藏场景删除成功
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈