WahtieSDK 版本 1.3.0 更新于 2018-11-02
What's new:
2018-11-02:
APIs for Incandescent Light have been published.Please refer to 6 and 7 and 9.2.
History:
2018-08-19:
Rename room of device.Please refer to 6.6.
2018-08-15:
"Unable to update device status" may not be appear if mobile network well.
2018-07-28:
Update some of the information returned.
1.功能概述
WhatieSDK 是 ATI TECHNOLOGY (WUHAN) CO.,LTD. 为第三方快速访问我们的 ATI IoT 云平台而提供的 SDK。使用此 SDK,开发者几乎可以在电源插座和 RGBW 灯泡上完成所有功能点,例如用户注册/登录登出、智能配置、添加/共享/移除设备、设备控制、定时倒计时、定时器等。
注意:为了将 SDK 集成到您的应用中,不需要在云平台上进行任何后端开发。您只需在您的应用端完成所有工作。
2.准备工作
注册一个开发者账户
在 ATI 云平台上注册一个第三方开发者账户,以创建自开发产品、创建功能点等。
注意:我们已经为 SAKAR 注册了一个账户,并将其邮箱发送给了 SAKAR。SAKAR 可以跳过此步骤。
获取appId和secretKey
前往开发平台 - 应用管理 - 创建新应用,以获取用于初始化SDK的& <code>appId</code>和& <code>secretKey</code>(适用于Android和iOS)。
注意:我们已经为SAKAR申请了appId和secretKey,并发邮件给SAKAR。SAKAR可以跳过此步骤。
SDK 示例
SDK 示例是一个完整的APP,包含了注册、登录、分享、反馈、网络配置和设备控制等主要流程和操作。示例代码可以作为第三方开发的良好参考。 下载链接
3.SDK 集成
要求
- iOS 8 或更高版本
- Xcode 9 或更高版本
使用CocoaPods进行快速集成(注意:版本8.0或更高版本支持)
在文件& <code>Podfileó中添加以下内容:
platform :ios, '8.0'
target 'Your_Project_Name' do
pod 'WhatieSDK',:git => 'https://github.com/ATI-Wuhan/WhatieSDK_iOS.git'
end
在项目根目录中执行命令& <code>pod install</code>开始集成过程。有关CocoaPods的说明,请参阅& <a href="https://guides.cocoapods.org.cn">CocoaPods 指南</a>
备选方法:使用框架手动安装
您还可以将WhatieSDK作为框架添加到您的项目或工作区。
- 下载WhatieSDK.framework
- 在Xcode中打开您的项目,然后将
WhatieSDK.framework
拖放到您的项目中。 - 使用
#import <WhatieSDK/WhatieSDK.h>
在需要WhatieSDK的地方包含它
初始化SDK
您可以将以下代码添加到项目文件PrefixHeader.pch: #import <WhatieSDK/WhatieSDK.h>
打开文件 AppDelegate.m
,并在 application:didFinishLaunchingWithOptions:
方法中使用从开发平台获取的 appId
和 secretKey
初始化SDK,如下所示
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//Init WhatieSDK
[[EHOMESDK shareInstance] startWithAppId:appId secretKey:secretKey];
//your code...
}
现在,所有的准备工作都已经完成。
示例代码规范
除非其他说明,以下示例代码均位于ViewController
类的实现文件中。
@interface ViewController : UIViewController
@end
@implementation ViewController
//All example code are located here...
@end
4.用户管理
SDK提供用户管理功能,例如用户注册、用户登录、用户登出、登录密码更新和更改昵称。
注意
- 关于用户管理程序的其他所有信息对SDK都不是必须的。
- 用户电子邮件和密码的密文也将存储在我们的云平台上。
- 集成SDK到您的APP无需在云端的任何后端开发。
所有用户相关功能都可以在EHOMEUserModel类(单例)中找到。
4.1 用户注册
注意:以下示例代码是注册方法的成功调用。注册后,用户会自动登录,无需再调用登录方法。
电子邮件注册
电子邮件注册过程中不需要验证码。用户可以直接使用电子邮件注册账户。
-(void)registerByEmail{
[[EHOMEUserModel shareInstance] registerByEmail:@"your_email" password:@"your_password" success:^(id responseObject) {
NSLog(@"register success");
} failure:^(NSError *error) {
NSLog(@"register failed");
}];
}
4.2 用户登录
调用成功后,用户的会话将由SDK本地存储。下次启动应用时,用户将默认登录,无需进行更多登录操作。
电子邮件登录
-(void)loginByEmail{
[[EHOMEUserModel shareInstance] loginByEmail:@"your_email" password:@"your_password" success:^(id responseObject) {
NSLog(@"login success = %@", responseObject);
} failure:^(NSError *error) {
NSLog(@"login failed = %@", error);
}];
}
4.3 用户密码重置
使用电子邮件地址重置密码
如果您忘记密码,可以通过包含两个步骤的电子邮件地址重置您的密码:
- 将验证码发送到邮箱
-(void)sendVerifyCodeByEmail{
[[EHOMEUserModel shareInstance] sendVerifyCodeByEmail:@"your_email" success:^(id responseObject) {
NSLog(@"Verify Code sent success. res = %@", responseObject);
} failure:^(NSError *error) {
NSLog(@"Verify Code sent filed. error = %@", error);
}];
}
- 然后使用收到的验证码重置密码
-(void)resetPasswordByEmail {
[[EHOMEUserModel shareInstance] resetPasswordByEmail:@"your_email" newPassword:@"your_password" code:@"verify_code" success:^(id responseObject) {
NSLog(@"Reset password success. res = %@", responseObject);
} failure:^(NSError *error) {
NSLog(@"Reset password failed. error = %@", error);
}];
}
4.4 使用旧密码重置密码
如果您只想更新密码,可以使用电子邮件地址和旧密码来重置密码
-(void)resetPasswordByOldPassword{
[[EHOMEUserModel shareInstance] resetPasswordByOldPassword:@"your_old_password" newPassword: @"your_new_password" email:@"your_email" success:^(id responseObject) {
NSLog(@"Reset Password Success = %@", responseObject);
} failure:^(NSError *error) {
NSLog(@"Reset Password Failed = %@", error);
}];
}
4.5 更新用户设备列表
使用 [[EHOMEUserModel shareInstance] syncDeviceWithCloud…]
方法可以更新用户的当前设备列表 deviceArray
。
每个 deviceArray 都是 <EHOMEDeviceModel * >
类型。设备属性可以在 EHOMEDeviceModel.h
中找到。
-(void)reloadDeviceList{
[[EHOMEUserModel shareInstance] syncDeviceWithCloud:^(id responseObject) {
NSLog(@"Get my devices successful : %@", responseObject);
NSLog(@"deviceArray : %@", [EHOMEUserModel shareInstance].deviceArray);
} failure:^(NSError *error) {
NSLog(@"Get my devices failed : %@", error);
}];
}
4.6 处理设备列表更改
监听 EHOMEUserNotificationDeviceArrayChanged
通知,以便在设备列表数据 [EHOMEUserModel shareInstance].deviceArray
发生任何更改时接收通知。
//register notice EHOMEUserNotificationDeviceArrayChanged
-(void)viewDidLoad{
//Register Notice
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadData) name: EHOMEUserNotificationDeviceArrayChanged object:nil];
}
-(void)reloadData{
//Refresh UI here
}
-(void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
4.7 更新用户接收到的共享设备列表
使用 [[EHOMEUserModel shareInstance] syncSharedDeviceWithCloud…]
方法可以更新用户的当前共享设备列表 sharedDeviceArray
。
-(void)reloadSharedDeviceList{
[[EHOMEUserModel shareInstance] syncSharedDeviceWithCloud:^(id responseObject) {
NSLog(@"Get shared devices successful : %@", responseObject);
NSLog(@"sharedDeviceArray : %@", [EHOMEUserModel shareInstance].sharedDeviceArray);
} failure:^(NSError *error) {
NSLog(@"Get shared devices failed : %@", error);
}];
}
4.8 处理用户接收到的共享设备列表更改
监听 EHOMEUserNotificationSharedDeviceArrayChanged
通知,以便在设备列表数据 [EHOMEUserModel shareInstance].sharedDeviceArray
发生任何更改时接收通知。
//register notice EHOMEUserNotificationSharedDeviceArrayChanged
-(void)viewDidLoad{
//Register Notice
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadData) name: EHOMEUserNotificationSharedDeviceArrayChanged object:nil];
}
-(void)reloadData{
//Refresh UI here
}
-(void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
4.9 更新昵称
用户可以通过更新昵称的方式更改用户名,具体方法如下
-(void)updateNickname:(NSString *)nickname{
[[EHOMEUserModel shareInstance] updateNickname:@"your_nickname" success:^(id responseObject) {
NSLog(@"update nickname success. res = %@", responseObject);
} failure:^(NSError *error) {
NSLog(@"update nickname failed. error = %@", error);
}];
}
4.10 登出
用户可以通过以下方法登出应用程序
-(void)loginOut{
[[EHOMEUserModel shareInstance] loginOut:^(id responseObject) {
NSLog(@"logOut success = %@", responseObject);
} failure:^(NSError *error) {
NSLog(@"logOut failed = %@", error);
}];
}
5. SmartConfig和设备初始化
5.1 SmartConfig
设备使用EHOMESmartConfig单例函数执行网络配置,如下所示
-(void)smartConfig{
[[EHOMESmartConfig shareInstance] startSmartConfigWithSsid:@"your_ssid" bssid:@"your_bssid" password:@"your_wifi_password" success:^(id responseObject) {
NSLog(@"Smart config success = %@", responseObject);
NSInteger protocol = [[responseObject objectForKey:@"protocol"] integerValue];
//if protocol == 9,it’s your device;else,the device is other’s,you can get the eamil
if (protocol == 9) {
//success
}else{
//the device is other's
NSString *email = [[responseObject objectForKey:@"data"] objectForKey:@"email"];
}
} failure:^(NSError *error) {
NSLog(@"Smart config failed = %@", error);
}];
}
停止SmartConfig
启动SmartConfig后,应用程序将连续广播WiFi网络信息(直到SmartConfig成功或超时)。要取消操作,应调用[[EHOMESmartConfig shareInstance] stopSmartConfig]
方法。
-(void)stopSmartConfigAction{
[[EHOMESmartConfig shareInstance] stopSmartConfig];
}
5.2 设备初始化
完成SmartConfig过程后,设备应使用devId和设备名称进行初始化。
-(void)getStarted{
[[EHOMESmartConfig shareInstance] getStartedWithDevId:@"your_device_devId" deviceName:@"your_deviceName" success:^(id responseObject) {
NSLog(@"GET STARTED Success = %@", responseObject);
} failure:^(NSError *error) {
NSLog(@"GET STARTED Failed = %@", error);
}];
}
6. 设备控制
6.1 开关设备
您可以通过以下方法打开/关闭设备:
-(void)updateDeviceStatus:(BOOL)status{
[self.device updateDeviceStatus:@"your_status" success:^(id responseObject) {
NSLog(@"update device status success. res = %@", responseObject);
} failure:^(NSError *error) {
NSLog(@"update device status failed. error = %@", error);
}];
}
6.2 重命名设备
可以通过以下方式重命名设备名称:
-(void)updateDeviceName:(NSString *)deviceName{
[self.device updateDeviceName:@"your_deviceName" success:^(id responseObject) {
NSLog(@"update device name success. res = %@", responseObject);
} failure:^(NSError *error) {
NSLog(@"update device name failed. error = %@", error);
}];
}
6.3 删除设备
如果您不需要该设备,不论是自己使用的还是他人分享给您的,都可以删除。如果删除的是自己的设备,设备会被重置到网络待连接状态。
-(void)removeDevice{
[self.device removeDevice:^(id responseObject) {
NSLog(@"remove device success = %@", responseObject);
} failure:^(NSError *error) {
NSLog(@"remove device failed = %@", error);
}];
}
6.4 通过电子邮件分享设备
您可以通过以下方式将设备分享给朋友:
-(void)shareDeviceByEmail{
[self.device shareDeviceByEmail:@"your_friend_email" success:^(id responseObject) {
NSLog(@"share device success. res = %@", responseObject);
} failure:^(NSError *error) {
NSLog(@"share device failed. error = %@", error);
}];
}
6.5 删除共享
请参阅第6.3 删除设备。
6.6 重命名设备房间
-(void)updateDeviceRoomName{
[self.device updateRoomName:@"your_room_name" success:^(id responseObject) {
//update room name success
} failure:^(NSError *error) {
//update room name failed
}];
}
7. 计时器
重要提示: 循环:@“0000000”,每一位,0:关闭,1:开启,代表从左到右:星期日 星期六 星期五 星期四 星期三 星期二 星期一
7.1 添加计时器
设置计时器在特定时间操作设备。当计时器时间到达时,您的设备操作将生效。
@param loops
@param finishTime : 用户设置的特定时间,例如:@"18:57"
@param status : 当计时器到达时设备的预期状态
-(void)addTimer{
[self.device addTimerWithLoops:@"your_loops" time:@"your_time" status:@"your_status" tag:@"your_tag" success:^(id responseObject) {
NSLog(@"add timer success, response = %@", responseObject);
} failure:^(NSError *error) {
NSLog(@"add timer failed, error = %@", error);
}];
}
7.2 更新计时器
您可以通过以下方式更新/修改指定的计时器。
-(void)updateTimer{
[self.timer updateTimerWithLoops:@"your_loops" time:@"your_time" status:@"your_status" tag:@"your_tag" success:^(id responseObject) {
NSLog(@"update timer success, response = %@", responseObject);
} failure:^(NSError *error) {
NSLog(@"update timer failed, error = %@", error);
}];
}
7.3 更新计时器状态
使用以下方法更新指定设备下特定计时器的状态,即,0:关闭,1:开启
-(void)updateTimerStatus:(BOOL)status{
[self.timer updateTimerStatus:@"your_timerStatus" success:^(id responseObject) {
NSLog(@"update timer status success.response = %@", responseObject);
} failure:^(NSError *error) {
NSLog(@"update timer status failed.error = %@", error);
}];
}
7.4 删除计时器
通过以下方式删除指定设备下的指定计时器。
- (void)removeTimer {
[self.timer removeTimer:^(id responseObject) {
NSLog(@"remove timer success.response = %@", responseObject);
} failure:^(NSError *error) {
NSLog(@"remove timer failed.error = %@", error);
}];
}
7.5 获取所有计时器
通过以下方式获取指定设备下的所有计时器。
- (void)getAllTimers{
[self.device getAllTimers:^(id responseObject) {
NSLog(@"get all timers success,timers = %@", responseObject);
} failure:^(NSError *error) {
NSLog(@"get all timers failed,error = %@", error);
}];
}
8. 时间倒计时
可以为特定设备创建时间倒计时。
8.1 添加时间倒计时
设备上的操作将在时间倒计时结束后生效。
@param status : 倒计时结束时设备的状态
@param duration : 时间倒计时的持续时间。单位为秒,例如10seconds;如果为10分钟,值是600。
-(void)addTimingCountdown{
[self.device addTimingCountdownWithDuration:"your_duration" status:"your_status" success:^(id responseObject) {
NSLog(@"add timing countdown success. res = %@", responseObject);
int duration = [[responseObject objectForKey:@"duration"] intValue];
} failure:^(NSError *error) {
NSLog(@"add timing countdown failed. error = %@", error);
}];
}
8.2 获取时间倒计时
在特定设备下获取时间倒计时,然后,您可以在APP中显示其值。
-(void)getTimingCountdown{
[self.device getTimingCountdown:^(id responseObject) {
NSLog(@"get timing countdown success. res = %@", responseObject);
EHOMETimer *timer = responseObject;
} failure:^(NSError *error) {
NSLog(@"get timing countdown failed. error = %@", error);
}];
}
8.3 更新时间倒计时
一旦更新了时间倒计时,它将成为一个新的倒计时。请参阅8.1 添加时间倒计时。
9. 灯泡
9.1 开/关
请参阅第6.1节中的设备开/关操作。
9.2 白炽灯泡
您可以通过以下方法更改特定灯的光亮度:
-(void)brightnessSliderValueChange:(UISlider *)slider{
NSLog(@"brightness slider value = %f", slider.value);
[self.device updateIncandescentLightBrightness:(int)slider.value success:^(id responseObject) {
} failure:^(NSError *error) {
}];
}
9.3 RGB灯泡
9.3.1 更新RGB灯泡颜色
您可以通过以下方法更新特定RGB灯泡的颜色:
-(void)updateRGBLightColor{
NSString *rgb = [NSString stringWithFormat:@"%d_%d_%d", r, g, b];
[self.device updateRGBLightColorWithRGB:rgb success:^(id responseObject) {
} failure:^(NSError *error) {
}];
}
9.3.2 更新RGB灯泡光亮度
您可以通过以下方法更新特定RGB灯泡的光亮度:
-(void)rgbBrightnessSliderValueChange:(UISlider *)slider{
NSLog(@"rgb brightness slider value = %f", slider.value);
[self.device updateRGBLightBrightness:(int)slider.value success:^(id responseObject) {
} failure:^(NSError *error) {
}];
}
9.4 流水灯
9.4.1 更新流水灯颜色
您可以通过以下方法更新特定流水灯的颜色:
-(void)updateStreamLightColor{
[self.device updateStreamLightColorWithRGB1:@"your_rgb_color_1" RGB2:@"your_rgb_color_2" RGB3:@"your_rgb_color_3" RGB4:@"your_rgb_color_4" success:^(id responseObject) {
} failure:^(NSError *error) {
}];
}
9.4.2 更新流灯持续时间
您可以通过以下方法更新特定流灯的时间持续时间
-(void)updateStreamLightDuration{
[self.device updateStreamLightDuration:(int)@"your_duration" success:^(id responseObject) {
} failure:^(NSError *error) {
}];
}
9.4.3 更新流灯亮度
您可以通过以下方法更新特定流灯的亮度
-(void)updateStreamLightBrightness{
[self.device updateStreamLightBrightness:(int)@"your_brightness" success:^(id responseObject) {
} failure:^(NSError *error) {
}];
}
欢迎联系我们
- 苹果iOS贡献者:丁依然,IIDreams,陈林军
- 电子邮件: [email protected],[email protected]
许可证
WhatieSDK使用MIT许可证。