首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在我的iOS应用程序中检测到Kontakt.io信标

无法在我的iOS应用程序中检测到Kontakt.io信标
EN

Stack Overflow用户
提问于 2016-10-13 18:06:55
回答 2查看 536关注 0票数 2

我做了信标搜索代码,根据Kontakt示例代码,如下所示。但我得到的信标计数始终为0,而我的iPhone附近有11个信标。有人能帮我解决这个问题吗?

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

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

代码语言:javascript
复制
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."
    }
}
}
EN

回答 2

Stack Overflow用户

发布于 2016-10-20 14:13:27

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

Kontakt.setAPIKey("yourSuperSecretAPIKey")

这两个权限中的任何一个

代码语言:javascript
复制
 NSLocationWhenInUseUsageDescription
 NSLocationAlwaysUsageDescription

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

票数 1
EN

Stack Overflow用户

发布于 2016-10-21 23:34:09

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40018054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档