11 常见问题 - MiEcosystem/ios-rn-sdk GitHub Wiki

常见问题

我们收集了诸多开发者关心的问题。更多问题请大家给本项目直接提 issues

高频问题置顶

我的设备是否开发 iOS 米家扩展程序?

请仔细阅读小米IoT开发者网站中的开发引导。我们目前支持 WiFi、BLE、ZigBee(需要网关)通讯的智能设备,NB 目前正在内测,不支持传统经典蓝牙设备。无论何种通讯方式,请尽量适配小米IoT协议,可快速开发,自有协议设备接入请联系我们。iOS版米家扩展程序暂时不支持p2p的视频播放,具有这类功能的设备如摄像头,接入请联系米家工作人员,采用其他方式。

米家扩展程序是否允许访问自己的后台服务器?

禁止直接访问自己的网络服务,需要进行后台对接,否则无法通过审核,详情请咨询米家后台工作人员。

蓝牙设备的固件升级(OTA),扩展程序如何处理?

扩展程序使用 js 语言,利用SDK提供的蓝牙读写接口实现,直接OTA。

iOS扩展程序需要对哪些系统做适配?

米家 App 支持iOS 9及以上系统,需要分别做适配。

后台API返回的错误码

米家 App 的云端 API 返回已知错误码:

0 OK
-1 没有权限
-2 设备离线
-3 超时
-4 服务器错误
-5 设备错误
-6 无效的请求,这个情况比较多,需要日志详查
-7 未知的设备id
-8 参数错误,某个参数未设置或设置不对
-9 未知错误
-11 重复请求
-12 请求太频繁,常见合作公司压测接口时返回
-13 常见于独立app验证,遇到此错误多是6000权限没有通过或scope设置问题
-17 尚未收到返回结果,多见于异步调用
-21 语音控制session过期
-22 分享设备数量超过限制

其余错误码请详询后台工作人员

设备连接和扩展程序调试

开发扩展程序是否支持使用 iOS 模拟器?

不支持,由于要使用 AppStore 版的米家App进行调试,无法在模拟器上运行。

为什么我使用 Android 客户端已经绑定了的设备,在iOS的设备列表里却看不到?

请联系开发人员将你的产品 model 状态设置为白名单可见。同一个产品,Android 和 iOS 的设置是分开的。

SDK 和 React Native

本地调试时,为什么有时文件明明做了改动(包括添加、修改、删除图片等),但刷新扩展程序却没有发生变化?

npm 有缓存,遇到这种情况,请按照如下各种操作试试:

  1. 刷新扩展程序
  2. 使用 npm start --reset-cache 清空重启服务器并清空缓存
  3. 彻底关闭 terminal 并重新打开
  4. 重启电脑

扩展程序中应该怎样加载本地图片资源?

扩展程序在本地调试时是从服务器实时获取图片资源,地址是"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"

RNChart怎样使用

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 github

页面怎样切换横竖屏?

  1. 使用react-native-orientation库处理转屏,参见转屏demo扩展程序
  2. 需要横竖屏切换的页面需要Modal容器作为最顶层视图
  3. 退出具有横竖屏操作的页面前请还原横竖屏设置为竖屏: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)

⚠️ **GitHub.com Fallback** ⚠️