iBeacons在iOS 10.0.2中被破坏了吗?

Cas*_*ike 5 core-location ios core-bluetooth ibeacon

到目前为止,大家如何在iOS 10.0.2上使用iBeacons?我希望比我好!:-)

更新:用于测试的硬件是两个iPhone.iPhone 5S(A1533)和iPhone 7(A1778)

以下代码的swift 2.x版本可以在iPhone上用于在iOS版本9.x上宣传简单的iBeacon; 今天,相同的代码 - 更新为swift 3并在iOS 10.0.2上运行 - 似乎根本没有做广告.

我已经将代码缩减为一个非常简单的助手类和一个我认为应该充分展示问题的视图控制器.请注意,故事板只有一个按钮连接到启动/停止iBeacon广告.

我在iPhone 5和iOS 7的iPhone 7上运行应用程序.为了测试我创建了一个自定义扫描程序(嗅探特定的邻近UUID),当这不起作用时,我尝试了更多通用的iBeacon检测应用程序,如Estimote和LightBlue.

叹息 - 没有看到iBeacon.

思考?Apple的开发者论坛提到了10.x中iBeacons报告的问题,但据我所知,没有一个简单.

谢谢你......

- - - iBeaconConfiguration.swift - - - - - -

import Foundation

class iBeaconConfiguration
{
    static let uuid = UUID(uuidString: "F34A1A1F-500F-48FB-AFAA-9584D641D7B1")!

    private init() {}
}

- - - ViewController.swift - - - - - -

import UIKit
import CoreLocation
import CoreBluetooth

class ViewController: UIViewController, CBPeripheralManagerDelegate 
{

    @IBOutlet weak var btnAction: UIButton!

    let UUID: UUID = iBeaconConfiguration.uuid

    var beaconRegion: CLBeaconRegion!

    var dataDictionary = NSDictionary()

    var bluetoothPeripheralManager: CBPeripheralManager!

    var isBroadcasting = false

    override func viewDidLoad() {
        super.viewDidLoad()

        bluetoothPeripheralManager = CBPeripheralManager(delegate: self, queue: nil, options: nil)
    }


    @IBAction func switchBroadcastingState(_ sender: AnyObject) 
    {

    if !isBroadcasting {
        if bluetoothPeripheralManager.state == CBManagerState.poweredOn {

            let major: CLBeaconMajorValue = 123
            let minor: CLBeaconMinorValue = 456

            beaconRegion = CLBeaconRegion(proximityUUID: UUID, major: major, minor: minor, identifier: "com.rdz.bcast")

            dataDictionary = beaconRegion.peripheralData(withMeasuredPower: nil)

            bluetoothPeripheralManager.startAdvertising(dataDictionary as? [String : Any])

            btnAction.setTitle("Stop", for: UIControlState.normal)

            isBroadcasting = true
        }
    }
    else {
        bluetoothPeripheralManager.stopAdvertising()

        btnAction.setTitle("Start", for: UIControlState.normal)

        isBroadcasting = false
    }
}

func peripheralManagerDidStartAdvertising(_ peripheral: CBPeripheralManager, error: Error?) {

    print ("peripheralManagerDidStartAdvertising()")

    if error != nil
    {
        print(error)
    }
}

func peripheralManager(_ peripheral: CBPeripheralManager, didReceiveRead request: CBATTRequest) {
    print ("peripheralManager(...didReceiveRead)")
}

func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) {
    var statusMessage = ""

    switch peripheral.state {
    case CBManagerState.poweredOn:
        statusMessage = "Bluetooth Status: Turned On"

    case CBManagerState.poweredOff:
        if isBroadcasting {
            switchBroadcastingState(self)
        }
        statusMessage = "Bluetooth Status: Turned Off"

    case CBManagerState.resetting:
        statusMessage = "Bluetooth Status: Resetting"

    case CBManagerState.unauthorized:
        statusMessage = "Bluetooth Status: Not Authorized"

    case CBManagerState.unsupported:
        statusMessage = "Bluetooth Status: Not Supported"

    default:
        statusMessage = "Bluetooth Status: Unknown"
    }

        print("Bluetooth Status: \(statusMessage)")
    }
}
- - - END - - - - -
Run Code Online (Sandbox Code Playgroud)

(对任何代码格式错误表示道歉.)

dav*_*ung 3

许多人报告 iOS 10 上的蓝牙出现问题,但这种问题并不普遍。

在 iPod Touch 第六代型号 mkh22ll/a 上使用 10.0.2 (14A456) 进行测试,我可以使用iOS 版 Locate 应用程序成功扫描信标并传输 iBeacon 。这是用 Objective C 编写的,但使用与您所展示的相同的 API。您可以在有问题的设备上尝试相同的应用程序,看看是否仍然遇到问题。

在同一设备上测试另一个用 Swift 3 编写的应用程序(该应用程序既传输又接收 iBeacon 数据包),我已经验证它是否成功接收并发送了 iBeacon 数据包。

最重要的是,iOS 10 上的 iBeacon 传输和检测在某些设备上运行良好。

我怀疑 iOS 10 的蓝牙问题仅发生在某些具有不同蓝牙硬件芯片组的 iPhone 硬件型号上(并且可能仅发生在这些型号的某些特定设备上)。

以下几点可能有助于解决问题:

  1. 关闭蓝牙并重新打开。
  2. 重新启动您的设备。(蹩脚的建议,我知道。)
  3. 尝试超级简单的操作,例如在“设置”中扫描附近的其他蓝牙设备,并查看是否可以看到其他设备,例如 Mac 或蓝牙扬声器。如果这个简单的蓝牙任务不起作用,iBeacon 就无法工作。
  4. 使用上述定位应用程序进行测试。这可以消除编码问题。

请务必使用您的硬件设备更新问题。