11 常见问题 - MiEcosystem/ios-rn-sdk GitHub Wiki
我们收集了诸多开发者关心的问题。更多问题请大家给本项目直接提 issues。
请仔细阅读小米IoT开发者网站中的开发引导。我们目前支持 WiFi、BLE、ZigBee(需要网关)通讯的智能设备,NB 目前正在内测,不支持传统经典蓝牙设备。无论何种通讯方式,请尽量适配小米IoT协议,可快速开发,自有协议设备接入请联系我们。iOS版米家扩展程序暂时不支持p2p的视频播放,具有这类功能的设备如摄像头,接入请联系米家工作人员,采用其他方式。
禁止直接访问自己的网络服务,需要进行后台对接,否则无法通过审核,详情请咨询米家后台工作人员。
扩展程序使用 js 语言,利用SDK提供的蓝牙读写接口实现,直接OTA。
米家 App 支持iOS 9及以上系统,需要分别做适配。
米家 App 的云端 API 返回已知错误码:
0 OK
-1 没有权限
-2 设备离线
-3 超时
-4 服务器错误
-5 设备错误
-6 无效的请求,这个情况比较多,需要日志详查
-7 未知的设备id
-8 参数错误,某个参数未设置或设置不对
-9 未知错误
-11 重复请求
-12 请求太频繁,常见合作公司压测接口时返回
-13 常见于独立app验证,遇到此错误多是6000权限没有通过或scope设置问题
-17 尚未收到返回结果,多见于异步调用
-21 语音控制session过期
-22 分享设备数量超过限制
其余错误码请详询后台工作人员
不支持,由于要使用 AppStore 版的米家App进行调试,无法在模拟器上运行。
请联系开发人员将你的产品 model 状态设置为白名单可见。同一个产品,Android 和 iOS 的设置是分开的。
npm 有缓存,遇到这种情况,请按照如下各种操作试试:
- 刷新扩展程序
- 使用 npm start --reset-cache 清空重启服务器并清空缓存
- 彻底关闭 terminal 并重新打开
- 重启电脑
扩展程序在本地调试时是从服务器实时获取图片资源,地址是"http"开头的网络地址;而在上线后(或白名单测试时),则会被下载到手机上,此时图片地址为本地路径。扩展程序SDK通过 MHPluginSDK.basePath 自动做两者的适配。
同时,若使用该 SDK 提供的脚本自动创建初始扩展程序,默认的 index.ios.js 中,我们加入了 sourceOfImage() 与 pathForResource() 两个便捷方法,开发者可在其他子 Component 中,通过 this.props.app.sourceOfImage 或 this.props.app.pathForResource 方法来获得适配好的 source 或路径,用于 Image 控件的加载。
如果想要使用 require 的方式用相对路径来加载图片资源,由于 require 只支持常量字符串,需要使用 MHPluginSDK.devMode 来判断当前是否处于调试模式下,然后做区分。调试模式下,图片资源存储在扩展程序根目录的Resources目录下,相对路径一般为"../Resources/xxx.png";而线上模式下,图片资源与jsbundle在同一目录下,相对路径一般为"./xxx.png"
SDK中集成了0.1.4和1.0.6beta(纯js)两个版本的RNChart库,使用方法不同,请参见library文档的部分
//0.1.4
import 'RNChart' from 'react-native-chart'
<RNChart style={styles.chart} chartData={this.state.chartData} verticalGridStep={5} xLabels={this.state.xLabels} chartTitle="" chartFontSize ={22} xAxisTitle ="" yAxisTitle ="" showGrid={true} showUnit={true} showYAxisLabels={true} labelFontSize={14} tightBounds={false} onTouchEnd ={this._onTouchEnd}>
</RNChart>
云端服务器一段时间内收不到设备的心跳包,即判定设备离线。扩展程序中没有实时 API 来判断是否处于在线还是离线状态,用getDevicePropertyFromMemCache方法获取device的isOnline属性,只能判断在进入扩展程序时设备的状态,之后这个值是不会更新的。扩展程序判断设备在线还是离线,可以用与服务器类似的方法,一段时间内(设定一个timer),设备轮询状态一直没有返回(有返回时重置timer),就可以认为设备离线了。
- 使用react-native-orientation库处理转屏,参见转屏demo扩展程序
- 需要横竖屏切换的页面需要
Modal
容器作为最顶层视图- 退出具有横竖屏操作的页面前请还原横竖屏设置为竖屏:
Orientation.lockToPortrait()
除了MHPluginSDK提供的一些设备属性,扩展程序还可以通过getDevicePropertyFromMemCache这个接口获取一些额外的设备属性,包括:
NSString* mac; //设备的mac地址
NSString* version; //设备当前固件版本
double longitude; //上次绑定时的经度
double latitude; //上次绑定时的纬度
NSString* name; //设备名称,用户可以修改
NSString* model; //设备类别标识,如插座、摄像头
NSString* parent_id; //父设备的ID
NSString* parent_model; //父设备的Model
BOOL isOnline; //设备是否在线(是否通电)
BOOL adminFlag; //是否被绑定
BOOL shareFlag; //是否已分享
这个页面是个H5,目前不能自动生成,需要设计师人工审核。如果产品有对应的米家的PM对接,请联系PM。需要提供文案和图片(图片的规格是 1080x1725)。
这个也需要设计师人工审核。需要提供两张图片,尺寸均为 1280x618 ,一张是产品实物图,要求连接指示灯灭。另一张是全透明图,只有对应灯的部分亮,请联系对接的PM或工作人员。(目前也支持提供一个1280x618相同比例的gif)