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