Рекламируйте в формате CoreBluetooth с помощью библиотеки AltBeacon - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь достичь функциональности межсетевой рекламы и сканирования между Android и ios с помощью BLE. Мне нужно понять, что мне нужно делать для рекламы в CoreBluetooth с устройства Android. Я использую библиотеку AltBeacon для рекламы в формате iBeacon, которая отлично работает, но ограничения ios невозможности сканировать только ограниченное количество маяков на iBeacon вынудили меня перейти на структуру CoreBluetooth.

Вот пример кода, который я использую для рекламы в формате iBeacon:

BluetoothManager bluetoothManager =
            (BluetoothManager) applicationContext.getSystemService(Context.BLUETOOTH_SERVICE);
    if (bluetoothManager != null) {
        BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter();
        BluetoothLeAdvertiser mBluetoothLeAdvertiser = mBluetoothAdapter.getBluetoothLeAdvertiser();
        if (mBluetoothLeAdvertiser != null) {
            beacon = new Beacon.Builder()
                    .setId1(userId)
                    .setId2("1")
                    .setId3("1")
                    .setManufacturer(0x004C)
                    .setTxPower(-75)
                    .setDataFields(Arrays.asList(new Long[]{0l}))
                    .build();
            beaconParser = new BeaconParser()
                    .setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24");
            beaconTransmitter = new BeaconTransmitter(InventaSdk.getContext(), beaconParser);
            beaconTransmitter.setBeacon(beacon);
        }
    }

1 Ответ

1 голос
/ 17 июня 2020

CoreBluetooth - это не формат. Это набор API для iOS. Используя CoreBluetooth, вы можете обнаруживать различные форматы маяков с ограничениями:

  • Формат AltBeacon может быть обнаружен только с приложением iOS на переднем плане
  • Форматы Eddystone могут быть обнаружены в передний план и фон, но медленнее обнаруживается в фоновом режиме, чем iBeacon.
  • Формат iBeacon не может быть обнаружен CoreBluetooth. Для этого вы должны использовать CoreLocation.

Для рекламы в AltBeacon (обнаруживаемой ядром Bluetooth) используйте этот код:

Beacon beacon = new Beacon.Builder()
        .setId1("2f234454-cf6d-4a0f-adf2-f4911ba9ffa6")
        .setId2("1")
        .setId3("2")
        .setManufacturer(0x0118)
        .setTxPower(-59)
        .setDataFields(Arrays.asList(new Long[] {0l}))
        .build();
BeaconParser beaconParser = new BeaconParser()
        .setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25");
BeaconTransmitter beaconTransmitter = new BeaconTransmitter(getApplicationContext(), beaconParser);
beaconTransmitter.startAdvertising(beacon);

Парсить маяки с CoreBlutooth сложно. Вероятно, вы захотите использовать для этого инструмент, например iOS Beacon Tools .

Также стоит добавить, что iOS не может рекламировать форматы AltBeacon или Eddystone. Он может рекламировать только сервисные UUID iBeacon и GATT.

...