苹果是否要求您为 iBeacons 配备一些特殊芯片?
Does apple require you to have some special chip for iBeaons?
在玩 iBeacon 模拟器时,我注意到了这一点:
*Android 手机可以识别 iBeacon,无论模拟 iBeacon 的设备是什么(iOS 和 Android)
*iPhones只有模拟设备也是iPhone才能识别iBeacons。
这是为什么?是硬件问题吗?
iBeacon 不依赖于硬件或操作系统。您可以从 Android、iOS、MacOS、Linux、Windows 10 和许多嵌入式平台传输 iBeacon 数据包。
这张照片显示了来自 Android Nexus 5X 的传输和 iPhone 6 上的检测:
这里没有什么特别的技巧,但肯定有可能把事情搞砸,所以它不起作用。两个最常见的陷阱是:
发射器必须设置为使用 Apple Bluetooth LE 制造商代码 0x004c
发射器必须发送相同的 ProximityUUID(又名 ID1),iOS 接收器设置为使用配置的 CLBeaconRegion 进行检测。
上面的设置在 iOS 上使用了 BeaconScope app on Android (using the Android Beacon Library to transmit iBeacon) and the Locate 应用程序(使用 CoreLocation 检测 iBeacon)。
使用 AndroidBeaconLibrary,设置此发射器非常简单:
Beacon beacon = new Beacon.Builder()
.setId2(1) // Major for beacon
.setId3(1) // Minor for beacon
.setManufacturer(0x004C) // Apple
.setTxPower(-56) // Power in dB
.build();
BeaconParser beaconParser = new BeaconParser()
.setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24");
transmitter = new BeaconTransmitter(context, beaconParser);
transmitter.startAdvertising(beacon, new AdvertiseCallback() {
@Override
public void onStartFailure(int errorCode) {
Log.i(Settings.DEBUG, "Advertisement start failed with code: " + errorCode);
}
});
在玩 iBeacon 模拟器时,我注意到了这一点:
*Android 手机可以识别 iBeacon,无论模拟 iBeacon 的设备是什么(iOS 和 Android)
*iPhones只有模拟设备也是iPhone才能识别iBeacons。
这是为什么?是硬件问题吗?
iBeacon 不依赖于硬件或操作系统。您可以从 Android、iOS、MacOS、Linux、Windows 10 和许多嵌入式平台传输 iBeacon 数据包。
这张照片显示了来自 Android Nexus 5X 的传输和 iPhone 6 上的检测:
这里没有什么特别的技巧,但肯定有可能把事情搞砸,所以它不起作用。两个最常见的陷阱是:
发射器必须设置为使用 Apple Bluetooth LE 制造商代码 0x004c
发射器必须发送相同的 ProximityUUID(又名 ID1),iOS 接收器设置为使用配置的 CLBeaconRegion 进行检测。
上面的设置在 iOS 上使用了 BeaconScope app on Android (using the Android Beacon Library to transmit iBeacon) and the Locate 应用程序(使用 CoreLocation 检测 iBeacon)。
使用 AndroidBeaconLibrary,设置此发射器非常简单:
Beacon beacon = new Beacon.Builder()
.setId2(1) // Major for beacon
.setId3(1) // Minor for beacon
.setManufacturer(0x004C) // Apple
.setTxPower(-56) // Power in dB
.build();
BeaconParser beaconParser = new BeaconParser()
.setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24");
transmitter = new BeaconTransmitter(context, beaconParser);
transmitter.startAdvertising(beacon, new AdvertiseCallback() {
@Override
public void onStartFailure(int errorCode) {
Log.i(Settings.DEBUG, "Advertisement start failed with code: " + errorCode);
}
});