收藏
回答

iOS13怎么区分蓝牙的不同状态,是系统蓝牙未打开或者未授权微信蓝牙权限?

在iOS13中,蓝牙变成了和位置,通知服务等同样的可以针对单个app授权的服务。用户可以在设置中关闭微信的Bluetooth Sharing,这样即使系统蓝牙打开了,小程序仍然无法使用BLE服务。

三种情况:

  • a.手机蓝牙未打开

  • b.手机蓝牙已打开,微信的蓝牙服务关闭

  • c.两者均打开

在目前的小程序API中,我们可以通过获取system Info来查看蓝牙是否打开(bluetoothEnabled).然而在情况a和b中,该参数均为false。这样我们无法准确提示用户去打开系统蓝牙或者打开微信的蓝牙授权了。

另一种方式是在wx.openBluetoothAdapter(Object object) 这个接口中,情况a返回的error为:

{"state": 4,"errCode":10001,"errMsg":"openBluetoothAdapter:fail open fail"}

情况b返回的error为:

{"state": 3,"errCode":10001,"errMsg":"openBluetoothAdapter:fail open fail"}

开发者或许可以通过这个state来区分这两种情况,但是在官方文档中并未给出state的具体定义。

我相信在iOS13中,小程序API会有所更新。希望能够补充这种state的定义,同时给出更多蓝牙的选项。


下面是iOS中关于state的定义,我猜测微信直接引用这部分定义:

typedef NS_ENUM(NSInteger, CBCentralManagerState) {

CBCentralManagerStateUnknown = CBManagerStateUnknown,

CBCentralManagerStateResetting = CBManagerStateResetting,

CBCentralManagerStateUnsupported = CBManagerStateUnsupported,

CBCentralManagerStateUnauthorized = CBManagerStateUnauthorized,

CBCentralManagerStatePoweredOff = CBManagerStatePoweredOff,

CBCentralManagerStatePoweredOn = CBManagerStatePoweredOn,

} NS_DEPRECATED(10_7, 10_13, 5_0, 10_0, "Use CBManagerState instead");

这个问题已经有用户遇到,应该是购买的iOS13的新手机,希望能够尽早处理。


最后一次编辑于  2019-11-08
回答关注问题邀请回答
收藏

5 个回答

  • 有涯 จุ๊บ
    有涯 จุ๊บ
    2020-07-07

    刚发现这个问题 现在文档已更新 在fail中status为3 是微信未授权 4是已授权未开启

    2020-07-07
    有用
    回复
  • 匿名
    匿名
    2019-11-08

    ios13蓝牙授权问题我们也遇到了,目前没有什么方法可以直接了解到是应用未授权的情况,都是靠客服引导解决,后期只能持续关注 wx.getSystemInfoSync 接口看是不是会增加 bluetoothAuthorized字段。。。

    2019-11-08
    有用
    回复
  • bibolibo
    bibolibo
    2019-09-03

    你用的测试版本ios13 ? 最新的ios不是 12.4.1 吗? 你用的beta版本吗? 建议等ios13正式上线后配合测试.ios13 可能是beta版本不稳定...个人见解..

    2019-09-03
    有用
    回复 2
    • 筱强
      筱强
      2019-09-03
      我们内部有关于iOS13的一些测试,过几天iOS13就要正式发布,我们需要知道发布对我们小程序和app的影响。
      2019-09-03
      1
      回复
    • bibolibo
      bibolibo
      2019-09-03回复筱强

      应该是测试版本的版本吧.. 现在还没有ios13 不敢耍,害怕变砖,所以你可以测试看看,看一下你说的这三种情况对应的state  

      2019-09-03
      回复
  • 筱强
    筱强
    2019-09-03

    咨询了微信开发人员,回复是state=3表示CBManagerStateUnauthorized,state=4代表

    CBManagerStatePoweredOff,这应该是iOS的CoreBluetooth框架中的定义。但是如果微信文档中没有说明,开发者是不敢下这样的论断的。

    谢谢微信方面的及时回复!


    2019-09-03
    有用
    回复 3
    • 筱强
      筱强
      2019-09-17
      state=3现在获取不到了,只能获取到PoweredOff,微信没有任何更新,代码也没有调整,但是这个状态目前无法获取到了。
      2019-09-17
      回复
    • 晋
      2019-11-08
      +1 我这边 iOS 13 以上,蓝牙授权关闭,同样获取的是 4,不知道这边怎么差异化判断,在线求助
      2019-11-08
      回复
    • 筱强
      筱强
      2020-01-17回复
      目前微信最新版本7.0.10,这个问题还没有修复。开发者先自己做容错处理。
      2020-01-17
      回复
  • 我是一颗跳跳糖
    我是一颗跳跳糖
    2019-09-03

    有啊 你看文档 里面有写到

    2019-09-03
    有用
    回复 1
    • 筱强
      筱强
      2019-09-03
      请原谅,我看到文档里面定义了errCode,在https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.openBluetoothAdapter.html。关于state 的定义可以给出链接吗?
      2019-09-03
      回复
登录 后发表内容
问题标签