常见问题
APP逻辑设计相关
是否需要绑定或配对设备?
这里需要弄清一个概念,问题中提到的绑定或配对,是指在安卓/iOS中添加配对的蓝牙设备。通常一些标准设备是会需要的,比如蓝牙耳机,手写笔,手环。这些会需要在手机系统的蓝牙设置进行设置。但我们的秤不用,具体我们会在下问说明
蓝牙4.0,也就是BLE,是不需要绑定蓝牙设备就可以直接使用。我们的秤使用的私有协议,无法通过手机系统蓝牙直接使用,市面上面几乎所有的体脂秤都是如此。我们APP(轻牛健康)中的添加设备,仅仅让APP记住用户的秤,并非是手机系统的蓝牙配对。添加设备的过程也是引导用户如何使用体脂称。我们小程序是做成简单粗暴的方式,不用添加秤直接打开后,就上秤连接测量。
客户这边可自行决定是否需要添加该逻辑,建议如果是做成APP的一个小功能模块,是可以直接做成类似我们小程序那样,直接上秤测量,展示数据。
如何做成用户踩秤后,APP马上响应
我们自己的APP(轻牛健康),在正常使用中,是让用户打开APP,踩亮秤,就马上测量,这样可以减少用户的操作步骤。其实说白了,就是打开APP后,APP自动调用SDK的一整套逻辑,无需用户点击选择设备之类的。具体实现步骤如下:
- 进入测量界面后,检查蓝牙状态
- 蓝牙已打开,开始扫描
- 扫描到体脂秤,判断是否为已添加设备或者无需判断就直接连接(该处视APP的逻辑不同而不同)
- 连接成功,展示测量动画
- 测量完成,展示测量结果
测量完成后,是否需要立马断开蓝牙连接
通常无需主动断开与秤的连接,除非用户退出测量界面。
如果需要测量立马断开连接,最好也能够延时2s断开。我们早期的一些成功,如果测量完成立马断开,秤可能出现意想不到的现象。
数据如何分析
一个数据是否标准、偏低等,这个可以参考我们的SDK指标标准描述。
我们Demo中也有展示如何对数据进行分析,只不过Demo的界面只展示评级登记,未像我们APP那样做成足够美观的报告。
APPID和配置文件相关
appid与配置文件是什么?分别有什么作用?
appid是Yolanda为客户创建的唯一标识,会在我们后台进行登记,一个给定appid,通常是一直不会变化。demo中的123456789
这个appid是我们测试以及让客户体验用的appid,该appid的特性不稳定,随时可能会进行修改。如果已经达成正式合作意向,建议还是向我们都是商务或销售申请appid,申请过程很快,一般几分钟就可以完成。
配置文件是配合appid使用的一些加密数据,约定了型号、算法、指标等一些信息。不同的客户要求会所有不同,所以我们把客户定制化要求封装在该配置文件中。
不同客户端是否可以使用同一个APPID
安卓和iOS是可以用一个appid,小程序/小程序插件 跟该SDK的appid暂时不能使用同一个
SDK是否为离线的?它会向Yolanda云端发送什么数据?
在方法initSdk中,SDK会发送一个请求跟我们的云端校验,配置文件是否需要更新。如果需要更新,会下载最新的配置文件(配置文件很小,一般为512字节),如果不需要更新,则不做任何处理。
SDK是支持离线模式的,客户如果特别要求,我们会把配置文件中关于该项的配置设置成离线
。设置成离线后,SDK不再向外发送任何网络请求(这个可以用抓包工具验证)配置文件不再更新,如果需要增加型号或指标,则需要跟我司再次申请配置文件,然后由开发人员手动替换。
初始化提示appid错误
- 检查初始化文件和使用的appid是否匹配
- 检查引入的SDK是否是最新的
测量完成后返回的数据缺失指标
如果是只有体重和BMI的数据可以参考测量完成后没有体脂率等数据.
如果能够测到体脂率,但是缺失自己想要的指标,该情况通常是配置文件中未包含该指标,需要跟我司商务/销售沟通,增加该指标。
我司增加指标后,会重新发送一个配置文件,需要替换该配置文件。
把扫描的设备的model id发给我司进行确认
SDK功能相关
是否能判断秤是否灭屏?
对于普通蓝牙秤
和双模秤
来说,未连接设备时,扫描拿到的设备对象QNBleDevice,有个属性isScreenOn
,该属性指示了屏幕是否亮屏。连接设备后,无法直接判断设备是否亮屏,不过对于一些秤来说,息屏的时候就会断开连接。
isScreenOn 属性只是表明SDK扫描到那一刻该设备是亮屏的,后续设备屏幕状态变化了,QNBleDevice不会动态更新。需要通过扫描到的新的QNBleDevice回调才能判断。
对于广播秤
来说,能够扫描到设备,就是已开机的状态,扫描不到,通常就是未开机。
连接设备一直无法成功或者成功后很快就断开连接
- 检查设备是否被其他人连接了
- 在系统蓝牙中查看是否当前连接的设备已经被配对,如果已经配对,需要取消配对
- 部分手机需要先扫描才能连接成功,先扫描设备再进行连接
SDK返回无定位权限错误
- 检查是否对ACCESS_COARSE_LOCATION和ACCESS_FINE_LOCATION都进行了申请,SDK中对2个权限都进行了校验
- 是否编译版本26以及以上,如果是,2个权限都需要单独申请(8.0的新特性)
安卓6.0以上,谷歌把蓝牙归类为定位功能的一部分,使用蓝牙扫描时,需要用户授权定位权限,不然调用扫描时,系统会提示需要定位权限 相当一部分手机(大约有1/3的样子,不打开定位服务开关时,也是无法扫描到设备,原生大多数如此,而国产系统会对此有些优化,就不一定了)
SDK返回错误的文件,确认文件位置无异常,确认文件在demo中使用无异常
- 检查是否有添加so库
- 检查是否打包的apk文件中含有so库
数据或者设备等监听回调,同一时间回调多次
- 先确定是否,设置了多次监听。当监听不使用时,一定要设置为null
- 确定是否是穿鞋测量,这个可能导致短时间内,完成多次测量的情况
测量完成后没有体脂率等数据
- 检查资料是否正确,主要是生日(用来计算年龄)、身高这两个参数,是否超出正常值范围
- 是否有脱鞋进行测量。穿鞋测量时,无法测到生物阻抗,所以无法计算体脂率等指标
扫描不到设备,该如何处理
- 检查是否打开蓝牙、是否有踩亮秤,手机是否跟秤相距过远(超过10米)
- 检查所扫描的设备,是否已经被其他人连接
- 如果是Android,则可以检查下是否有定位权限,另外是否有打开定位服务开关
- 尝试重启蓝牙,再不行,重启蓝牙试试。
是否有手环SDK?
我司有智能手环设备,也是有SDK。不过SDK暂时没有对外完全开放,如有意向,可以联系我司商务洽谈。
SDK是否可以只做协议解析,蓝牙扫描和连接由客户自己管理
这个是可以实现的,普通蓝牙秤和蓝牙广播秤的实现方式会有不同。
自己实现蓝牙扫描和连接的管理,有一定的技术难度,如果没有相关蓝牙开发经验,不建议进行此操作。如果执意进行该项操作,我们会为认为客户有较丰富的蓝牙开发经验。
- 编写自己的蓝牙协议代理类,实现各个蓝牙操作方法
- 编写数据监听回调类 QNScaleDataListener,并使用[QNBleApi.setBleDeviceDiscoveryListener注册到SDK中。
- 自己进行蓝牙扫描,并把扫描到的相关信息传给SDK,使用方法QNBleApi.buildDevice,创建Yolanda蓝牙设备对象
- 创建用户对象,使用方法QNBleApi.buildUser
- 创建蓝牙协议处理类
- 进行蓝牙连接
- 连接成功,发现完服务成功后,调用蓝牙协议处理类的prepare方法
- 处理QNScaleDataListener回调的数据
- 收稳定数据后自行处理。
你们官网API的《秤状态定义》里的状态是0-9,为什么在你们提供的Demo里有为“-1”的状态(而且确确实实会返回这个状态)
-1一直存在,表示默认状态失去连接,也就是连接是断开的状态。通常是秤主动断开连接后收到的。我们会尽快把这个状态也统一到断开连接状态。
其他问题
是否可以给到体脂率等指标的计算方法?
这些指标的算法属于我司机密,无法提供。
什么是秤端存储数据
普通蓝牙秤在称重时未连接手机的情况下,秤会把数据存在秤体内,等下次连接蓝牙时,会把这些数据传给APP,由于SDK无法识别该用户是谁的,所以会把这个数据交由APP来分配,分配用户可以交给SDK来计算完整数据。
可否提供蓝牙协议
原则上我们不会提供蓝牙协议,如果实在需要,可以跟我们的商务/销售沟通
为什么我们使用SDK测量出来的数据与轻牛或轻牛健康的数据会有差异
Yolanda有几套算法,不同的设备可能使用的不同算法。
另外,我们自己APP中有一个健康问题机制,会让用户回答2个问题,并且根据用户回答的情况,而采用不同的算法。
SDK中的算法机制通常为统一的某种算法,不可变的。也就是说,同一个秤使用我司的APP测量与使用SDK进行测量,计算资料和体重一样,也有可能有会不少的差异。所以,我司不建议使用我司APP和SDK的测量数据进行对比,客户只需要关心给到的算法是否合适,是否稳定即可。
线上版本出现蓝牙连接异常后,怎么排查问题
先查清用户的手机型号,如果可以的话,尽量使用跟客户同样的型号来测试。
注册日志输出接口QNLogListener,记录相关日志(可以保存日志文件),发给我司开发人员进行分析。
搜索到蓝牙并连接上后,脚悬空停留在体脂秤上面几秒,然后把脚拿开,会返回测量完成的状态码(返回数据的方法内并没有返回任何数据)
为什么我们在没有任何操作的情况下也能搜索到蓝牙(10-30分钟内没有人靠近体脂秤)
称重的时候,如果未连接APP,秤会把这个数据缓存到里面,息屏后也会广播5-30分钟(视生产批次不同而不尽相同)。此时APP连接后,可以把这些缓存的数据接收到,并显示给客户。该功能用来解决,用户称重时不用手机,称重结束后,坐在沙发上打开手机并接收刚才的数据。