macos - programming - how to setup beacon
Convierte Macbook en iBeacon (7)
Sé que puedo convertir dispositivos iOS en iBeacons ( ¿Puede un dispositivo iOS7 actuar como iBeacon? ). Lamentablemente, solo tengo un dispositivo y mis balizas aún no han llegado. Así que me preguntaba cómo podría convertir mi MacBook Air (mediados de 2011, admite Bluetooth 4.0) en una iBeacon para fines de prueba. ¿Hay alguna aplicación preparada disponible como AirLocate para iOS? ¡Gracias por adelantado!
Esto es posible con OSX Mavericks, pero no en Mountain Lion y versiones anteriores del sistema operativo. Mi empresa, Radius Networks, tiene una aplicación MacBeacon que hace esto en Mavericks.
En OSX Mountain Lion, a diferencia de iOS 6+, no hay compatibilidad incorporada para el modo periférico Bluetooth que necesita para publicitar como un iBeacon. Esto significa rodar su propio código Bluetooth de bajo nivel, que no es fácil decirlo.
Pero hay una solución para sistemas operativos más antiguos. Conecté un dongle Bluetooth externo en mi Mac con una VirtualBox VM con Linux y logré lo que estaba buscando. Mi empresa puso esta máquina virtual a disposición para su descarga gratuita aquí: http://developer.radiusnetworks.com/ibeacon/
Intenté todas estas soluciones, pero no pude lograr que AirLocate captara una señal hasta que cumplí esto: https://github.com/lgaches/BeaconEmitter y comencé a transmitir con este UUID: E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 y con un identificador de: hola
Encontré esta publicación sobre AirLocate también útil: ¿AirLocate solo busca UUID particulares?
La única utilidad para convertir una Mac en una iBeacon que funcionó para mí bajo El Capitán (OS X 10.11) fue iBeaconSwiftOSX . También se informa que trabaja bajo Yosemite (OS X 10.10). La utilidad de escaneo de iOS (gratuita) utilizada fue iBeacon Loc de Eurelis.
FYI: en iOS, un escáner DEBE buscar una combinación ESPECÍFICA de UUID y mayor / menor anunciada por un iBeacon. Asegúrese de que la configuración del escáner y la configuración de iBeacon coincidan.
La mejor solución que he encontrado hasta ahora es esta de Tim Duckett: https://github.com/timd/MactsAsBeacon
Simplemente tome el proyecto, configure un UUID, mayor y menor valor y haga clic en Difusión. Realmente simple La solución se basa en esta publicación de blog: http://www.blendedcocoa.com/blog/2013/11/02/mavericks-as-an-ibeacon/
Sí, es posible. Mira este proyecto de github https://github.com/nolim1t/iBeaconAdvertisement
Si desea guardar los 9.99 € eche un vistazo a la última versión del cliente de código abierto con mttrb. Agregué más GUI para que pueda ajustar todos los campos. https://github.com/deadfalkon/BeaconOSX/releases incluso tiene una descarga binaria.
Nota: Esto solo funciona en Mavericks, NO funciona en Yosemite.
Mavericks no tiene el soporte iBeacon en Core Location que se agregó a iOS 7. Sin embargo, Mavericks ahora tiene la capacidad de actuar como un dispositivo periférico BLE. Dado que un iBeacon es básicamente un periférico, debe ser (y de hecho es) posible utilizar Mavericks como un iBeacon.
Para crear un iBeacon en iOS, primero crea un objeto CLBeaconRegion
y luego usa el método peripheralDataWithMeasuredPower:
para obtener un NSDictionary
contenga los datos de publicidad necesarios para transmitir. Si toma los contenidos de este NSDictionary
desde un dispositivo iOS y lo usa en Mavericks, entonces obtiene un iBeacon.
Creé una clase para hacer esto más fácil y te permití generar el diccionario de datos de publicidad directamente en Mavericks. El código fuente está disponible en https://github.com/mttrb/BeaconOSX
La clase BLCBeaconAdvertisementData
toma los BLCBeaconAdvertisementData
proximityUUID
, major
, minor
y calibrado y crea un NSDictionary que se puede pasar al método startAdvertising:
de CBPeripheralManager
en Mavericks.
La clase BLCBeaconAdvertisementData
es bastante simple. El trabajo principal se realiza por el siguiente método:
- (NSDictionary *)beaconAdvertisement {
NSString *beaconKey = @"kCBAdvDataAppleBeaconKey";
unsigned char advertisementBytes[21] = {0};
[self.proximityUUID getUUIDBytes:(unsigned char *)&advertisementBytes];
advertisementBytes[16] = (unsigned char)(self.major >> 8);
advertisementBytes[17] = (unsigned char)(self.major & 255);
advertisementBytes[18] = (unsigned char)(self.minor >> 8);
advertisementBytes[19] = (unsigned char)(self.minor & 255);
advertisementBytes[20] = self.measuredPower;
NSMutableData *advertisement = [NSMutableData dataWithBytes:advertisementBytes length:21];
return [NSDictionary dictionaryWithObject:advertisement forKey:beaconKey];
}
Tengo una publicación de blog más detallada sobre esto en http://www.blendedcocoa.com/blog/2013/11/02/mavericks-as-an-ibeacon/