GTaylor
GTaylor
  • 发布:2021-07-04 09:20
  • 更新:2021-07-06 20:28
  • 阅读:1024

【报Bug】IOS蓝牙可以下发数据给硬件设备,但是无法开启notify,并且无法接收硬件设备回传的数据

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 3.1.18

HBuilderX类型: 正式

HBuilderX版本号: 3.1.18

手机系统: iOS

手机系统版本号: iOS 13.4

手机厂商: 苹果

手机机型: iphone11

页面类型: vue

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

//开始启动notify
let deviceId = that.iBluetooth.deviceId;
let serviceId = that.iBluetooth.serviceId;
let characteristicId = that.iBluetooth.characteristicId;
uni.notifyBLECharacteristicValueChange({
state: true, // 启用 notify 功能
deviceId,
serviceId,
characteristicId,
success: res => {
console.log('notify-succ:' + JSON.stringify(res));
that.iGlobal.uploadlog('notify-succ'+JSON.stringify(res))

                            uni.onBLECharacteristicValueChange((res2) => {  
                                console.log('value-succ:' + JSON.stringify(res2));  
                                that.iGlobal.uploadlog('value-succ'+JSON.stringify(res2))  
                            });  
                        },  
                        fail: err => {  
                            console.log('notify-failed:' + JSON.stringify(err));  
                            that.iGlobal.uploadlog('notify-failed'+JSON.stringify(err))  
                        }  
                    });

操作步骤:

搜索到蓝牙,启用低功耗蓝牙设备特征值变化时的 notify 功能时报错。
安卓正常,苹果报错。iphone 5s 异常,ihone11也异常。

预期结果:

能正常接收发送。

实际结果:

ios出现异常,能发送数据,但是无法接收到硬件回传的数据。

bug描述:

同一个硬件设备,我用安卓能正常的notify,但是用ios就是一直提示这个错误,10005的错误是【没有找到指定特征值】,但是安卓是正常的啊,是不是Ios需要特殊设定什么才能正常使用,我感觉这个应该是框架的BUG。

2021-07-04 09:20 负责人:无 分享
已邀请:
DCloud_iOS_WZT

DCloud_iOS_WZT

我看你发了两个帖子,描述的错误不太一样,一个10005一个是10007

  • GTaylor (作者)

    嗯。有两个问题。

    一个是写入失败,一个是接收成功,但是没有数据。

    2021-07-05 20:33

  • DCloud_iOS_WZT

    回复 GTaylor: 接收是写入成功? 还是手机读数据成功

    2021-07-05 20:46

DCloud_iOS_WZT

DCloud_iOS_WZT

10005是你的characteristicId传的有问题 10007是你写数据失败的错误码

GTaylor

GTaylor (作者) - huaruiyunhai

send-error-{"errMsg":"writeBLECharacteristicValue:fail Error Domain=CBATTErrorDomain Code=14 \"Unlikely error.\" UserInfo={NSLocalizedDescription=Unlikely error.},https://ask.dcloud.net.cn/article/282","errCode":10007,"code":10007}

特征码是正确的,但是打印还是有问题,而且在安卓下能正常写入。

value-succ{"characteristicId":"0000FFE1-0000-1000-8000-00805F9B34FB","deviceId":"78E496C9-3688-8D6C-B60D-B17D69A597C1","serviceId":"0000FFE0-0000-1000-8000-00805F9B34FB","value":{}}

这是返回的数据。

GTaylor

GTaylor (作者) - huaruiyunhai

而且返回的特征码,服务ID。设备ID都是我们这个蓝牙设备唯一指定的。原生的程序也是用这个来通信的。

  • DCloud_iOS_WZT

    我这边用蓝牙设备试了下 写数据什么的都正常 看下返回的相关id是不是用的有问题 苹果的设备id跟安卓的应该不是一致的

    2021-07-06 12:57

  • DCloud_iOS_WZT

    "properties":{"indicate":false,"notify":true,"read":false,"write":true} 你看下你设备的读写权限正常不 有些是不可读或者不可写的

    2021-07-06 13:00

GTaylor

GTaylor (作者) - huaruiyunhai

这是我获取的特征码列表。
gecharacteristics-succ-{"notifyId":"0000FFE1-0000-1000-8000-00805F9B34FB","writeId":"0000FFE1-0000-1000-8000-00805F9B34FB","list":[{"properties":{"indicate":false,"notify":true,"read":false,"write":true},"uuid":"0000FFE1-0000-1000-8000-00805F9B34FB"},{"properties":{"indicate":false,"notify":true,"read":false,"write":true},"uuid":"0000FFE2-0000-1000-8000-00805F9B34FB"},{"properties":{"indicate":false,"notify":true,"read":false,"write":true},"uuid":"0000FFE3-0000-1000-8000-00805F9B34FB"}]}

这个是写入之后返回的结果。
value-succ{"characteristicId":"0000FFE1-0000-1000-8000-00805F9B34FB","deviceId":"78E496C9-3688-8D6C-B60D-B17D69A597C1","serviceId":"0000FFE0-0000-1000-8000-00805F9B34FB","value":{}}

我验证过了,特征码的写入和监听都是支持的。

GTaylor

GTaylor (作者) - huaruiyunhai

pick7-error-{"errMsg":"writeBLECharacteristicValue:fail Error Domain=CBATTErrorDomain Code=14 \"Unlikely error.\" UserInfo={NSLocalizedDescription=Unlikely error.},https://ask.dcloud.net.cn/article/282","errCode":10007,"code":10007}

写入数据,蓝牙硬件是已经正常接收了,但是还是提示了这个错误。

CBATTErrorDomain Code=14

这个错误是咱们框架的错误,还是IOS那边给的错误啊?

  • DCloud_iOS_WZT

    系统返回的,查一下可能是字节太多,试试分段传输

    2021-07-06 20:32

该问题目前已经被锁定, 无法添加新回复