Last Updated on : 2023-07-13 07:14:42download
Scene UI BizBundle for iOS provides the service logic and UI to implement adding and editing smart scenes in the smart scene module.
Smart scenes include the following types: tap-to-run and automation.
Tuya supports users’ smart life requirements. For example, set weather conditions or device status as triggers for a specific smart scene. When any triggers occur, one or more linked devices will run predefined tasks.
Add the components of the Scene UI BizBundle to the Podfile
and run the command 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
# Adds the Scene UI BizBundle.
pod 'ThingSmartSceneBizBundle'
pod 'RNApi/Scene'
end
The BizBundle supports the weather conditions feature with the location information. This requires specific declarations of privacy and permissions from Apple. Add the following permission declaration to info.plist
of your project:
NSLocationWhenInUseUsageDescription
The BizBundle supports the geofencing feature. This requires the Always permission declaration on the location information. Add the following permission declaration to info.plist
of your project:
NSLocationAlwaysUsageDescription
The BizBundle implements ThingSmartSceneProtocol
, ThingSmartSceneBizProtocol
, and ThingSmartGeofenceServiceProtocol
to provide required services. You can check the ThingModuleServices
component, including the following protocol files:
ThingSmartSceneProtocol.h
:
@protocol ThingSmartSceneProtocol <NSObject>
/**
* Navigates to the page for adding a smart scene, where a tap-to-run scene or automation scene can be added.
*
* @param callback The callback that is executed when a smart scene is created.
*/
- (void)addAutoScene:(void(^)(ThingSmartSceneModel *secneModel, BOOL addSuccess))callback;
/**
* Navigates to the page for editing a smart scene, where a tap-to-run scene or automation scene can be edited.
* Before this method is called, you must call `getSceneListWithHomeId` of `ThingSmartSceneBizProtocol` to get a list of scenes for a home. This way, scenes are cached to enable navigation to the edit page in follow-up operations.
*
* @param model The `model object for the scene to be edited.
*/
- (void)editScene:(ThingSmartSceneModel *)model;
@end
ThingSmartSceneBizProtocol.h
:
/**
* Returns a list of scenes, including the automation and tap-to-run scenes.
*
* @param The home ID.
*/
- (void)getSceneListWithHomeId:(long long)homeId withSuccess:(void(^)(NSArray <ThingSmartSceneModel *> *scenes))success failure:(void(^)(NSError *error))failure;
ThingSmartGeofenceServiceProtocol.h
:
/// Returns a list of existing geofences and registers them to the system services.
- (void)getAllSmartGeofenceListAndRegisterGeofenceIntoSystem;
/// Removes all geofence services.
- (void)removeAllMonitors;
The BizBundle depends on the method provided by the protocol ThingSmartHomeDataProtocol
. To call the BizBundle, you must implement the following protocols:
Protocol 1 (deprecated): ThingSmartHomeDataProtocol
This provides current home information required by the UI BizBundle.
We recommend that you implement the method ThingFamilyProtocol
to provide the current home ID.
/**
Returns the current home. If the current user does not have a home, `nil` is returned.
@return ThingSmartHome
*/
- (ThingSmartHome *)getCurrentHome;
Protocol 2: ThingFamilyProtocol
This provides the current home ID required by the BizBundle.
/// Returns the current home ID.
- (long long)currentFamilyId;
You can also integrate both the Home Management UI BizBundle and Scene UI BizBundle. For more information about the Home Management UI BizBundle, see Home Management UI BizBundle.
Protocol 3: ThingSmartHouseIndexProtocol
This provides the administrator information required by the BizBundle. If non-administrator users are allowed to edit scenes, YES
is returned.
/**
* ndicates whether the user is the administrator of the current home.
*
* @return `YES` indicates an administrator.
*/
- (BOOL)homeAdminValidation;
Before the call of any API method, make sure that the user has logged in to the app.
Before the Scene UI BizBundle is used, you must implement:
currentFamilyId
of ThingFamilyProtocol
.homeAdminValidation
of ThingSmartHouseIndexProtocol
.For a Swift project, you must reference the header files of the BizBundle in the bridging header file.
#import <ThingSmartBizCore/ThingSmartBizCore.h>
#import <ThingModuleServices/ThingModuleServices.h>
#import <ThingSmartSceneKit/ThingSmartSceneModel.h>
ObjC:
#import <ThingSmartBizCore/ThingSmartBizCore.h>
#import <ThingModuleServices/ThingModuleServices.h>
#import <ThingSmartDeviceKit/ThingSmartDeviceKit.h>
- (void)registerProtocol {
// Registers the protocols to be implemented.
[[ThingSmartBizCore sharedInstance] registerService:@protocol(ThingSmartHomeDataProtocol) withInstance:self];
[[ThingSmartBizCore sharedInstance] registerService:@protocol(ThingSmartHouseIndexProtocol) withInstance:self];
[[ThingSmartBizCore sharedInstance] registerService:@protocol(ThingFamilyProtocol) withInstance:self];
}
// Implements the protocol method.
- (ThingSmartHome *)getCurrentHome {
ThingSmartHome *home = [ThingSmartHome homeWithHomeId:@"Current home ID"];
return home;
}
- (BOOL)homeAdminValidation {
// Returns a specific user information, or returns `YES` to allow all users to edit scenes.
return YES;
}
/// Returns the current home ID.
- (long long)currentFamilyId {
return [ThingDemoSmartHomeManager sharedInstance].currentHomeModel.homeId;
}
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 currentFamilyId() -> Int64 {
return 111
}
}
ObjC:
#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
})
}
ObjC:
#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)
}
}
ObjC:
#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
})
}
The BizBundle supports the geofencing feature. Before the BizBundle is called, you must get the list of geofences and register them to the system services.
ObjC:
- (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
supports notifications of the following events:
ThingSmartSceneRecommendTypeNone
and ThingSmartSceneCollectionTypeNone
.kNotificationSmartSceneSaved
supports notifications of the following events:
kNotificationSmartSceneRecomDeleted
supports the notification of the following event: A recommended scene or favorite scene is deleted.
Is this page helpful?
YesFeedbackIs this page helpful?
YesFeedback