文章标题:《iOS SDK 集成指南》 文档更新:2015-09-29 API接口文档:下载
1.0 概述 1.1 SDK 功能概述 1.2 基础对象 XPGWifiSDK 简介 属性 API(共29个接口) sharedInstance startWithAppID getVersion setLogLevel registerSSIDs updateDeviceFromServer setDeviceWifi getSSIDList requestSendVerifyCode getCaptchaCode requestSendPhoneSMSCode verifyPhoneSMSCode registerUser registerUserByPhoneAndCode registerUserByEmail userLoginAnonymous userLoginWithUserName userLoginWithThirdAccountType userLogout transAnonymousUserToNormalUser transAnonymousUserToPhoneUser changeUserEmail changeUserPhone changeUserPassword changeUserPasswordByCode changeUserPasswordByEmail bindDeviceWithUid unbindDeviceWithUid getBoundDevicesWithUid 额外的回调 XPGWifiDevice 简介 属性 API(共 5 个接口) getHardwareInfo disconnect login isBind write XPGWifiSSID 简介 属性 XPGWifiBinary 简介 API(共 2 个借口) decode encode 1.3 专有名词解释 2.0 集成设备 2.1 注册机智云账号 2.2 新建设备接入 2.3 下载 SDK 2.4 获得 APP ID 和产品标识码(Product Key) 2.5 导入 SDK 2.6 使用 SDK 2.6.1初始化 2.6.2 设置打印的日志分级 2.7 如何获取 App Secret 3.0 用户管理 3.1 用户注册 3.1.1 注册普通用户 3.1.2 通过手机注册账号 3.1.3 通过邮箱注册账号 3.2 用户登录 3.2.1 匿名用户登录 3.2.2 实名用户登录 3.2.3 第三方用户登录 3.3 用户注销 3.4 忘记密码 3.4.1 通过手机验证码修改密码 3.4.2 通过云端给邮箱发送重置密码链接修改密码 3.5 修改密码 3.6 匿名用户转换实名用户 3.6.1 匿名用户转换普通用户 3.6.2 匿名用户转换手机用户 3.7 实名用户更改用户名(手机、邮箱,是三方账号) 3.7.1 将非匿名用户改成邮箱用户 3.7.2 将非匿名用户改成手机用户 4.0 设备管理 4.1 配置设备上线(onBoarding) 4.2 搜索绑定设备 4.2.1 云端获取设备列表并搜索局域网中的设备 4.2.2 绑定设备 示例4.2.2.1:通过设备实例绑定 示例4.2.2.2:通过静态信息绑定 4.2.3 解除绑定设备 4.3 登录设备 4.4 获取硬件信息 4.5 设备断开 5.0 控制设备和接收设备信息 5.1 发送控制指令 5.2 接收设备状态 5.2.1 布尔、整型、枚举 5.2.2 二进制 5.2.3 报警、故障 6.0 其他 6.1下载产品配置文件 7.0 错误代码解释 8.0 参考资料 9.0 联系我们 1.0 概述
1.1 SDK 功能概述
该SDK主要分为4大功能。
分别为:
1、配置设备上网(on-boarding)
功能分为 Air-Link 和 Soft-AP 模式
2、用户管理
功能分为注册、登录、注销、忘记密码和修改密码 用户类型分为普通用户、手机用户、邮箱用户和第三方用户
3、设备管理
功能分为搜索设备、绑定设备、解除绑定设备、登录、设备状态信息 设备状态分为在线、离线、大小循环、绑定、注销
4、设备控制
功能分为控制设备、获取设备控制信息、设备给客户端发信息
SDK 基本流程
GoKit:
登录账号 —> 配置设备上网 —> 搜索设备 —> 绑定 —> 获取设备绑定列表 —> 控制设备
虚拟设备:
登录账号 —> 绑定虚拟设备 —> 获取设备绑定列表 —> 控制设备
账号操作基本流程
普通实名账号:
注册 —> 登录 —> 注销 登录 —> 修改密码
手机账号
注册 —> 登录 —> 注销 登录 —> 修改密码 注册 —> 忘记密码
第三方账号
第三方SDK —> 获取 uid、token —> 登录 —> 注销 —>第三方SDK注销
配置设备上网流程
Soft-AP 模式
设备进入 Soft-AP 模式 —> 手机连上设备的热点 —> 发送配置请求 —> 配置结果
Air-Link 模式
手机连上 Wi-Fi —> 设备进入 Air-Link 模式 —> 发送配置请求 —>配置结果
绑定实体设备基本流程
设备上大循环 —> 手机与设备保持局域网 —> 发现设备 —> 设备按下获取 Passcode 按钮(此流程可选) —> 绑定结果
绑定虚拟设备基本流程
登录 site.gizwits.com 启动一台虚拟设备 —> 显示该设备的二维码 —> 手机扫描该二维码 —> 绑定结果
1.2 基础对象
XPGWifiSDK
简介
机智云 Wi-Fi SDK 的基础类。该类提供了初始化、基本设置、用户管理、设备管理的基本接口。继承 NSObject。
遵循 Cocoa 的规则,方法前面是加号(+)的,则为静态接口,方法前面是减号(-)的,则为实例接口。
得到 SDK 的单例实例
XPGWifiSDK *singleton = [XPGWifiSDK sharedInstance]; 属性
属性 描述 delegate 使用委托获取对应事件。XPGWifiSDK 对应的回调接口在 XPGWifiSDKDelegate 定义。需要用到哪个接口,回调即可。 API(共29个接口)
sharedInstance
获取 XPGWifiSDK 单例的实例
定义 + (XPGWifiSDK *)sharedInstance; 返回值 返回初始化后 SDK 唯一的实例。SDK 未初始化,或者初始化失败,返回 nil。 示例 设置SDK的委托 [XPGWifiSDK sharedInstance].delegate = self; startWithAppID
初始化 SDK
定义 ++ (void)startWithAppID:(NSString *)appID; 参数 appid 在 site.gizwits.com] 中,每个注册的设备在“产品信息”中,都能够查到对应的 appID。详细见:2.4 获得 APP ID 和产品标识码(Product Key) 示例 [XPGWifiSDK startWithAppID:@"42a7563f305342ae805cbb21d968a0ce"] getVersion
获取 SDK 版本号
定义 +- (NSString*)getVersion; 返回值 返回当前 SDK 的版本号码 示例 [[XPGWifiSDK sharedInstance] getVersion]; setLogLevel
设置全局日志分级
定义 + (void)setLogLevel:(GizLogPrintLevel)logLevel; 参数 logLevel 日志分级,参考 GizLogPrintLevel 定义:
GizLogPrintNone 无日志输出 GizLogPrintI 只输出错误和业务日志 GizLogPrintII 只输出调试和业务日志 GizLogPrintAll 输出详细日志 logFile 日志文件,保存在 /Documents 下。设置为 nil,则不保存日志文件。 注意 当 APP 出现意外退出时,日志文件无法完整保存 registerSSIDs
设置 Soft AP 模式专用的 SSID 前缀(已废弃的接口) 请使用以下替代方法:
- (void)setDeviceWifi:(NSString)ssid key:(NSString)key mode:(XPGConfigureMode)mode softAPSSIDPrefix:(NSString)softAPSSIDPrefix timeout:(int)timeout wifiGAgentType:(NSArray)types; 定义 + (void)registerSSIDs:(NSString *)ssidPrefix, ... NS_REQUIRES_NIL_TERMINATION DEPRECATED_ATTRIBUTE; 参数 ssidPrefix 对应的SSID前缀,也可以设置N个前缀。未设置,默认为 “XPG-GAgent”, “XPG_GAgent” updateDeviceFromServer
获取设备配置文件
定义 + (void)updateDeviceFromServer:(NSString )productKey; 参数 productKey 产品标识码。详细见:2.4 获得 APP ID 和产品标识码(Product Key) 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didUpdateProduct:(NSString *)product result:(int)result; 回调参数 wifiSDK XPGWifiSDK 实例(下同) product 产品标识码(Product Key) result 错误代码,详细见:7.0 错误代码解释(下同) 示例 [XPGWifiSDK updateDeviceFromServer:@"0fb26c41382a4d2ab4a76e7241efec52"]; setDeviceWifi
配置路由
定义 - (void)setDeviceWifi:(NSString)ssid key:(NSString)key mode:(XPGConfigureMode)mode softAPSSIDPrefix:(NSString)softAPSSIDPrefix wifiGAgentType:(NSArray)types; timeout:(int)timeout; 参数 ssid 无线热点 SSID 名 key 需要将设备配上无线路由的密码 mode XPGWifiSDKSoftAPMode 使用 Soft-AP 模式 XPGWifiSDKAirLinkMode 使用 Air-Link 模式 softAPSSIDPrefix Soft-AP模式下,设置正确的SSID前缀 timeout 操作超时,最小30秒 wifiGAgentType 指定模组类型 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didSetDeviceWifi:(XPGWifiDevice )device result:(int)result; 回调参数 device 设备实例 示例 [[XPGWifiSDK sharedInstance] setDeviceWifi:@"your_ssid" key:@"your_key" mode:XPGWifiSDKAirLinkMode softAPSSIDPrefix:nil timeout:60 wifiGAgentType:[NSArray arrayWithObjects: @(XPGWifiGAgentTypeESP), nil]]; getSSIDList
在 Soft-AP 模式时,获得 SSID 列表
定义 - (void)getSSIDList; 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didGetSSIDList:(NSArray )ssidList result:(int)result; 回调参数 ssidList 以若干 XPGWifiSSID 实例组成的 SSID 信号列表 requestSendVerifyCode
向指定的手机号发送验证码(已废弃,新版 SDK 不再可用)
定义 - (void)requestSendVerifyCode:(NSString )phone; 参数 phone 中国手机号码,不需要带+86。例如 13012345678 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didRequestSendVerifyCode:(NSNumber )error errorMessage:(NSString )errorMessage; 回调参数 error 错误代码,详细见:7.0 错误代码解释(下同) errorMessage 与错误代码匹配的错误信息(下同) 新的替代方法:
getCaptchaCode requestSendPhoneSMSCode verifyPhoneSMSCode
getCaptchaCode
通过 App Secret 获取图片验证码的相关信息
定义 - (void)getCaptchaCode:(NSString )appSecret; 参数 appSecret 应用的 secret 信息,从 site.gizwits.com 中可以看到。如何获取 App Secret? 回调 - (void)wifiSDK:(XPGWifiSDK )wifiSDK didGetCaptchaCode:(NSError)result token:(NSString)token captchaId:(NSString )captchaId captchaURL:(NSString)captchaURL; 回调参数 wifiSDK SDK 实例(下同) result 错误信息,包含错误码和错误内容。错误代码,详细见:7.0 错误代码解释(下同) token 图片验证码 token captchaId 图片验证码 id captchaURL 图片验证码网址 requestSendPhoneSMSCode
通过图形验证码相关信息获取手机验证码
定义 - (void)requestSendPhoneSMSCode:(NSString )token captchaId:(NSString)captchaId captchaCode:(NSString)captchaCode phone:(NSString)phone; 参数 token 通过 getCaptchaCode 获取到的 token captchaId 通过 getCaptchaCode 获取到的 captchaId phone 手机号码 captchaCode 图片验证码的内容 回调 - (void)wifiSDK:(XPGWifiSDK )wifiSDK didRequestSendPhoneSMSCode:(NSError)result; verifyPhoneSMSCode
验证手机验证码的正确性
定义 - (void)verifyPhoneSMSCode:(NSString )token phoneCode:(NSString)phoneCode phone:(NSString)phone; 参数 token 通过 getCaptchaCode 获取到的 token phoneCode 手机验证码 phone 手机号码 回调 - (void)wifiSDK:(XPGWifiSDK )wifiSDK didVerifyPhoneSMSCode:(NSError*)result; 除此之外,还可以使用以下接口验证短信验证码。
registerUserByPhoneAndCode transAnonymousUserToPhoneUser changeUserPhone changeUserPasswordByCode
注意:短信验证完成后,短信验证码将立即失效。
registerUser
注册普通用户
定义 - (void)registerUser:(NSString )userName password:(NSString )password; 参数 username 用户名(只是用户名,跟手机号、邮箱、第三方账号无关) password 密码 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didRegisterUser:(NSNumber )error errorMessage:(NSString )errorMessage uid:(NSString )uid token:(NSString *)token; 回调参数 uid 注册成功后得到 uid,失败则为 nil,同时有错误信息 token 注册成功后得到 token,失败则为 nil,同时有错误信息 registerUserByPhoneAndCode
通过手机号注册用户
定义 + (XPGWifiSDK )- (void)registerUserByPhoneAndCode:(NSString )phone password:(NSString )password code:(NSString )code;; 参数 phone 手机号 password 密码 code 手机验证码。详细见:向指定的手机号发送验证码 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didRegisterUser:(NSNumber )error errorMessage:(NSString )errorMessage uid:(NSString )uid token:(NSString *)token; registerUserByEmail
通过邮箱注册用户
定义 - (void)registerUserByEmail:(NSString )email password:(NSString )password; 参数 email 邮箱账号 password 密码 code 手机验证码。详细见:向指定的手机号发送验证码 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didRegisterUser:(NSNumber )error errorMessage:(NSString )errorMessage uid:(NSString )uid token:(NSString *)token; userLoginAnonymous
注册并登录匿名账号
定义 - (void)userLoginAnonymous; 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didUserLogin:(NSNumber )error errorMessage:(NSString )errorMessage uid:(NSString )uid token:(NSString *)token; 回调参数 uid 登录成功后得到 uid,失败则为 nil,同时有错误信息 token 登录成功后得到 token,失败则为 nil,同时有错误信息 userLoginWithUserName
登录用户
定义 - (void)userLoginWithUserName:(NSString )szUserName password:(NSString )szPassword; 参数 szUserName 用户名(包括手机、邮箱,但不包括第三方用户) szPassword 密码 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didUserLogin:(NSNumber )error errorMessage:(NSString )errorMessage uid:(NSString )uid token:(NSString *)token; 回调参数 uid 登录成功后得到 uid,失败则为 nil,同时有错误信息 token 登录成功后得到 token,失败则为 nil,同时有错误信息 userLoginWithThirdAccountType
第三方账号登录
定义 - (void)userLoginWithThirdAccountType:(XPGWifiThirdAccountType)szThirdAccountType uid:(NSString )szUid token:(NSString )szToken; 参数 szThirdAccountType 第三方账号类型:新浪、百度 szUid 通过 Share SDK 或 Baidu SDK 登录后得到 uid szToken 通过 Share SDK 或 Baidu SDK 登录后得到 token 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didUserLogin:(NSNumber )error errorMessage:(NSString )errorMessage uid:(NSString )uid token:(NSString *)token; 回调参数 uid 登录成功后得到 uid,失败则为 nil,同时有错误信息 token 登录成功后得到 token,失败则为 nil,同时有错误信息 userLogout
注销当前登录的账号(SDK 未实现具体功能)
定义 - (void)userLogout:(NSString )uid; 参数 uid 登录或注册后得到的uid 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didUserLogout:(NSNumber )error errorMessage:(NSString )errorMessage; transAnonymousUserToNormalUser
匿名用户转换普通用户
定义 - (void)transAnonymousUserToNormalUser:(NSString )token userName:(NSString )userName password:(NSString )password; 参数 token 从登录或注册的账号得到 token userName 新用户 password 新密码 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didTransUser:(NSNumber )error errorMessage:(NSString )errorMessage; transAnonymousUserToPhoneUser
匿名用户转换手机用户
定义 - (void)transAnonymousUserToPhoneUser:(NSString )token phone:(NSString )phone password:(NSString )password code:(NSString )code; 参数 token 从登录或注册的账号得到 token phone 手机号码 password 新密码 code 手机验证码。详细见:向指定的手机号发送验证码 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didTransUser:(NSNumber )error errorMessage:(NSString *)errorMessage; changeUserEmail
将非匿名用户改名为邮箱用户
定义 - (void)changeUserEmail:(NSString )token email:(NSString )email; 参数 token 从登录或注册的账号得到 token email 新邮箱用户 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didChangeUserEmail:(NSNumber )error errorMessage:(NSString *)errorMessage; changeUserPhone
将非匿名用户改为手机用户
定义 - (void)changeUserPhone:(NSString )token phone:(NSString )phone code:(NSString )code; 参数 token 从登录或注册的账号得到 token phone 新手机号码 code 手机验证码。详细见:向指定的手机号发送验证码 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didChangeUserPhone:(NSNumber )error errorMessage:(NSString )errorMessage; changeUserPassword
修改用户密码
定义 - (void)changeUserPassword:(NSString )token oldPassword:(NSString )oldPassword newPassword:(NSString )newPassword; 参数 token 从登录或注册的账号得到 token oldPassword 旧密码 newPassword 新密码 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didChangeUserPassword:(NSNumber )error errorMessage:(NSString )errorMessage; changeUserPasswordByCode
手机用户通过短信验证码重置密码
定义 - (void)changeUserPasswordByCode:(NSString )phone code:(NSString )code newPassword:(NSString )newPassword; 参数 phone 已注册的手机号 code 手机验证码。详细见:向指定的手机号发送验证码 newPassword 新密码 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didChangeUserPassword:(NSNumber )error errorMessage:(NSString )errorMessage; changeUserPasswordByEmail
邮箱用户通过邮箱重置密码
定义 - (void)changeUserPasswordByEmail:(NSString )email; 参数 email 已注册的邮箱 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didChangeUserPassword:(NSNumber )error errorMessage:(NSString )errorMessage; bindDeviceWithUid
绑定设备到服务器
定义 - (void)bindDeviceWithUid:(NSString )uid token:(NSString )token did:(NSString )did passCode:(NSString )passCode remark:(NSString)remark; 参数 uid 登录后获取到的uid token 登录后获取到的token did 设备云端身份标识 DID,小循环发现设备时可以获取到。如果小循环发现设备时 did 为空,此时设备无法绑定。需要设备与云端成功注册后,方可绑定。 passCode 用于控制设备的密钥。如果是在小循环发现过的设备,则此项可为 nil,让系统获取。 注意:系统获取 passcode 的过程中,有部分设备需要按获取 passcode 按钮才可以成功获取(GoKit 除外)。无法获取 passcode 也不能绑定。 remark 设备别名 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didBindDevice:(NSString )did error:(NSNumber )error errorMessage:(NSString *)errorMessage; 回调参数 did 对应绑定时,调用设置的参数did unbindDeviceWithUid
从服务器解除绑定设备
定义 - (void)unbindDeviceWithUid:(NSString )uid token:(NSString )token did:(NSString )did passCode:(NSString )passCode; 参数 uid 登录后获取到的uid token 登录后获取到的token did 设备云端身份标识 DID,小循环发现设备时可以获取到。如果小循环发现设备时 did 为空,此时设备无法绑定。需要设备与云端成功注册后,方可绑定。 passCode 用于控制设备的密钥。如果是在小循环发现过的设备,则此项可为 nil,让系统获取。 注意:系统获取 passcode 的过程中,有部分设备需要按获取 passcode 按钮才可以成功获取(GoKit 除外)。无法获取 passcode 也不能绑定。 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didUnbindDevice:(NSString )did error:(NSNumber )error errorMessage:(NSString )errorMessage; 回调参数 did 对应绑定时,调用设置的参数did 注意 解除绑定未绑定过的设备会失败。 getBoundDevicesWithUid
从云端获取绑定设备及获取本地设备列表
定义 - (void)getBoundDevicesWithUid:(NSString )uid token:(NSString )token specialProductKeys:(NSString )specialProductKey, ... NS_REQUIRES_NIL_TERMINATION; 参数 uid 登录后获取到的uid token 登录后获取到的token specialProductKey 指定产品识别码过滤。nil 则不过滤,可以过滤多个识别码。设置识别码,系统会自动下载对应的配置文件,如果配置存在则不会覆盖。 回调 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didDiscovered:(NSArray *)deviceList result:(int)result; 回调参数 deviceList 设备列表,可以是空列表,也可以是由一个或多个 XPGWifiDevice 的实例组成的数组 额外的回调
定义 - (NSUInteger)XPGWifiSDK:(XPGWifiSDK )wifiSDK needsCalculateCRC:(NSData )data; 参数 data 二进制数据 返回值 计算出的CRC 注意 这个回调不适用 v4 版协议,仅支持 v3 版使用 XPGWifiDevice
简介
机智云 Wi-Fi 的设备类。该类提供了设备状态,设备信息,控制、接收设备信息和设置硬件日志功能(待确认)。该设备的实例,是通过 XPGWifiSDK 类分配出来的,不能自行创建。
如何产生 XPGWifiDevice 实例?参考 4.2.1 云端获取设备列表并搜索局域网中的设备
属性
属性 描述 delegate 使用委托获取对应事件。XPGWifiDevice 对应的回调接口在 XPGWifiDeviceDelegate 定义。需要用到哪个接口,回调即可。 macAddress 设备的物理地址。如果是 VIRTUAL:SITE,则是虚拟设备 did 设备云端身份标识 DID passcode 用于控制设备的密钥 ipAddress 设备的小循环 IP 地址 productKey 设备的产品唯一标识符 productName 设备名称 ui 界面信息,以 QuickDialog 为标准 remark 设备别名。在绑定的时候设置 isConnected 当前设备是否已经建立连接 isLAN 当前设备是否是小循环设备 isOnline 云端判断设备是否在线 isDisabled 云端判断设备是否注销 API(共 5 个接口)
getHardwareInfo
获取硬件信息
定义 - (void)getHardwareInfo; 回调 - (void)XPGWifiDevice:(XPGWifiDevice )device didQueryHardwareInfo:(NSDictionary )hwInfo; 回调参数 hwInfo 硬件信息。对应的硬件信息键值有:
XPGWifiDeviceHardwareWifiHardVerKey Wi-Fi 硬件版本 XPGWifiDeviceHardwareWifiSoftVerKey Wi-Fi 软件版本 XPGWifiDeviceHardwareMCUHardVerKey MCU 硬件版本 XPGWifiDeviceHardwareMCUSoftVerKey MCU 软件版本 XPGWifiDeviceHardwareFirmwareIdKey 固件 ID XPGWifiDeviceHardwareFirmwareVerKey 固件版本号 XPGWifiDeviceHardwareProductKey 产品标识码 disconnect
断开当前设备的连接
定义 - (BOOL)disconnect; 返回值 YES 需要处理回调 NO 断开连接失败 回调 - (void)XPGWifiDeviceDidDisconnected:(XPGWifiDevice *)device; 回调参数 device 返回当前的设备实例(下同) login
设备登录
定义 - (void)login:(NSString )uid token:(NSString )token; 参数 uid 登录后获取到的uid token 登录后获取到的token 回调 - (void)XPGWifiDevice:(XPGWifiDevice *)device didLogin:(int)result; 回调参数 result 错误代码(下同)。注意,登录接口除了标准的错误代码,还有登录专用的错误代码。具体定义参考 7.0 错误代码解释 isBind
判断设备是否绑定
定义 - (BOOL)isBind:(NSString *)uid; 参数 uid 登录后获取到的uid 返回值 YES 设备已绑定 NO 设备未绑定 write
控制设备
定义 - (NSInteger)write:(NSDictionary )data; 参数 data 合法的控制指令。参考 http://site.gizwits.com/document/m2m/i_02_datapoint/ 返回值 返回写入的字节数。0 或小于 0 则控制失败。 回调 - (BOOL)XPGWifiDevice:(XPGWifiDevice )device didReceiveData:(NSDictionary *)data result:(int)result; 回调参数 data 包含了控制部分的数据及透传的二进制数据 注意 回调函数控制了不一定会触发。这个回调函数会根据设备的实际推送数据的情况推送数据。 XPGWifiSSID
简介
记录相应的 SSID 信息类,包括 SSID 名和信号强度。应用场景,参考 4.1 配置设备上线(onBoarding)
属性
属性 描述 name SSID名。我们连接一个Wi-Fi热点时,可以搜索到的名字。 rssi 热点对应的信号强度。取值范围 0-100 XPGWifiBinary
简介
二进制与字符串相互转换的工具。应用场景,参考 5.0 控制设备和接收设备信息
API(共 2 个借口)
decode
将字符串解码成二进制
定义 + (NSData )decode:(NSString )str; 参数 str 输入编码过的字符串。格式为标准 Base64 字符串 返回值 方法调用成功,返回非空的二进制数据。调用失败,则返回 nil 示例1 NSData *data = [XPGWifiBinary decode:@"QQ=="]; NSLog(@"data = %@", data);
输出结果: data = <41> 示例2 NSData *data = [XPGWifiBinary decode:@"==="]; NSLog(@"data = %@", data);
输出结果: data = (null) encode
将二进制编码成字符串
定义 + (NSString )encode:(NSData )data; 参数 data 输入非空二进制 返回值 方法调用成功,返回非空字符串。调用失败,则返回空字符串 nil 示例 char bytes[] = {0x41}; NSData data = [NSData dataWithBytes:bytes length:sizeof(bytes)]; NSString str = [XPGWifiBinary encode:data]; NSLog(@"str = %@", str);
输出结果: str = QQ== 1.3 专有名词解释
以下为简单的名词解释,使用这些名词的时候请规范字母的大小写
机智云
机智云(Gizwits)是国内第一个专门为智能硬件提供后台支持的云服务平台。成立于2010年,已为过百家国内外智能硬件开发商累计超过200万台设备提供云服务。2014.9月发布机智云2.0,为国内开发者以及企业团队提供智能硬件自助开发及设备云服务。
GAgent
全称Gizwits Agent,运行于Wi-Fi模块中,设备通过GAgent接入机智云服务器。目前已兼容国内主流的Wi-Fi模块,开发者也可以通过获取GAgent二次开发包实现自定义的模块接入机智云。
小循环
智能设备与手机、智能设备与智能设备之间,通过连接同一个路由器实现局域网内部的通信(查看状态或控制),我们称之为小循环。
大循环
智能设备通过路由器或直接接入互联网以实现用户的远程监测与控制,我们称为大循环。
ProductKey
产品标识码,开发者通过机智云后台创建新产品后,自动生成的一个32位字符串。在机智云的数据库中是一个唯一的号码,开发者完成开发写入设备主控MCU后,机智云通过此标识码对设备进行识别并自动完成注册。
did
设备号,当一个设备初次接入机智云时,机智云自动根据ProductKey以及设备Wi-Fi模块MAC地址为此设备注册一个did,此did全网唯一,用于与用户的绑定及后续操作。
passcode
设备通行证,用于校验用户的绑定/控制权限。设备初次上线时,云端会分配一个passcode存入设备,但用户发起设备绑定时,只要是合法操作即可拿到此通行证,以成功绑定设备并对设备进行有效期内的查看、控制等操作。
AppID
应用标识码,当开发者需要为一款智能产品开发应用(包括iOS、Android、Web应用等)时,后台会自动生成一个AppID,并与此设备进行关联。应用开发时需要填入此AppID。
Onboarding
用户将一款基于Wi-Fi的物联网设备配置连接上路由器的过程称为Onboarding。新设备第一次使用时需要知道路由器的账号和密码,以通过路由器连接互联网。由于大多数的物联网设备没有自带的屏幕和键盘,所以需要通过智能手机向设备发送路由器的SSID和密码,这个过程机智云称为Onboarding。机智云提供的Wi-Fi设备接入SDK中已经内置了此配置的功能。
AirLink
机智云推出的实现Onboarding的一套技术名称,兼容了多个Wi-Fi模块厂商的Smart-Config协议以及一套良好用户体验的标准Onboarding操作流程,机智云的Wi-Fi设备接入SDK已经内置AirLink技术。
SoftAP
由于目前各个Wi-Fi模块厂商的Smart Config协议均未完全成熟,也不支持5G路由器信号。机智云在提供了AirLink配置模式的同时也支持SoftAP模式配置设备接入路由器。当设备进入SoftAP配置模式时,设备本身将成为一个AP,智能手机可直接与设备进行连接,然后在手机上的界面上输入路由器的SSID和密码,设备接收到信息的时候会自动尝试连接路由器,连接成功则自动切换到正常使用的模式。
2.0 集成设备
2.1 注册机智云账号
在 http://site.gizwits.com/developer/register 页面注册账号,输入个人资料即可完成注册。
2.2 新建设备接入
登录到开发者网站 在登录页面 http://site.gizwits.com/developer/login 登录账号后,进入产品管理页面
点击“新建设备接入”后,我们就可以通过向导,去添加我们想要的模块了。
通讯方式:
通讯方式 描述 Wi-Fi 通过无线Wi-Fi网接入设备(默认) BLE 通过蓝牙4.0接入设备,目前该平台仅支持此部分的数据统计。详细见:如何使用蓝牙BLE/BT SDK 进行统计 BT 通过蓝牙3.0及以下版本的协议接入设备,目前该平台仅支持此部分的数据统计。详细见:如何使用蓝牙BLE/BT SDK 进行统计 要通过添加产品,使用机智云 SDK,我们选择 Wi-Fi。
接着,你可以通过方案模版创建,也可以通过手动编辑数据点创建。创建好数据点后点击下一步
2.3 下载 SDK
创建完毕,就可以下载 SDK 及其他产品开发资源
也可以通过产品管理页面下载对应的产品开发资源
2.4 获得 APP ID 和产品标识码(Product Key)
进入产品管理页面,点击产品信息即可看到
相关信息:如何通过SDK和Product Key,获取相应的配置文件
2.5 导入 SDK
将下载好的 SDK 导入到工程
第一步,双击解开压缩包 XPGWifiSDK-iOS-xxx.zip
第二步,将 XPGWifiSDK.framework 拷贝到项目目录,并添加到指定的工程
第三步,下载并添加依赖库 OpenSSL 点击下载。下载完成后双击解压后,将 lib-ios 拷贝到项目目录,并添加到指定的工程
第四步,添加系统自带的连接库 libc++、SystemConfiguration、CoreTelephony
最后,确保工程里面有这五个连接库,SDK就算添加完成了
2.6 使用 SDK
初始化之前,或者是使用该 SDK 的相关功能时,需要先引用头文件
每个功能的使用,必须要初始化SDK,才能够正常使用的。
定义
- (void)startWithAppID:(NSString *)appID; 输入参数
参数 描述 appID 在 site.gizwits.com 中,每个注册的设备在“产品信息”中,都能够查到对应的 appID。详细见:2.4 获得 APP ID 和产品标识码(Product Key) 示例
[XPGWifiSDK startWithAppID:@"42a7563f305342ae805cbb21d968a0ce"]; 当然,初始化 SDK 时,我们需要对 SDK 的全局进行设置。可选的设置内容有:
判断指定的 SSID 为 Soft-AP 模式 设置打印的日志分级 2.6.2 设置打印的日志分级
设置日志分级,根据需要,可以查看不同级别内容的日志。
定义
- (void)setLogLevel:(GizLogPrintLevel)logLevel; 输入参数
参数 描述 logLevel 日志分级,参考 GizLogPrintLevel 定义
GizLogPrintNone 无日志输出 GizLogPrintI 只输出错误、业务日志 GizLogPrintII 输出调试、业务日志 GizLogPrintAll 全部输出" 示例
[XPGWifiSDK setLogLevel:GizLogPrintAll]; 注意:设置输出日志到文件时,程序如果Crash,文件内容无法输出保存。
2.7 如何获取 App Secret
进入产品管理页面,点击产品信息,可以看到设备详细信息下,有已绑定的应用。
点击应用名称,就可以看到对应应用的 App Secret 了。
3.0 用户管理
3.1 用户注册
3.1.1 注册普通用户
注册普通的用户,使用用户名、密码即可创建一个账号。
定义
- (void)registerUser:(NSString )userName password:(NSString )password; 输入参数
参数 描述 userName 用户名(只是用户名,跟手机号、邮箱、第三方账号无关) password 密码 回调接口
- (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didRegisterUser:(NSNumber )error errorMessage:(NSString )errorMessage uid:(NSString )uid token: (NSString *)token; 示例
//设置协议引用
@interface Class1 ()
//调用注册方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] registerUser:@"testUser" password:@"123456"];
//使用注册事件 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didRegisterUser:(NSNumber )error errorMessage:(NSString )errorMessage uid:(NSString )uid token: (NSString *)token { if([error intValue] == XPGWifiError_NONE) { //注册成功,可以成功获取到 uid 和 token } else { //注册失败,打印错误信息 } } 除了注册普通用户之外,您还可以: 通过手机注册账号 通过邮箱注册账号 注:使用这些 API 之前,请确保 SDK 已经初始化。
3.1.2 通过手机注册账号
通过手机注册账号,需要一个有效的手机号,注册时需要通过短信验证码验证后,就能使用了。
第一步:获取图形验证码
定义
- (void)getCaptchaCode:(NSString *)appSecret; 输入参数
参数 描述 appSecret 应用的 secret 信息,从 site.gizwits.com 中可以看到。如何获取 App Secret? 回调接口
- (void)wifiSDK:(XPGWifiSDK )wifiSDK didGetCaptchaCode:(NSError)result token:(NSString)token captchaId:(NSString )captchaId captchaURL:(NSString*)captchaURL; 示例
//设置协议引用
@interface Class1 ()
//调用获取图片验证码方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] getCaptchaCode:captchaCode];
//使用获取图片验证码事件 - (void)wifiSDK:(XPGWifiSDK )wifiSDK didGetCaptchaCode:(NSError )result token:(NSString )token captchaId:(NSString )captchaId captchaURL:(NSString )captchaURL { if(result.code == XPGWifiError_NONE) { //获取图片验证码成功,下载验证码图片 NSURL url = [NSURL URLWithString:captchaURL]; NSData data = [NSData dataWithContentsOfURL:url]; if(data) { //把验证码图片显示在 UI 上 UIImage verifyImage = [UIImage imageWithData:data]; ... } } else { //获取图片验证码失败 } } 第二步:通过图片验证码获取短信验证码
定义
- (void)- (void)requestSendPhoneSMSCode:(NSString )token captchaId:(NSString)captchaId captchaCode:(NSString)captchaCode phone:(NSString)phone; 输入参数
参数 描述 token 验证码 token,通过 getCaptchaCode 获取 phoneCode 手机短信中的验证码内容 phone 手机号 回调接口
- (void)wifiSDK:(XPGWifiSDK )wifiSDK didVerifyPhoneSMSCode:(NSError)result; 示例
//设置协议引用
@interface Class1 ()
//调用获取手机短信验证码方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] requestSendPhoneSMSCode:token captchaId:captchaId captchaCode:"WXAN" phone:@"13012345678"];
//使用获取手机短信验证码事件 - (void)wifiSDK:(XPGWifiSDK )wifiSDK didRequestSendPhoneSMSCode:(NSError )result { if(result.code == XPGWifiError_NONE) { //获取手机验证码成功 } else { //获取手机验证码失败 } } 第三步:通过手机验证码注册
拿到手机验证码后,就可以使用这个接口了。
定义
- (void)registerUserByPhoneAndCode:(NSString )phone password:(NSString )password code:(NSString *)code; 输入参数
参数 描述 phone 手机号 password 密码 code 手机验证码。详细见:向指定的手机号发送验证码 回调接口
- (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didRegisterUser:(NSNumber )error errorMessage:(NSString )errorMessage uid:(NSString )uid token: (NSString *)token; 示例
//设置协议引⽤
@interface Class1 ()
//调用注册方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] registerUserByPhoneAndCode:@"13012345678" password:@"123456" code:@"654321"];
//使用注册事件 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didRegisterUser:(NSNumber )error errorMessage:(NSString )errorMessage uid:(NSString )uid token: (NSString *)token { if([error intValue] == XPGWifiError_NONE) { //注册成功,可以成功获取到 uid 和 token } else { //注册失败,打印错误信息 } } 除了通过手机注册账号之外,您还可以: 注册普通用户 通过邮箱注册账号 注:使用这些 API 之前,请确保 SDK 已经初始化。
3.1.3 通过邮箱注册账号
通过合法的邮箱,注册一个账号。注册成功后,云端会给指定邮箱发送注册成功的邮件。
定义
(void)registerUserByEmail:(NSString )email password:(NSString )password; 输入参数
参数 描述 email 邮箱账号 password 密码 回调接口
- (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didRegisterUser:(NSNumber )error errorMessage:(NSString )errorMessage uid:(NSString )uid token: (NSString *)token; 示例
//设置协议引用
@interface Class1 ()
//调用注册方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] registerUserByEmail:@“10000@qq.com” password:@"123456"];
//使用注册事件 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didRegisterUser:(NSNumber )error errorMessage:(NSString )errorMessage uid:(NSString )uid token: (NSString *)token { if([error intValue] == XPGWifiError_NONE) { //注册成功,可以成功获取到 uid 和 token } else { //注册失败,打印错误信息 } } 除了通过邮箱注册账号之外,您还可以: 注册普通用户 通过手机注册账号 注:使用这些 API 之前,请确保 SDK 已经初始化。
3.2 用户登录
3.2.1 匿名用户登录
匿名用户登录,如果账号不存在,系统会根据设备唯一标识码,生成一个匿名账号,并登录该账号
为什么要先登录账号?登录账号后,可以存取绑定信息,是实现控制设备之前一个很重要的操作。
定义
-
(void)userLoginAnonymous; 回调接口
-
(void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didUserLogin:(NSNumber )error errorMessage:(NSString )errorMessage uid:(NSString )uid token: (NSString *)token; 示例
//设置协议引用
@interface Class1 ()
//调用注册方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] userLoginAnonymous];
//使用登录事件 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didUserLogin:(NSNumber )error errorMessage:(NSString )errorMessage uid:(NSString )uid token: (NSString *)token { if([error intValue] == XPGWifiError_NONE) { //登录成功,把 uid 和 token 保存起来 } else { //登录失败,打印错误信息 } } 除了匿名用户登录之外,您还可以: 实名用户登录 第三方用户登录 注:使用这些 API 之前,请确保 SDK 已经初始化。
3.2.2 实名用户登录
使用普通用户、手机、邮箱登录账号。
定义
- (void)userLoginWithUserName:(NSString )szUserName password:(NSString )szPassword; 输入参数
参数 描述 szUserName 用户名(包括普通用户、手机、邮箱,但不包括第三方用户) szPassword 密码 回调接口
- (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didUserLogin:(NSNumber )error errorMessage:(NSString )errorMessage uid:(NSString )uid token: (NSString *)token; 示例
//设置协议引用
@interface Class1 ()
//调用登录方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] userLoginWithUserName:@"username" password:@"password"];
//使用登录事件 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didUserLogin:(NSNumber )error errorMessage:(NSString )errorMessage uid:(NSString )uid token: (NSString *)token { if([error intValue] == XPGWifiError_NONE) { //登录成功,把 uid 和 token 保存起来 } else { //登录失败,打印错误信息 } } 除了实名用户登录之外,您还可以: 匿名用户登录 第三方用户登录 注:使用这些 API 之前,请确保 SDK 已经初始化。
3.2.3 第三方用户登录
使用第三方 SDK,获取对应的 uid 和 token,然后使用对应的信息调用 SDK 即可。 目前支持的第三方账号有:
QQ 新浪 百度
目前支持的第三方 SDK 有:
ShareSDK http://mob.com/ BaiduSDK http://developer.baidu.com/wiki/index.php?title=%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3%E9%A6%96%E9%A1%B5/%E7%99%BE%E5%BA%A6%E5%B8%90%E5%8F%B7%E8%BF%9E%E6%8E%A5
定义
- (void)userLoginWithThirdAccountType: (XPGWifiThirdAccountType)szThirdAccountType uid:(NSString )szUid token: (NSString )szToken; 输入参数
参数 描述 szThirdAccountType 第三方账号类型:新浪、百度 szUid 通过 Share SDK 或 Baidu SDK 登录后得到 uid szToken 通过 Share SDK 或 Baidu SDK 登录后得到 token 回调接口
- (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didUserLogin:(NSNumber )error errorMessage:(NSString )errorMessage uid:(NSString )uid token: (NSString *)token; 示例(不含第三方组件使用示例
//设置协议引⽤
@interface Class1 ()
//调用第三方登录,uid,token 填写第三方 SDK 对应获取到的信息 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] userLoginWithThirdAccountType:XPGWifiThirdAccountTypeBAIDU uid:@“3573859334" token:@“23.0730de103a197fd592552ceaf08e5b\ 29.2592000.1425464082.3573859334-2781378“];
//使用登录事件 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didUserLogin:(NSNumber )error errorMessage:(NSString )errorMessage uid:(NSString )uid token: (NSString *)token { if([error intValue] == XPGWifiError_NONE) { //注销成功 } else { //注销失败 } } 除第三方用户登录之外,您还可以: 匿名用户登录 实名用户登录
注:使用这些 API 之前,请确保 SDK 已经初始化。
3.3 用户注销
注销已登录的用户。如果是注销第三方用户,还需要调用第三方的注销功能。(SDK 未实现具体功能)
定义
- (void)userLogout:(NSString *)uid; 输入参数
参数 描述 uid 登录或注册后得到的uid 回调接口
- (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didUserLogout:(NSNumber )error errorMessage:(NSString *)errorMessage; 示例
//设置协议引用
@interface Class1 ()
//调用注销方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] userLogout:@"xxxxx"];
//使⽤注销事件 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didUserLogout:(NSNumber )error errorMessage:(NSString *)errorMessage { if([error intValue] == XPGWifiError_NONE) { //注销成功 } else { //注销失败 } } 注:使用这些 API 之前,请确保 SDK 已经初始化。
3.4 忘记密码
不记得密码了,可以通过以下两种方式修改密码。
3.4.1 通过手机验证码修改密码
第一步:获取图形验证码
定义
- (void)getCaptchaCode:(NSString *)appSecret; 输入参数
参数 描述 appSecret 应用的 secret 信息,从 site.gizwits.com 中可以看到。如何获取 App Secret? 回调接口
- (void)wifiSDK:(XPGWifiSDK )wifiSDK didGetCaptchaCode:(NSError)result token:(NSString)token captchaId:(NSString )captchaId captchaURL:(NSString*)captchaURL; 示例
//设置协议引用
@interface Class1 ()
//调用获取图片验证码方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] getCaptchaCode:captchaCode];
//使用获取图片验证码事件 - (void)wifiSDK:(XPGWifiSDK )wifiSDK didGetCaptchaCode:(NSError )result token:(NSString )token captchaId:(NSString )captchaId captchaURL:(NSString )captchaURL { if(result.code == XPGWifiError_NONE) { //获取图片验证码成功,下载验证码图片 NSURL url = [NSURL URLWithString:captchaURL]; NSData data = [NSData dataWithContentsOfURL:url]; if(data) { //把验证码图片显示在 UI 上 UIImage verifyImage = [UIImage imageWithData:data]; ... } } else { //获取图片验证码失败 } } 第二步:通过图片验证码获取短信验证码
定义
- (void)- (void)requestSendPhoneSMSCode:(NSString )token captchaId:(NSString)captchaId captchaCode:(NSString)captchaCode phone:(NSString)phone; 输入参数
参数 描述 token 验证码 token,通过 getCaptchaCode 获取 phoneCode 手机短信中的验证码内容 phone 手机号 回调接口
- (void)wifiSDK:(XPGWifiSDK )wifiSDK didVerifyPhoneSMSCode:(NSError)result; 示例
//设置协议引用
@interface Class1 ()
//调用获取手机短信验证码方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] requestSendPhoneSMSCode:token captchaId:captchaId captchaCode:"WXAN" phone:@"13012345678"];
//使用获取手机短信验证码事件 - (void)wifiSDK:(XPGWifiSDK )wifiSDK didRequestSendPhoneSMSCode:(NSError )result { if(result.code == XPGWifiError_NONE) { //获取手机验证码成功 } else { //获取手机验证码失败 } } 第三步:通过手机验证码修改密码
定义
- (void)changeUserPasswordByCode:(NSString )phone code:(NSString )code newPassword:(NSString *)newPassword; 输入参数
参数 描述 phone 已注册的手机号 code 手机验证码。详细见:向指定的手机号发送验证码 newPassword 新密码 回调接口
- (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didChangeUserPassword:(NSNumber )error errorMessage:(NSString *)errorMessage; 示例
//设置协议引用
@interface Class1 ()
//调用修改密码方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] changeUserPassword:@"13012345678" oldPassword:@"123456" newPassword:@“111111"];
//使用修改密码事件 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didChangeUserPassword:(NSNumber )error errorMessage:(NSString *)errorMessage { if([error intValue] == XPGWifiError_NONE) { //修改密码成功 } else { //修改密码失败 } } 注:使用这些 API 之前,请确保 SDK 已经初始化。
3.4.2 通过云端给邮箱发送重置密码链接修改密码
定义
- (void)changeUserPasswordByEmail:(NSString *)email; 输入参数
参数 描述 email 已注册的邮箱 回调接口
- (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didChangeUserPassword:(NSNumber )error errorMessage:(NSString *)errorMessage; 示例
//设置协议引用
@interface Class1 ()
//调用修改密码方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] changeUserPasswordByEmail:@“10000@qq.com"];
//使用修改密码事件 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didChangeUserPassword:(NSNumber )error errorMessage:(NSString *)errorMessage { if([error intValue] == XPGWifiError_NONE) { //修改密码成功 } else { //修改密码失败 } } 注:使用这些 API 之前,请确保 SDK 已经初始化。
3.5 修改密码
要修改密码,请先登录。
定义
- (void)changeUserPassword:(NSString )token oldPassword:(NSString )oldPassword newPassword:(NSString *)newPassword; 输入参数
参数 描述 token 从登录或注册的账号得到 token oldPassword 旧密码 newPassword 新密码 回调接口
- (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didChangeUserPassword:(NSNumber )error errorMessage:(NSString *)errorMessage; 示例
//设置协议引用
@interface Class1 ()
//调用修改密码方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] changeUserPassword:@"tokenString" oldPassword:@"123456" newPassword:@"111111"];
//使用修改密码事件 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didChangeUserPassword:(NSNumber )error errorMessage:(NSString *)errorMessage { if([error intValue] == XPGWifiError_NONE) { //修改密码成功 } else { //修改密码失败 } } 注:使用这些 API 之前,请确保 SDK 已经初始化。
3.6 匿名用户转换实名用户
3.6.1 匿名用户转换普通用户
将已登录的匿名用户转换成普通的用户,用户已存在则无法转换
定义
- (void)transAnonymousUserToNormalUser:(NSString )token userName: (NSString )userName password:(NSString *)password; 输入参数
参数 描述 token 从登录或注册的账号得到 token userName 新用户 password 新密码 回调接口
- (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didTransUser:(NSNumber )error errorMessage:(NSString *)errorMessage; 示例
//设置协议引用
@interface Class1 ()
//调用转换用户方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] transAnonymousUserToNormalUser:@"currentToken" userName:@"test1" password:@"123456"];
//使用转换用户事件 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didTransUser:(NSNumber )error errorMessage:(NSString *)errorMessage { if([error intValue] == XPGWifiError_NONE){ //转换用户成功 } else { //转换用户失败 } } 注:使用这些 API 之前,请确保 SDK 已经初始化。
3.6.2 匿名用户转换手机用户
将已登录的匿名用户转换成手机的用户,用户已存在则无法转换。转换后,该匿名用户实效,会重新注册相应的匿名用户。
定义
- (void)transAnonymousUserToPhoneUser:(NSString )token phone:(NSString )phone password:(NSString )password code:(NSString )code; 输入参数
参数 描述 token 从登录或注册的账号得到 token phone 手机号码 password 新密码 code 手机验证码。详细见:向指定的手机号发送验证码 回调接口
- (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didTransUser:(NSNumber )error errorMessage:(NSString *)errorMessage; 示例
//设置协议引用
@interface Class1 ()
//调用转换用户方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] transAnonymousUserToPhoneUser:@"currentToken" phone:@"13012345678" password:@"123456" code:@"499486"];
//使用转换用户事件 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didTransUser:(NSNumber )error errorMessage:(NSString *)errorMessage { if([error intValue] == XPGWifiError_NONE) { //转换用户成功 } else { //转换用户失败 } } 注:使用这些 API 之前,请确保 SDK 已经初始化。
3.7 实名用户更改用户名(手机、邮箱,是三方账号)
3.7.1 将非匿名用户改成邮箱用户
将实名用户修改成邮箱用户,token 不能是匿名用户的 token。修改后,新用户与旧用户都能正常使用。
定义
- (void)changeUserEmail:(NSString )token email:(NSString )email; 输入参数
参数 描述 token 从登录或注册的账号得到 token email 新邮箱用户 回调接口
(void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didChangeUserEmail:(NSNumber )error errorMessage:(NSString *)errorMessage; 示例
//设置协议引用
@interface Class1 ()
//调用更改账户方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] changeUserEmail:@"currentToken" email:@“10000@qq.com”];
//使用更改账户事件 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didChangeUserEmail:(NSNumber )error errorMessage:(NSString *)errorMessage { if([error intValue] == XPGWifiError_NONE) { //更改用户名成功 } else { //更改用户名失败 } } 注:使用这些 API 之前,请确保 SDK 已经初始化。
3.7.2 将非匿名用户改成手机用户
将实名用户转换成手机用户,token 不能是匿名用户的 token。修改后,新用户与旧用户都能正常使用。
第一步:获取图形验证码
定义
- (void)getCaptchaCode:(NSString *)appSecret; 输入参数
参数 描述 appSecret 应用的 secret 信息,从 site.gizwits.com 中可以看到。如何获取 App Secret? 回调接口
- (void)wifiSDK:(XPGWifiSDK )wifiSDK didGetCaptchaCode:(NSError)result token:(NSString)token captchaId:(NSString )captchaId captchaURL:(NSString*)captchaURL; 示例
//设置协议引用
@interface Class1 ()
//调用获取图片验证码方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] getCaptchaCode:captchaCode];
//使用获取图片验证码事件 - (void)wifiSDK:(XPGWifiSDK )wifiSDK didGetCaptchaCode:(NSError )result token:(NSString )token captchaId:(NSString )captchaId captchaURL:(NSString )captchaURL { if(result.code == XPGWifiError_NONE) { //获取图片验证码成功,下载验证码图片 NSURL url = [NSURL URLWithString:captchaURL]; NSData data = [NSData dataWithContentsOfURL:url]; if(data) { //把验证码图片显示在 UI 上 UIImage verifyImage = [UIImage imageWithData:data]; ... } } else { //获取图片验证码失败 } } 第二步:通过图片验证码获取短信验证码
定义
- (void)- (void)requestSendPhoneSMSCode:(NSString )token captchaId:(NSString)captchaId captchaCode:(NSString)captchaCode phone:(NSString)phone; 输入参数
参数 描述 token 验证码 token,通过 getCaptchaCode 获取 phoneCode 手机短信中的验证码内容 phone 手机号 回调接口
- (void)wifiSDK:(XPGWifiSDK )wifiSDK didVerifyPhoneSMSCode:(NSError)result; 示例
//设置协议引用
@interface Class1 ()
//调用获取手机短信验证码方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] requestSendPhoneSMSCode:token captchaId:captchaId captchaCode:"WXAN" phone:@"13012345678"];
//使用获取手机短信验证码事件 - (void)wifiSDK:(XPGWifiSDK )wifiSDK didRequestSendPhoneSMSCode:(NSError )result { if(result.code == XPGWifiError_NONE) { //获取手机验证码成功 } else { //获取手机验证码失败 } } 第三步:通过手机验证码将非匿名用户改成手机用户
定义
- (void)changeUserPhone:(NSString )token phone:(NSString )phone code: (NSString *)code; 输入参数
参数 描述 token 从登录或注册的账号得到 token phone 新手机号码 code 手机验证码。详细见:向指定的手机号发送验证码 回调接口
- (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didChangeUserPhone:(NSNumber )error errorMessage:(NSString *)errorMessage; 示例
//设置协议引用
@interface Class1 ()
//调用更改账户方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] changeUserPhone:@"currentToken" phone:@“13012345678" code:@"499486"];
//使用更改账户事件 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didChangeUserPhone:(NSNumber )error errorMessage:(NSString *)errorMessage { if([error intValue] == XPGWifiError_NONE) { //更改用户名成功 } else { //更改用户名失败 } } 注:使用这些 API 之前,请确保 SDK 已经初始化。
4.0 设备管理
4.1 配置设备上线(onBoarding)
配置设备上网 onboarding 功能分为两种。一种是 Soft-AP 让设备做热点,手机连上该设备的热点后,实现配置上网。另一种是 Air-Link 让设备从任意路由接收配置信息,实现配置上网。当 SDK 受到设备配置成功广播时,则判断为配置成功。如果超时,或者设备返回配置失败信息,则为配置失败。
目前,Air-Link 功能支持庆科和汉枫模块。
定义
- (void)setDeviceWifi:(NSString)ssid key:(NSString)key mode:(XPGConfigureMode)mode softAPSSIDPrefix:(NSString*)softAPSSIDPrefix timeout:(int)timeout; 输入参数
参数 描述 ssid 需要将设备配上无线路由的 SSID 名 key 需要将设备配上无线路由的密码 mode 模式。可以是 Soft-AP 模式,也可以是 Air-Link 模式 softAPSSIDPrefix Soft-AP模式下,输入 Soft-AP 模式对应的 SSID 前缀 timeout 操作超时,最小30秒 回调接口
- (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didSetDeviceWifi:(XPGWifiDevice )device result:(int)result; Soft-AP 模式示例
通过 Cocoa API,我们可以通过 SSID 名的方式判断是否是 Soft-AP 模式
示例
import
NSArray ifs = (__bridge_transfer NSArray )CNCopySupportedInterfaces(); NSDictionary *info = nil;
for (NSString *ifnam in ifs) {
info = (bridge_transfer NSDictionary *)CNCopyCurrentNetworkInfo((bridge CFStringRef)ifnam);
if (info && [info count])
{
break;
}
}
NSString *ssid = [info objectForKey:@"SSID"];
if([ssid hasPrefix:@"XPG-GAgent"])
{
//是 Soft-AP 模式
}
在确认当前是 Soft-AP 模式的情况下,可使用以下代码
//设置协议引用
@interface Class1 ()
//Soft-AP 模式 on-boarding 的方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] setDeviceWifi:@"ssid-1" key:@"12345678" mode:XPGWifiSDKSoftAPMode softAPSSIDPrefix:@"XPG-GAgent" timeout:60];
//配置事件 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didSetDeviceWifi:(XPGWifiDevice )device result:(int)result { if(result == XPGWifiError_NONE) { //配置成功 } else { //配置失败 } } Air-Link 模式示例
在确保 APP 是在 Wi-Fi 模式下,执行以下代码
//设置协议引用
@interface Class1 ()
//AirLink 模式 on-boarding 的方法 [XPGWifiSDK sharedInstance].delegate = self; [[XPGWifiSDK sharedInstance] setDeviceWifi:@"ssid-1" key:@"12345678" mode:XPGWifiSDKAirLinkMode softAPSSIDPrefix:nil timeout:60];
//配置事件 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didSetDeviceWifi:(XPGWifiDevice )device result:(int)result { if(result == XPGWifiError_NONE) { //配置成功 } else { //配置失败 } } 注:使用这些 API 之前,请确保 SDK 已经初始化。
4.2 搜索绑定设备
4.2.1 云端获取设备列表并搜索局域网中的设备
这是获取设备列表的接口,是先从云端获取设备,然后再从局域网获取设备的过程。云端获取设备后,会回调一次。小循环获取设备由于设备反馈的时间不同,从而有可能会延迟反馈。每加载到一个小循环设备,就会触发一次回调。所以使用这个方法的时候,注意要与回调的调用过程要互斥。
定义
- (void)getBoundDevicesWithUid:(NSString )uid token:(NSString )token specialProductKeys:(NSString *)specialProductKey, ... NS_REQUIRES_NIL_TERMINATION; 输入参数
参数 描述 uid 登录后获取到的uid token 登录后获取到的token specialProductKey 指定产品识别码过滤。nil 则不过滤,可以过滤多个识别码。设置识别码,系统会自动下载对应的配置文件,如果配置存在则不会覆盖。 回调接口
- (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didDiscovered:(NSArray )deviceList result:(int)result; 示例
//设置协议引用
@interface Class1 ()
BOOL isDiscoverLock;
}
@property (strong, nonatomic) NSArray *deviceList; @end
//AirLink 模式 on-boarding 的方法 [XPGWifiSDK sharedInstance].delegate = self;
//防止操作中点了以后卡主线程。
if(isDiscoverLock)
return;
//需要开发者自行把 uid 和 token 换成实际的值 [[XPGWifiSDK sharedInstance] getBoundDevicesWithUid:@"currentUid" token:@"currentToken" specialProductKeys:nil];
//搜索设备 - (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didDiscovered:(NSArray )deviceList result:(int)result { if(isDiscoverLock) return;
//设置设备列表
self.deviceList = deviceList;
} 4.2.2 绑定设备
使用绑定设备的 API 之前,先登录账号。获取到这个账号的 uid 和 token。
绑定设备有两种形式,一种是通过发现局域网设备,通过静态信息绑定,另一种是通过二维码或者其他形式提供指定的 did, passcode 也可以绑定。
定义
- (void)bindDeviceWithUid:(NSString )uid token:(NSString )token did: (NSString )did passCode:(NSString )passCode remark:(NSString*)remark; 输入参数
参数 描述 uid 登录后获取到的uid token 登录后获取到的token did 设备云端身份标识 DID。已经绑定过的设备,一定能获取到对应的did。如果未获取,下拉云端绑定设备列表即可。 passcode 用于控制设备的密钥。已经绑定过的设备,一定能获取到对应的passcode。如果未获取,下拉云端绑定设备列表即可。 remark 设备别名 回调接口
- (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didBindDevice:(NSString )did error:(NSNumber )error errorMessage:(NSString )errorMessage; 示例4.2.2.1:通过设备实例绑定
//得到设备实例 XPGWifiDevice *device = xxx;
//没有设置delegate,则 device.delegate = xxx;
if(device.did.length == 0)
{
[[[UIAlertView alloc] initWithTitle:
@"提示" message:@"此设备尚未与云端注 册,无法绑定,请刷新设备列表后重新尝试" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil] show];
}
else
{
//需要开发者自行把 uid 和 token 换成实际的值
[[XPGWifiSDK sharedInstance] bindDeviceWithUid:@"currentUid" token:@"currentToken" did:device.did passCode:nil remark:nil];
}
//绑定事件
- (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didBindDevice:(NSString )did error:(NSNumber )error errorMessage:(NSString )errorMessage {
if([error intValue] == XPGWifiError_NONE)
{
//绑定成功
}
else
{
//绑定失败
}
}
示例4.2.2.2:通过静态信息绑定
//需要开发者自行把 uid、token、did、passcode 换成实际的值 [[XPGWifiSDK sharedInstance] bindDeviceWithUid:@"currentUid" token:@"currentToken" did:@"staticDid" passCode:@"staticPasscode" remark:nil]; 事件处理参考示例 4.2.2.1
4.2.3 解除绑定设备
使用解除绑定设备的 API 之前,先登录账号。获取到这个账号的 uid 和 token。
通过得到设备的绑定设备列表,就可以将设备解除绑定。
定义
- (void)unbindDeviceWithUid:(NSString )uid token:(NSString )token did: (NSString )did passCode:(NSString )passCode; 输入参数
参数 描述 uid 登录后获取到的uid token 登录后获取到的token did 设备云端身份标识 DID。已经绑定过的设备,一定能获取到对应的did。如果未获取,下拉云端绑定设备列表即可。 passcode 用于控制设备的密钥。已经绑定过的设备,一定能获取到对应的passcode。如果未获取,下拉云端绑定设备列表即可。 回调接口
示例
//得到设备实例 XPGWifiDevice *device = xxx;
//没有设置delegate,则 device.delegate = xxx;
if([device isBind:@"currentUid"]) { //需要开发者自行把 uid 和 token 换成实际的值 [[XPGWifiSDK sharedInstance] unbindDeviceWithUid:@"currentUid" token:@"currentToken" did:device.did passCode:device.passcode]; }
- (void)XPGWifiDevice:(XPGWifiDevice *)device didUnBindDeviceFromService:(int)result { if(result == XPGWifiError_NONE) { //解除绑定成功 } else { //解除绑定失败 } } 4.3 登录设备
登录设备,是指当该设备绑定后,通过得到设备的绑定设备列表,得到对该设备控制权限。登录成功后,客户端会与设备保持连接。如果要断开与设备之间的连接,调用设备相应的接口即可。(参考 4.5 设备断开)
定义
- (void)login:(NSString )uid token:(NSString )token; 输入参数
参数 描述 uid 登录后获取到的uid token 登录后获取到的token 回调接口
- (void)XPGWifiDevice:(XPGWifiDevice *)device didLogin:(int)result; 示例
//得到设备实例 XPGWifiDevice *device = xxx;
//如果没有设置委托,则设置委托到当前使用的Cocoa类所对应的实例 device.delegate = self;
//需要开发者自行把 uid 和 token 换成实际的值 [device login:@"currentUid" token:@"currentToken"]; - (void)XPGWifiDevice:(XPGWifiDevice *)device didLogin:(int)result { if(result == XPGWifiError_NONE) { //登录成功 } else { //登录失败 } } 4.4 获取硬件信息
获取硬件信息,是需要在局域网与设备建立连接后获取。
定义
-
(void)getHardwareInfo; 回调接口
-
(void)XPGWifiDevice:(XPGWifiDevice )device didQueryHardwareInfo: (NSDictionary )hwInfo; 示例
//得到设备实例 XPGWifiDevice *device = xxx;
//如果没有设置委托,则设置委托到当前使用的Cocoa类所对应的实例 device.delegate = self; if([device isConnected]) [device getHardwareInfo];
//处理事件 - (void)XPGWifiDevice:(XPGWifiDevice )device didQueryHardwareInfo: (NSDictionary )hwInfo { NSString *hardWareInfo = [NSString stringWithFormat:@"WiFi Hardware Version: %@,\ WiFi Software Version: %@,\ MCU Hardware Version: %@,\ MCU Software Version: %@,\ Firmware Id: %@,\ Firmware Version: %@,\ Product Key: %@,\ Device ID: %@,\ Device IP: %@,\ Device MAC: %@“ , [hwInfo valueForKey:XPGWifiDeviceHardwareWifiHardVerKey] , [hwInfo valueForKey:XPGWifiDeviceHardwareWifiSoftVerKey] , [hwInfo valueForKey:XPGWifiDeviceHardwareMCUHardVerKey] , [hwInfo valueForKey:XPGWifiDeviceHardwareMCUSoftVerKey] , [hwInfo valueForKey:XPGWifiDeviceHardwareFirmwareIdKey] , [hwInfo valueForKey:XPGWifiDeviceHardwareFirmwareVerKey] , [hwInfo valueForKey:XPGWifiDeviceHardwareProductKey] , self.device.did, self.device.ipAddress, self.device.macAddress]; [[[UIAlertView alloc] initWithTitle:@"设备硬件信息" message:hardWareInfo delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil] show]; } 4.5 设备断开
设备登录后,断开与设备之间的连接。
定义
-
(BOOL)disconnect; 回调接口
-
(void)XPGWifiDeviceDidDisconnected:(XPGWifiDevice *)device; 示例
//得到设备实例 XPGWifiDevice *device = xxx;
//如果没有设置委托,则设置委托到当前使用的Cocoa类所对应的实例 device.delegate = self; [device disconnect];
- (void)XPGWifiDeviceDidDisconnected:(XPGWifiDevice *)device
{
//处理断开事件 } 5.0 控制设备和接收设备信息
5.1 发送控制指令
向设备发送控制指令
调用控制指令,需要先登录设备。参考 4.3 登录设备
定义
- (NSInteger)write:(NSDictionary *)data; 参数
参数 描述 data 任意可读数据,参见数据点文档 http://site.gizwits.com/document/m2m/i_02_datapoint/ 示例
//得到设备实例 XPGWifiDevice *device = xxx;
//如果没有设置委托,则设置委托到当前使用的Cocoa类所对应的实例 device.delegate = self;
//以微信宠物屋为例,要开启红色灯 [device write:@{@“entity0":@{@"LED_OnOff":@YES}, @“cmd":@1}]; 命令(cmd)映射表 功能 值 向设备发送控制指令 1 向设备请求设备状态 2 设备返回请求的设备状态 3 设备推送当前设备状态 4 5.2 接收设备状态
通过委托,接收设备状态
定义
- (BOOL)XPGWifiDevice:(XPGWifiDevice )device didReceiveData: (NSDictionary )data result:(int)result; 参数
参数 描述 data 任意可读数据,参见数据点文档 http://site.gizwits.com/document/m2m/i_02_datapoint/ 示例
-
(BOOL)XPGWifiDevice:(XPGWifiDevice )device didReceiveData: (NSDictionary )data result:(int)result { //基本数据,与发送的数据格式⼀一致 NSDictionary *_data = [data valueForKey:@"data"];
//警告 NSArray *alarms = [data valueForKey:@"alarms"];
//错误 NSArray *faults = [data valueForKey:@"faults"];
//透传数据 NSDictionary *binary = [data valueForKey:@“binary"];
//处理这些类型的数据 ... } 5.2.1 布尔、整型、枚举
这些数据,作为 Cocoa 对象,我们都可以当作通用的 NSNumber 处理。
布尔型:在 iOS 对应代码为 @YES、@NO。 整型和枚举,当作数字处理,即代码 @(number)
5.2.2 二进制
二进制数据,我们可以使用 SDK ⾃自带的 XPGWifiBinary 转换。详细信息,可以参考 1.2 基础对象中 的介绍。
5.2.3 报警、故障
当设备出现一些问题需要通知用户时,这时我们就需要用到报警和故障功能。这些数据,一定是只读的,是通过设备发送给客户端。
客户端收到这些数据,我们怎么处理呢?
报警和故障的数据格式一致,都是 NSArray 的数组。每一条报警、故障,是由名称和值的键值对组成。
示范代码
NSDictionary *dict = @{名称: 值} 6.0 其他
6.1下载产品配置文件
通过服务器下载 JSON 配置文件。
配置文件有什么用?
配置文件,是定义 APP 与指定设备通信的规则。比如微信宠物屋,下载了微信宠物屋的配置文件,就可以通过 5.0 控制设备和接收设备信息 里面定义的方法,才可以正常的发送和接收对应的控制指令。如果缺少该产品的配置文件,APP 就不能控制该类产品的任何设备,不管代码怎么写都是没有作用的。
注意:这个方法是强制更新的,本地已有的配置文件将会被覆盖。
定义
- (void)updateDeviceFromServer:(NSString *)productKey; 参数
参数 描述 productKey 产品标识码。详细见:2.4 获得 APP ID 和产品标识码(Product Key) 回调
- (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didUpdateProduct:(NSString )product] result:(int)result; 示例
[XPGWifiSDK sharedInstance].delegate = self; [XPGWifiSDK updateDeviceFromServer:@“0fb26c41382a4d2ab4a76e7241efec52"];
- (void)XPGWifiSDK:(XPGWifiSDK )wifiSDK didUpdateProduct:(NSString )product result:(int)result { if([product isEqualToString:@"0fb26c41382a4d2ab4a76e7241efec52"]) { //说明下载的是这个产品 } if(result == XPGWifiError_NONE) { //下载配置成功 } else { //下载配置失败 } } 下载的文件保存的位置
每个设备对应的文件命名:Product Key 加后缀 “.json”。除了通过 SDK 下载配置文件外,开发者也可以编程把文件放到指定的位置,效果跟调用下载配置的 API 相同。具体做法,可以参考 https://github.com/gizwits/gokit-ios 里面的写法。
通过网站保存配置
除了使用 SDK 下载配置文件之外还可以通过 web 浏览器保存文件,例如微信宠物屋: http://site.gizwits.com/v2/datapoint?product_key=6f3074fe43894547a4f1314bd7e3ae0b&format=json
把 6f3074fe43894547a4f1314bd7e3ae0b 换成别的就可以下载其他产品了
7.0 错误代码解释
标准错误代码
错误ID 错误定义 描述 0 XPGWifiError_NONE 没有错误 -1 XPGWifiError_GENERAL 一般错误 -2 XPGWifiError_NOT_IMPLEMENTED 写入数据的操作未执行 -4 XPGWifiError_PACKET_DATALEN 读取或写入数据时,数据长度不在 0-65535 的范围 -5 XPGWifiError_CONNECTION_ID 错误的连接 ID -7 XPGWifiError_CONNECTION_CLOSED 连接已关闭 -8 XPGWifiError_PACKET_CHECKSUM 数据包的校验和不正确 -9 XPGWifiError_LOGIN_VERIFY_FAILED 设备登录验证失败 -10 XPGWifiError_LOGIN_FAIL 控制设备时,发现该设备没有登录过 -11 XPGWifiError_NOT_CONNECTED 设备未连接 -12 XPGWifiError_MQTT_FAIL 执行 MQTT 相关操作时出错 -13 XPGWifiError_DISCOVERY_MISMATCH 发现小循环设备或者配置 AirLink 时,收到的数据包不能正确解析相关的内容 -14 XPGWifiError_SET_SOCK_OPT 调用 setsockopt() 失败 -15 XPGWifiError_THREAD_CREATE 线程创建失败 -17 XPGWifiError_CONNECTION_POOL_FULLED 建立太多的连接,导致连接池满了。最大允许建立 255 个 TCP 连接 -18 XPGWifiError_NULL_CLIENT_ID 大循环操作时,使用了空的 Client ID -19 XPGWifiError_CONNECTION_ERROR 连接出现错误 -20 XPGWifiError_INVALID_PARAM 传入了错误的参数 -21 XPGWifiError_CONNECT_TIMEOUT 连接超时。默认超时 1 分钟 -22 XPGWifiError_INVALID_VERSION 数据包版本号错误 -23 XPGWifiError_INSUFFIENT_MEM 不能分配内存 -24 XPGWifiError_THREAD_BUSY 当前线程在使用中 -25 XPGWifiError_HTTP_FAIL HTTP 操作失败 -26 XPGWifiError_GET_PASSCODE_FAIL 获取 Passcode 失败 -27 XPGWifiError_DNS_FAILED 获取 DNS 失败 -30 XPGWifiError_UDP_PORT_BIND_FAILED UDP 端口绑定失败 -39 XPGWifiError_CONFIGURE_SSID_NOT_MATCHED 配置 on-boarding 时,手机连接的 SSID 与配置设备的 SSID 不一致 -40 XPGWifiError_CONFIGURE_TIMEOUT 配置 on-boarding 超时 -41 XPGWifiError_CONFIGURE_SENDFAILED 配置 on-boarding 时,发送失败 -42 XPGWifiError_NOT_IN_SOFTAPMODE 错误,执行 Soft-AP 方法但不在 Soft-AP 模式 -43 XPGWifiError_UNRECOGNIZED_DATA 接收到了不可识别的数据 -44 XPGWifiError_CONNECTION_NO_GATEWAY 不能连接,无法获取到网关 -45 XPGWifiError_CONNECTION_REFUSED 连接被拒绝 -46 XPGWifiError_IS_RUNNING 当前事件正在处理 -47 XPGWifiError_UNSUPPORTED_API 不支持的 API -48 XPGWifiError_RAW_DATA_TRANSMIT 透传数据 8.0 参考资料
开发资源
SDK 依赖第三方组件 OpenSSL 下载地址:点击下载
GoKit demo iOS: https://github.com/gizwits/gokit-ios 机智云空调 iOS:https://github.com/gizwits/airconditioner-ios 机智云插座 iOS:https://github.com/gizwits/Gizwits-SmartSocket_iOS 机智云空气净化器 iOS:https://github.com/gizwits/Gizwits-AirPurifier_iOS 机智云电热水器 iOS:https://github.com/gizwits/Gizwits-WaterHeater_iOS 机智云智能中控灯 iOS:https://github.com/gizwits/Gizwits-SmartLights_iOS 机智云智能灯 iOS:https://github.com/gizwits/Gizwits-SmartBuld_iOS 机智云智能净水器 iOS:https://github.com/gizwits/Gizwits-WaterPurifier_iOS
第三方账号连接
ShareSDK:http://mob.com/ BaiduSDK:http://developer.baidu.com/wiki/index.php?title=%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3%E9%A6%96%E9%A1%B5/%E7%99%BE%E5%BA%A6%E5%B8%90%E5%8F%B7%E8%BF%9E%E6%8E%A5
GoKit 智能设备开发套件网站相关
GoKit 智能设备开发套件网站:site.gizwits.com 机智云数据点协议文档:http://site.gizwits.com/document/m2m/i_02_datapoint/ 通过产品识别码下载产品配置文件:http://site.gizwits.com/v2/datapoint?product_key=6f3074fe43894547a4f1314bd7e3ae0b&format=json
常见问题汇总:点击查看
9.0 联系我们
如果有什么其他问题,大家可以在 QQ 群和论坛上交流。论坛的网址:http://club.gizwits.com/。
除此之外,您还可以给机智云的技术支持人员发送邮件,反馈您在使用过程中遇到的任何问题。
邮箱:janel@gizwits.com 电话:4006525488