我一直试图在两个iOS设备之间设置'双向iBeacon通信'。我试图使用This Technique on PubNub,我想我已经设法启动发射器。但是,这两款手机都不匹配,如video所示。带有2个iPhone的双向iBeacon
由于我缺乏经验,本指南对我来说不是很清楚,请查看我的代码。我没有收到任何错误,并且两个iPhone都能正常工作,并且我可以看到Emitter正确传输,但它们不匹配。
对于这两个发射器和接收器,我已导入CoreLocation和CoreBluetooth框架和我在info.plist中通过点击添加“NSLocationAlwaysUsageDescription”和“NSLocationWhenInUseUsageDescription”的“+”(而不是从源代码编码的)。
发射器代码:
class ViewController: UIViewController, CBPeripheralManagerDelegate {
var major = 9
var minor = 6
let uuid = NSUUID(UUIDString: "0CF052C2-97CA-407C-84F8-B62AAC4E9020")
var peripheralManager = CBPeripheralManager()
var advertisedData = NSDictionary()
}
override func viewDidLoad() {
super.viewDidLoad()
let region = CLBeaconRegion(proximityUUID: uuid, major: 9, minor: 6, identifier: "com.yourcampany.example")
self.advertisedData = region.peripheralDataWithMeasuredPower(nil)
self.peripheralManager = CBPeripheralManager(delegate: self, queue: nil, options: nil)
func peripheralManagerDidUpdateState(peripheral: CBPeripheralManager!) {
switch peripheral.state {
case CBPeripheralManagerState.PoweredOn:
self.peripheralManager.startAdvertising(advertisedData)
self.powerON.text = "Power ON"
default:
break
}
}
接收器代码:
class ViewController: UIViewController, CLLocationManagerDelegate {
@IBOutlet var label: UILabel!
var region = CLBeaconRegion()
var locationManager = CLLocationManager()
let uuid = NSUUID(UUIDString: "0CF052C2-97CA-407C-84F8-B62AAC4E9020")
override func viewDidLoad() {
super.viewDidLoad()
region = CLBeaconRegion(proximityUUID: uuid, identifier: "com.yourcampany.example")
self.locationManager.delegate = self
self.locationManager.requestAlwaysAuthorization()
self.locationManager.startMonitoringForRegion(self.region)
}
func locationManager(manager: CLLocationManager!, didRangeBeacons beacons: NSArray!, inRegion region: CLBeaconRegion!) {
var beacon = beacons.lastObject as CLBeacon
switch beacon.proximity {
case CLProximity.Immediate:
self.label.text = "Immediate"
case CLProximity.Near:
self.label.text = "Near"
default:
self.label.text = "AAA"
}
}
我Main.storyboard标签不设置任何一个值 “立竿见影” 的,“近“或”AAA“。
另外,如果我想传输一个字符串(由5-6个字符组成),最合乎逻辑的方法是什么。我已经读过不可能发送大量数据,但是如何处理一些字符串? [也许使用CentralManager和PeripheralManager]你需要确保做
你得到提示接收器上的位置,使用情况如何?如果没有,您可能没有正确设置权限。 – davidgyoung 2015-04-04 21:26:41
你似乎没有调用'startRangingBeaconsInRegion:' – Paulw11 2015-04-04 21:54:37
@davidyoung:通过说出提示,你的意思是控制台?我没有得到任何提示在控制台接收器(而我在控制台的发射器)。 此外,我非常确定发射器工作正常,因为当蓝牙关闭时,我有一个文本标签,说加载,但是当我打开蓝牙,它说“开机”。 @ Paulw11:我应该在哪里放置'startRangingBeaconsInRegion:'?我很困扰。 – senty 2015-04-04 21:58:18