Как все делают с iBeacons на iOS 10.0.2? Надеюсь, лучше меня! :-)iBeacons Broken in iOS 10.0.2?
Обновление: Оборудование, используемое для тестирования, было двумя iPhone. IPhone 5S (A1533) и iPhone 7 (A1778)
Быстрая версия 2.x приведенного ниже кода может быть использована на iPhone для рекламы простого iBeacon на iOS версии 9.x; сегодня тот же самый код, обновленный для быстрой версии 3 и работающий на iOS 10.0.2, вообще не появляется.
Я сократил код до очень простого вспомогательного класса и viewcontroller, который, как я думаю, должен адекватно продемонстрировать проблему. Обратите внимание, что в раскадровке есть только одна кнопка, связанная с запуском/остановкой рекламы iBeacon.
Я запустил приложение на iPhone 5 и iPhone 7 с iOS 10.0.2. Чтобы протестировать, я создал собственный сканер (обнюхивание для конкретного UUID близости), а когда это не сработало, я попробовал более общий iBeacon для обнаружения приложений, таких как Estimote и LightBlue.
Вздох - ничто не видит iBeacon.
Мысли? На форумах разработчиков в Apple упоминаются проблемы, о которых сообщается в iBeacons в 10.x, но ничто так просто, как это, насколько я могу судить.
Благодаря кучу ...
- - - iBeaconConfiguration.swift - - - - - -
import Foundation
class iBeaconConfiguration
{
static let uuid = UUID(uuidString: "F34A1A1F-500F-48FB-AFAA-9584D641D7B1")!
private init() {}
}
- - - ViewController.swift - - - - - -
import UIKit
import CoreLocation
import CoreBluetooth
class ViewController: UIViewController, CBPeripheralManagerDelegate
{
@IBOutlet weak var btnAction: UIButton!
let UUID: UUID = iBeaconConfiguration.uuid
var beaconRegion: CLBeaconRegion!
var dataDictionary = NSDictionary()
var bluetoothPeripheralManager: CBPeripheralManager!
var isBroadcasting = false
override func viewDidLoad() {
super.viewDidLoad()
bluetoothPeripheralManager = CBPeripheralManager(delegate: self, queue: nil, options: nil)
}
@IBAction func switchBroadcastingState(_ sender: AnyObject)
{
if !isBroadcasting {
if bluetoothPeripheralManager.state == CBManagerState.poweredOn {
let major: CLBeaconMajorValue = 123
let minor: CLBeaconMinorValue = 456
beaconRegion = CLBeaconRegion(proximityUUID: UUID, major: major, minor: minor, identifier: "com.rdz.bcast")
dataDictionary = beaconRegion.peripheralData(withMeasuredPower: nil)
bluetoothPeripheralManager.startAdvertising(dataDictionary as? [String : Any])
btnAction.setTitle("Stop", for: UIControlState.normal)
isBroadcasting = true
}
}
else {
bluetoothPeripheralManager.stopAdvertising()
btnAction.setTitle("Start", for: UIControlState.normal)
isBroadcasting = false
}
}
func peripheralManagerDidStartAdvertising(_ peripheral: CBPeripheralManager, error: Error?) {
print ("peripheralManagerDidStartAdvertising()")
if error != nil
{
print(error)
}
}
func peripheralManager(_ peripheral: CBPeripheralManager, didReceiveRead request: CBATTRequest) {
print ("peripheralManager(...didReceiveRead)")
}
func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) {
var statusMessage = ""
switch peripheral.state {
case CBManagerState.poweredOn:
statusMessage = "Bluetooth Status: Turned On"
case CBManagerState.poweredOff:
if isBroadcasting {
switchBroadcastingState(self)
}
statusMessage = "Bluetooth Status: Turned Off"
case CBManagerState.resetting:
statusMessage = "Bluetooth Status: Resetting"
case CBManagerState.unauthorized:
statusMessage = "Bluetooth Status: Not Authorized"
case CBManagerState.unsupported:
statusMessage = "Bluetooth Status: Not Supported"
default:
statusMessage = "Bluetooth Status: Unknown"
}
print("Bluetooth Status: \(statusMessage)")
}
}
- - - END - - - - -
(Извиняюсь за ошибки форматирования кода.)
Привет, Дэвид, я ценю быстрый ответ и нижнюю строку: вы решили мою проблему. –
Запуск Locate App на двух устройствах: A1533 и A1778. A1533 отсканировал и нашел рекламный маячок A1778, без проблем. Переключение активности, A1778 не смог найти A1533 во время рекламы. (Я пытался рекламировать различные маяки, перезапускать приложения, перезагружать bluetooth и т. Д.). Перезагрузка обоих телефонов, похоже, очистила все проблемы, которые я испытывал. Еще раз спасибо! Майкл –
Рад, что перезагрузка решила проблему, но это всегда разочаровывает, когда это исправление. Любая идея о том, почему bluetooth, возможно, был в плохом состоянии перед перезагрузкой? Что-нибудь подозрительное происходит между предыдущей перезагрузкой и когда Bluetooth перестает работать? Возможно, это было сразу после обновления до iOS 10.0.2 или какого-то другого события, которое могло бы привести Bluetooth в плохое состояние? – davidgyoung