【问题标题】:Not able to detect Kontakt.io beacons in my iOS app无法在我的 iOS 应用中检测到 Kontakt.io 信标
【发布时间】:2016-10-13 10:06:54
【问题描述】:

我已经按照 Kontakt SDK 示例代码进行了信标搜索代码,如下所示。但是我的信标计数始终为 0,而我的 iPhone 附近有 11 个信标。任何人都可以帮助我解决这个问题吗?

我已经在 viewDidLoad 方法中初始化了 KTKBeaconManager,然后创建了区域对象并停止了任何以前的测距服务,然后开始了新的监控和测距服务。

它一直调用 didRangeBeacons 且信标计数 = 0。不确定到底是什么问题。它与他们的示例代码中的代码相同。

import UIKit
import KontaktSDK

class ViewController: UIViewController {

var beaconManager: KTKBeaconManager!
@IBOutlet var statusLabel: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()

    // Initiate Beacon Manager
    beaconManager = KTKBeaconManager(delegate: self)
    beaconManager.requestLocationAlwaysAuthorization()

    // Region
    let proximityUUID = NSUUID(uuidString: "f7826da6-4fa2-4e98-8024-bc5b71e0893e")
    let region = KTKBeaconRegion(proximityUUID: proximityUUID! as UUID, identifier: "com.weenggs.KontaktDemo")

    // Region Properties
    region.notifyEntryStateOnDisplay = true

    beaconManager.stopMonitoringForAllRegions()

    // Start Ranging
    beaconManager.startMonitoring(for: region)
    beaconManager.startRangingBeacons(in: region)
    beaconManager.requestState(for: region)

    // Do any additional setup after loading the view, typically from a nib.
}

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


}
extension ViewController: KTKBeaconManagerDelegate {

func beaconManager(_ manager: KTKBeaconManager, didDetermineState state: CLRegionState, for region: KTKBeaconRegion) {
    print("Did determine state \"\(state.rawValue)\" for region: \(region)")
    statusLabel.text = "Did determine state \"\(state.rawValue)\" for region: \(region)"
}

func beaconManager(_ manager: KTKBeaconManager, didChangeLocationAuthorizationStatus status: CLAuthorizationStatus) {
    print("Did change location authorization status to: \(status.rawValue)")
    statusLabel.text = "Did change location authorization status to: \(status.rawValue)"
    if status == .authorizedAlways{

        // Region
        let proximityUUID = NSUUID(uuidString: "f7826da6-4fa2-4e98-8024-bc5b71e0893e")
        let region = KTKBeaconRegion(proximityUUID: proximityUUID! as UUID, identifier: "com.weenggs.KontaktDemo")

        // Region Properties
        region.notifyEntryStateOnDisplay = true

        beaconManager.startMonitoring(for: region)
        beaconManager.startRangingBeacons(in: region)
        beaconManager.requestState(for: region)
    }
}

func beaconManager(_ manager: KTKBeaconManager, monitoringDidFailFor region: KTKBeaconRegion?, withError error: Error?) {
    print("Monitoring did fail for region: \(region)")
    print("Error: \(error)")
    statusLabel.text = "Monitoring did fail for region: \(region)"
}

func beaconManager(_ manager: KTKBeaconManager, didStartMonitoringFor region: KTKBeaconRegion) {
    print("Did start monitoring for region: \(region)")
    statusLabel.text = "Did start monitoring for region: \(region)"
}

func beaconManager(_ manager: KTKBeaconManager, didEnter region: KTKBeaconRegion) {
    print("Did enter region: \(region)")
    statusLabel.text = "Did enter region: \(region)"
}

func beaconManager(_ manager: KTKBeaconManager, didExitRegion region: KTKBeaconRegion) {
    print("Did exit region \(region)")
    statusLabel.text = "Did exit region \(region)"
}

func beaconManager(_ manager: KTKBeaconManager, didRangeBeacons beacons: [CLBeacon], in region: KTKBeaconRegion) {
    print("Did ranged \"\(beacons.count)\" beacons inside region: \(region)")
    statusLabel.text = "Did ranged \"\(beacons.count)\" beacons inside region: \(region)"
    if let closestBeacon = beacons.sorted(by: { $0.0.accuracy < $0.1.accuracy }).first , closestBeacon.accuracy > 0 {
        print("Closest Beacon is M: \(closestBeacon.major), m: \(closestBeacon.minor) ~ \(closestBeacon.accuracy) meters away.")
        statusLabel.text = "\(statusLabel.text) Closest Beacon is M: \(closestBeacon.major), m: \(closestBeacon.minor) ~ \(closestBeacon.accuracy) meters away."
    }
}
}

【问题讨论】:

    标签: ios swift bluetooth-lowenergy beacon kontakt.io


    【解决方案1】:

    我认为常见的问题是您忘记设置

    Kontakt.setAPIKey("yourSuperSecretAPIKey")

    以及这两个权限之一

     NSLocationWhenInUseUsageDescription
     NSLocationAlwaysUsageDescription
    

    如果不是这样,那么您的信标的电池可能会耗尽。

    【讨论】:

      【解决方案2】:

      最后我能够使用 CBPeripheral 类检测信标,并根据接收到的带有实例 ID 的 UUID 进行唯一识别(最后 12 个字符是唯一的实例 ID)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多