2016-10-13 18 views
2

我按照以下Kontakt SDK示例代码执行了信标搜索代码。但是我得到的信标数总是为0,而我的iPhone附近有11个信标。任何身体都可以帮助我吗?无法在我的iOS应用程序中检测到Kontakt.io信标

我已经在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." 
    } 
} 
} 

回答

0

我认为共同的问题是,你忘了设置

Kontakt.setAPIKey("yourSuperSecretAPIKey")

,要么这两个权限之一

NSLocationWhenInUseUsageDescription 
NSLocationAlwaysUsageDescription 

如果不是的话,那么您的信标电池可能被排出。

0

最后我能够检测使用CBPeripheral类信标和唯一标识基于与实例ID收到UUID(最后12个字符的实例id,这是唯一的)

相关问题