MiEcosystem / ios-rn-sdk

Works with mijia
https://iot.mi.com
116 stars 41 forks source link

与米家插件蓝牙连接成功后,返回米家主界面,反复连接蓝牙出现连接失败 #157

Open CGseng opened 5 years ago

CGseng commented 5 years ago

Bug Report

实际现象

复现步骤:

【前提条件】:

设备绑定未连接

【操作步骤】:

       米家->点击对讲机图标连接

场景1:退出,等待对讲机端蓝牙断开,再重新连接,反复操作

场景2:退出,对讲机端蓝牙未断开,再重新进入连接,反复操作

【实际结果】:

蓝牙无法连接 ,【复现概率10%左右】

【期望结果】:

连接正常

测试手机:iphone6s image

CGseng commented 5 years ago

详情点击连接查看:http://note.youdao.com/noteshare?id=65b096f2bd59e26c789ab71d38f793b2

pinksword commented 5 years ago

抱歉没及时回复。 我们已找人在看这个问题,稍候回复,请稍候。

blockdate commented 5 years ago

根据你的描述我们这边没法定位到确切的信息,希望你可以提供以下信息,便于我们定位问题:

  1. 手机系统版本
  2. 操作过程中手机端的console日志输出
  3. 操作过程中无法连接蓝牙的js端的日志输出
  4. 固件端的日志输出
pinksword commented 5 years ago

请问出问题的对讲机是哪款?1 or 1S or 2 ?

CGseng commented 5 years ago

1.手机系统版本 iOS 10.2.1 2.APP 米家V4.13.0

  1. 固件端日志参考链接内容 http://note.youdao.com/noteshare?id=65b096f2bd59e26c789ab71d38f793b2 4.js端无有用信息输出 5.出问题的是米家对讲机2
pinksword commented 5 years ago
  1. 能找个iOS12的iphone试试吗?排除下系统的问题
  2. JS端代码加些debug log呗,比如蓝牙连接/断连的回复,出错信息,native module的接口调用回复等
CGseng commented 5 years ago

1.在其他手机iPhoneX,iOS12.1.4 ,App米家V4.13.0 测试此问题未复现

  1. 复现此问题时,JS端调用MHBluetooth.scanAndConnectForSeconds,回调返回error.code = 404
pinksword commented 5 years ago

蓝牙连接失败,我们怀疑是上次退出插件时蓝牙没断开 请试试此文档中的建议:https://github.com/MiEcosystem/ios-rn-sdk/issues/27

blockdate commented 5 years ago

error.code = 404 这个错误出现表示在指定时间中未能找到指定设备,出现情况一般为设备不在周边或者设备已经被连接。 可以的话检查下是否是退出时的蓝牙断开接口未执行,还是执行了但是断开连接有延迟。 断开蓝牙方式可以看下 #27 。

CGseng commented 5 years ago

执行了断开操作有延时,有5s左右延时,在其他手机上没有延时

pinksword commented 5 years ago

那你就“成功断开了蓝牙连接”才退出插件呢。

这样的话副作用顶多是退出插件会慢一点

CGseng commented 5 years ago

你这种方案会影响产品效果,不太能接受,还是希望你们能做机型适配。这种方式不是慢一点点,点了返回按钮5s多没有任何反应

iHealthBaoLei commented 5 years ago

@CGseng 米家提供的解决方案:“成功断开了蓝牙连接,再退出插件”本身没问题,问题在于:断开的慢,如果正常断开的话,是很快的,那你调完断开马上退出插件也没问题。 断开慢的原因是 没有正确的去断开设备,米家提供的是API的基本能力,如果直接调用断开,大概率是不能及时断开的。 我的经验里有两个方案适合你: 方案一:需要先关闭写使能,再调用断开,就可以了。 方案二:发命令给设备,让设备执行断开。 当然前提是,米家提供的API的基本能力没Bug。Native里两个方案都没问题。

pinksword commented 5 years ago

我们内部整个demo试了下,频繁的连接/断开 蓝牙(没发送数据),没出现断连延时的问题。

所以请您试下:

  1. 暂时关掉插件中蓝牙数据读写操作,看是否还出现此问题。
  2. 试下iHealthBaolei提供的“方案一”试下。(感谢iHealthBaolei)
CGseng commented 5 years ago

我这边在断开蓝牙操作前,根据我的log确认未进行读写数据操作。还有一个关键点是你们测试的手机是否是iOS10.2.1 的iPhone6s ,因为目前我只在这个手机上能复现这个问题。

pinksword commented 5 years ago

你还是试下“1. 暂时关掉插件中蓝牙数据读写操作,看是否还出现此问题。” 目前没什么头绪的情况下,只能靠排除法先分析了

因为我们这边试过:只是频繁连接/断连蓝牙,不发送数据,是不会出现此问题的

CGseng commented 5 years ago

我这边已经尝试了只有连接断开进行蓝牙数据读写,连接上之后注释了其他蓝牙操作,断开蓝牙依然会有延时,延时也并未有任何好转,所以请确定你们测试环境和我们的是否一致