2016-10-13 17 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,這是唯一的)

相關問題