MiEcosystem / miot-plugin-sdk

MIoT Plugin SDK for Android&iOS(beta)
393 stars 186 forks source link

bluetooth.connect(-1) 返回错误 #49

Closed edwardair closed 5 years ago

edwardair commented 5 years ago

bluetooth.connect(-1).then((data) => { MYLOG("连接成功"); }).catch((data) => { MYLOG(("连接失败:"+data)); }); 返回错误如下: "code":"ECOM.XIAOMI.BLELOGIN0"

{"code":"ECOM.XIAOMI.BLELOGIN0","nativeStackIOS":["0 MiHome 0x000000010592af84 RCTFBQuickPerformanceLoggerConfigureHooks + 737468","1 MiHome 0x000000010592aee8 RCTFBQuickPerformanceLoggerConfigureHooks + 737312","2 MiHome 0x0000000105814128 cxa_throw + 5594304","3 MiHome 0x0000000105682784 __cxa_throw + 3949340","4 MiHome 0x0000000105688604 cxa_throw + 3973532","5 MiHome 0x00000001056e4ce0 __cxa_throw + 4352120","6 MiHome 0x00000001056a8aa0 __cxa_throw + 4105784","7 libdispatch.dylib 0x000000019a5c96c8 + 24","8 libdispatch.dylib 0x000000019a5ca484 + 16","9 libdispatch.dylib 0x000000019a5769b4 + 1068","10 CoreFoundation 0x000000019ab1f<…>

帮忙看下这个问题怎么解决

另外,麻烦再详细解答下:

type android插件链接蓝牙类型 -1 自动判断,0 小米蓝牙协议设备,1 自己的安全芯片设备,2 分享的安全芯片设备,3 普通的蓝牙协议

我们的蓝牙是小米蓝牙模组,但协议是自定义的,那么应该选 1还是3? 以及 2 是用户分享过来的设备连接?

pencilCool commented 5 years ago

iOS蓝牙类型是自动判断的

edwardair commented 5 years ago

我就是用 -1 判断的,还是说, -1 都不需要传?

dingshaoran commented 5 years ago

你用的是 ios 手机,type 只对 android 有影响。

edwardair commented 5 years ago

恩 我看到说明也是对android影响,目前是接口报错,跟手机平台不相关啊,传不传-1都是一样报错

pencilCool commented 5 years ago

只在iOS 上报错吗?

edwardair commented 5 years ago

没在安卓上测试,不清楚

edwardair commented 5 years ago

测试了下android,报错很多错误:

11-23 13:00:53.474 30833 31580 E ReactNativeJS: java.lang.RuntimeException: Cannot add a child that doesn't have a YogaNode to a parent without a measure function! (Trying to add a 'ReactRawTextShadowNode' to a 'LayoutShadowNode') 11-23 13:00:53.474 30833 31580 E ReactNativeJS: at com.facebook.react.uimanager.ReactShadowNodeImpl.addChildAt(ReactShadowNodeImpl.java:199) 11-23 13:00:53.474 30833 31580 E ReactNativeJS: at com.facebook.react.uimanager.ReactShadowNodeImpl.addChildAt(ReactShadowNodeImpl.java:54) 11-23 13:00:53.474 30833 31580 E ReactNativeJS: at com.facebook.react.uimanager.UIImplementation.setChildren(UIImplementation.java:482) 11-23 13:00:53.474 30833 31580 E ReactNativeJS: at com.facebook.react.uimanager.UIManagerModule.setChildren(UIManagerModule.java:439)

不过可以将这些报错页面返回,直到底层能看到真正的插件页面,尝试了 DEMO的代码,bt.connect(-1) ,收不到任何返回,错误信息也没回调,iOS上至少还有错误返回 @pencilCool

dingshaoran commented 5 years ago

android 上的这个是界面有问题,connect 的,你过滤一下 log "connect " 看看有没有

edwardair commented 5 years ago

我们蓝牙是非小米蓝牙协议设备,并且是弱绑定

edwardair commented 5 years ago

安卓上,按如下步骤调试,发现这样的问题:

  1. 第一次进入插件,Bluetooth.checkBluetoothIsEnabled 能够接收回调

  2. 然后底层是插件页面,上层会弹出好几个11-23 13:00:53.474 30833 31580 E ReactNativeJS: java.lang.RuntimeException: Cannot add a child that doesn't have a YogaNode to a parent without a measure function! (Trying to add a 'ReactRawTextShadowNode' to a 'LayoutShadowNode')此类的错误信息页面

  3. 之后bluetooth.connect无法接收任何回调

  4. 尝试按系统返回键,直到返回到真实的插件页面

  5. 此时,可以reload页面

  6. 打印 Bluetooth.checkBluetoothIsEnabled 回调,此时同样无法接收回调信息

dingshaoran commented 5 years ago

步骤2的报错,是由于什么引起的,是 render 里的报错,后面的3应该都没有执行到,不可能没有回调的。 建议你把所有页面相关的 setState的逻辑先去掉,console.log 输出蓝牙相关的,以免影响问题定位。 你可以直接调用 bluetooth.connect 如果蓝牙checkBluetoothIsEnabled=false,会在回调里报错

edwardair commented 5 years ago

步骤2怎么引起我也不清楚,试过直接render一个空的view同样会报错,MIX2、MIUI10.0稳定版 步骤3肯定是执行到代码的,代码本身跟步骤1的代码是在同一个函数中,调用前后我有日志打印信息, 仔细看步骤5、6,当出现步骤2的错误后,reload插件页面,打印过,步骤1所在的代码是执行的,但之后无法接收回调,我只能猜测,是因为步骤2弹出的错误页面,影响了回调,或者影响了插件导致插件的“对象”都释放了? @dingshaoran 换了个手机,有个错误信息: screenshot_2018-11-29-09-39-29-028_com miui bugreport

edwardair commented 5 years ago

以上错误发现是在android平台(iOS无问题) export default class App extends React.Component { render() { return <RootStack/> } } @pencilCool @dingshaoran @kyou @kangkai

并且尝试使用View包含 RootStack同样报错。请问你们android上这样用没有问题么?

edwardair commented 5 years ago

bluetooth.connect(-1) 最新测试情况: android:能够回调成功,成功信息如下:

{"key_version":"1.0.1_1","services":[{"chars":["00002a00-0000-1000-8000-00805f9b34fb","00002a01-0000-1000-8000-00805f9b34fb","00002a02-0000-1000-8000-00805f9b34fb","00002a04-0000-1000-8000-00805f9b34fb"],"uuid":"00001800-0000-1000-8000-00805f9b34fb"},{"chars":["00002a05-0000-1000-8000-00805f9b34fb"],"uuid":"00001801-0000-1000-8000-00805f9b34fb"},{"chars":["00000010-0000-1000-8000-00805f9b34fb","00000001-0000-1000-8000-00805f9b34fb","00001001-0000-1000-8000-00805f9b34fb","00000002-0000-1000-8000-00805f9b34fb","00000013-0000-1000-8000-00805f9b34fb","00000004-0000-1000-8000-00805f9b34fb","00000014-0000-1000-8000-00805f9b34fb","00000007-0000-1000-8000-00805f9b34fb"],"uuid":"0000fe95-0000-1000-8000-00805f9b34fb"},{"chars":["8082caa8-41a6-4021-91c6-56f9b954cc34","9d84b9a3-000c-49d8-9183-855b673fda31","457871e8-d516-4ca1-9116-57d0b17b9cb2","5f78df94-798c-46f5-990a-b3eb6a065c88","6c53db25-47a1-45fe-a022-7c92fb334fd4","724249f0-5ec3-4b5f-8804-42345af08651"],"uuid":"0000fef5-0000-1000-8000-00805f9b34fb"},{"chars":["0000ffd1-0000-1000-8000-00805f9b34fb","0000ffd2-0000-1000-8000-00805f9b34fb","0000ffd3-0000-1000-8000-00805f9b34fb","0000ffd4-0000-1000-8000-00805f9b34fb","0000ffd5-0000-1000-8000-00805f9b34fb","0000ffd6-0000-1000-8000-00805f9b34fb","0000ffd7-0000-1000-8000-00805f9b34fb","0000ffd8-0000-1000-8000-00805f9b34fb","0000ffd9-0000-1000-8000-00805f9b34fb","0000ffda-0000-1000-8000-00805f9b34fb","0000ffdb-0000-1000-8000-00805f9b34fb","0000ffdc-0000-1000-8000-00805f9b34fb"],"uuid":"0000ffd0-0000-1000-8000-00805f9b34fb"}],"code":0,"key_is_connect_failed":false,"key_token":null}

但是同时也会接收到catch的错误信息:

{"line":92715,"column":57,"sourceURL":"http://localhost:8081/projects/com.roidmi.vacuum.ios/index.delta?platform=android&dev=true&minify=false"}

然而测试iOS,仍旧catch错误:

{"code":"ECOM.XIAOMI.BLELOGIN0","nativeStackIOS":["0 MiHome 0x00000001065e6f64 RCTFBQuickPerformanceLoggerConfigureHooks + 737452","1 MiHome 0x00000001065e6ec8 RCTFBQuickPerformanceLoggerConfigureHooks + 737296","2 MiHome 0x00000001064d0068 cxa_throw + 5594304","3 MiHome 0x000000010633e6c4 __cxa_throw + 3949340","4 MiHome 0x0000000106344544 cxa_throw + 3973532","5 MiHome 0x00000001063a0c20 __cxa_throw + 4352120","6 MiHome 0x00000001063649e0 __cxa_throw + 4105784","7 libdispatch.dylib 0x00000001996c16c8 + 24","8 libdispatch.dylib 0x00000001996c2484 + 16","9 libdispatch.dylib 0x000000019966e9b4 + 1068","10 CoreFoundation

@dingshaoran @pencilCool

edwardair commented 5 years ago

android能够正常连接蓝牙了,iOS仍然报错

Copypeng commented 5 years ago

connect 接口我们测试是OK的。请使用最新iPA再测试。

edwardair commented 5 years ago

是最新ipa 最新SDK 目前android是能正常连接的,什么都不改,直接运行在iOS就是不行,看那个错误信息,ECOM.XIAOMI.BLELOGIN0 具体是什么错误呢?

edwardair commented 5 years ago

iOS原因找到了:

Device.loadProperties("deviceName")
.then(map => {
    MHGlobal.deviceName = map.get("deviceName");
})
.catch(error => {
    MYLOG('Device.loadProperties error: '+JSON.stringify(error));
});

我在bt.connect之前调用了以上代码,就100%连接失败,android上无问题 @Copypeng