iOS应用程序无法识别我的灯塔

时间:2016-07-10 06:04:01

标签: swift swift2 xcode7 ibeacon ios9.3

我上周刚刚发现了iBeacon,并且认为我已经试一试了。我在亚马逊上买了这个灯塔。 https://www.amazon.com/gp/product/B010Q2PUGA/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1 使用Light Blue应用程序,我能够读取信标信息(UUID,Major,Minor等),因此我知道信标正在广播。 按照本教程,我制作了一个应用程序来熟悉信标编程。 (使用我的UUID)代码有一个小的改动,由于swift版本,我不得不将println更改为print。 https://willd.me/posts/getting-started-with-ibeacon-a-swift-tutorial 尽管如此,我的应用似乎并没有认出我的灯塔。在我的日志/调试区域中,我只看到:

[]
[]
[]

我的代码是:

import UIKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {


    let locationManager = CLLocationManager()
    let region = CLBeaconRegion(proximityUUID: NSUUID(UUIDString: "8EBB5704-9697-02C9-D073-BF9162B72D7B")!, identifier: "iBeacon-6713")
//    let region = CLBeaconRegion(proximityUUID: NSUUID(UUIDString: "8EBB5704-9697-02C9-D073-BF9162B72D7B")!, major: 11046, minor: 11047, identifier: "ibeacon")

    override func viewDidLoad() {
        super.viewDidLoad()

        locationManager.delegate = self;
        if (CLLocationManager.authorizationStatus() != CLAuthorizationStatus.AuthorizedWhenInUse) {
            locationManager.requestWhenInUseAuthorization()
        }
        locationManager.startRangingBeaconsInRegion(region)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

//    func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) {
//        print(beacons)
//    }
    func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) {
        print(beacons)
    }

}

xcode:版本7.3.1(7D1014)

OS X El Capitan:版本10.11.5(15F34)

iOS:版本9.3.2(13F69)

Apple Swift 2.2版(swiftlang-703.0.18.8 clang-703.0.31)

1 个答案:

答案 0 :(得分:1)

我怀疑 8EBB5704-9697-02C9-D073-BF9162B72D7B不是信标的接近UUID 。 LightBlue将为蓝牙设备显示许多不同的UUID,并非所有UUID都是ProximityUUID。与任何iOS应用程序一样,LightBlue必须知道PriximityUUID以检测具有CoreLocation的信标。如果没有,它仍然可以检测到使用CoreBluetooth的蓝牙传输,但它将无法读取iBeacon标识符。这可能就是发生的事情。

您需要找到设备的ProximityUUID。如果您不能使用制造商说明进行操作,则可以使用带有Locate应用的Android设备,该应用可以在不事先知道标识符的情况下读取iBeacon UUID。 iOS设备无法执行此操作。