custome ios app无法找到我的nrf信标

时间:2016-10-02 13:15:50

标签: ios swift ibeacon uuid locationmanager

我有一些使用这个uuid的信标:

0112233445566778899aabbccddeeff0 和major = 1但他们的未成年人是不同的。

这是显示这些数字的固件代码的一部分:

#define APP_MAJOR_VALUE                 0x01, 0x02                        #define APP_MINOR_VALUE                 0x03, 0x04                        
#define APP_BEACON_UUID                 0x01, 0x12, 0x23, 0x34, \
                                        0x45, 0x56, 0x67, 0x78, \
                                        0x89, 0x9a, 0xab, 0xbc, \
                                        0xcd, 0xde, 0xef, 0xf0  
    static uint8_t m_beacon_info[APP_BEACON_INFO_LENGTH] =                 
{
    APP_DEVICE_TYPE,                             
    APP_ADV_DATA_LENGTH,
    APP_BEACON_UUID,     
    APP_MAJOR_VALUE,    
    APP_MINOR_VALUE,    
    APP_MEASURED_RSSI                            
};

这是我的快速代码:

import UIKit
import CoreLocation
import CoreBluetooth

class HomeViewController: UIViewController, CLLocationManagerDelegate {

    var locationManager: CLLocationManager!
    var managerBLE: CBCentralManager?

    override func viewDidLoad() {
        super.viewDidLoad()

        managerBLE = CBCentralManager(delegate: nil, queue: nil, options: [CBCentralManagerOptionShowPowerAlertKey: true])

        locationManager = CLLocationManager()
        locationManager.delegate = self
        if CLLocationManager.authorizationStatus() == .authorizedWhenInUse {
            locationManager.requestWhenInUseAuthorization()
        }

        startScanning()
    }

    func startScanning() {
        let beaconRegion = CLBeaconRegion(proximityUUID: UUID(uuidString: "your UUID")!, major: 1, identifier: "MyBeacon")
        locationManager.startRangingBeacons(in: beaconRegion)
    }



    func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) {
        if beacons.count > 0 {            
            for beacon in beacons {
                updateDistance(beacon.proximity)
                if beacon.proximity == .near {
                    // run your code
                }else if beacon.proximity == .far {
                    // run your code
                }
            }
        } 
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

但是当我在我的iphone上安装我的应用程序时基本没有任何反应。我不知道我做错了什么?

3 个答案:

答案 0 :(得分:0)

您的代码需要调试。不幸的是,我们很难做到,因为我们没有灯塔。当您能够连接到信标时,尝试打印到日志。这是一个很好的调试起点。

确保你的灯塔有电池并且它们在范围内。

答案 1 :(得分:0)

一些问题:

  • 此行:CLLocationManager.authorizationStatus() == .authorizedWhenInUse应为CLLocationManager.authorizationStatus() != .authorizedWhenInUse

  • 您需要放置UUID,包括短划线代替字符串"您的UUID"在这一行CLBeaconRegion(proximityUUID: UUID(uuidString: "your UUID")!,

  • 根本不需要使用CBCentralManager

编辑:您还应该尝试使用现成的信标检测器应用程序,例如Locate(使用破折号输入您的UUID以配置它以检测您的信标)并验证它是否可以看到它。如果它没有看到它,它可能是您的硬件信标的问题,或者UUID可能不是您认为的。

答案 2 :(得分:0)

  

SWIFT 3:

  • 首先,您应该在.Plist文件中添加带有适当字符串的键/字符串NSLocationAlwaysUsageDescription

  • 在您的对象中添加CLLocationManagerDelegate

  • 在此示例中添加CLLocationManagerDelegate委托方法我将添加didRangeBeacons方法

func locationManager(_ manager: CLLocationManager, didRangeBeacons
beacons: [CLBeacon], in region: CLBeaconRegion) {
           print(beacons)   }
  • 创建并初始化locationManager

    let locationManager : CLLocationManager = CLLocationManager()

  • 创建CLBeaconRegion

    let beaconRegion : CLBeaconRegion = CLBeaconRegion(
        proximityUUID: NSUUID.init(uuidString:"****-****-****-****-******") as! UUID,
        identifier: "my beacon")
    
  • 将代理人添加到对象locationManager.delegate = self

  • 使用
  • 向用户请求位置授权
  

locationManager.requestAlwaysAuthorization()

现在让我们开始范围

  locationManager.startRangingBeacons(in: beaconRegion)

这将自动调用委托方法

   func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) {
        print(beacons)

    }