Требуется ли от Apple иметь какой-то специальный чип для iBeaons? - PullRequest
0 голосов
/ 26 октября 2018

Играя с симуляторами iBeacon, я заметил это:

* Телефоны Android могут распознавать iBeacons независимо от устройства, имитирующего iBeacons (iOS и Android)

* iPhone может распознавать iBeacons, только если имитирующим устройством является также iPhone.

Почему это? это аппаратная вещь?

1 Ответ

0 голосов
/ 27 октября 2018

Аппаратная или операционная система не зависит от iBeacon. Вы можете передать пакет iBeacon с Android, iOS, MacOS, Linux, Windows 10 и многих встроенных платформ.

Вот фотография, показывающая передачу с Android Nexus 5X и обнаружение на iPhone 6:

android transmitting ibeacon to ios

Здесь нет особого трюка, но, безусловно, можно все испортить, чтобы он не работал. Две наиболее распространенные ловушки:

  1. Передатчик должен быть настроен на использование кода производителя Apple Bluetooth LE 0x004c

  2. Передатчик должен отправлять тот же ProximityUUID (он же ID1), который приемник iOS настроен на обнаружение с использованием настроенного CLBeaconRegion.

Приведенная выше настройка использует приложение BeaconScope на Android (с использованием Android Beacon Library для передачи iBeacon) и приложение Locate (использование CoreLocation для обнаружения iBeacon ) на iOS.

Используя 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);
        }
    });
...