Istnieje wiele nieporozumień dotyczących ograniczeń, które są stosowane przez iOS w aplikacjach, które chcą skanować sygnały BLE \ urządzenia peryferyjne. Po przeczytaniu kilku blogów i odpowiedzi związanych z przepełnieniem stosu, chcę sprawdzić, czy poprawnie rozumiem wszystkie problemy. Proszę mnie poprawić, jeśli coś jest źle zrozumiane lub pominięte. Odnoszę się tylko do systemu iOS 7 lub nowszego i koncentruję się na wykrywaniu, a nie łączeniu (czy można połączyć się z CLBeacon przy użyciu interfejsu API do monitorowania iBeacon &?).Wykrywanie radiolatarni za pomocą iBeacon Monitoring i Ranging vs CoreBluetooth scanForPeripheralsWithServices
Opcje beaconów są jasne - użyj peryferiów BLE ogólnego przeznaczenia lub użyj peryferyjnego BLE, który reklamuje się w iBeacon format (Poza tym niestandardowe urządzenie peryferyjne może reklamować się w formacie iBeacon w pakiecie pomocniczym i innym format w pakiecie skanowania-odpowiedzi).
Ograniczenia ogólne
- iBeacon Począwszy pozwoli Ci wiedzieć, jakie sygnały nawigacyjne są wokół ciebie. Musisz podać ProximityUUID, który uprzednio anonsuje beacon (brak "ogólnego" skanowania).
didRangeBeacons
będzie wywoływana co sekundę z tablicą obiektów CLBeacon, które zostały ostatnio znalezione. Odległość od radiolatarni i jej dokładność są obliczane przez system iOS za pomocą jakiegoś poufnego algorytmu, który naprawdę znają tylko programiści Apple'a (algorytm jest oparty na wartościach rssi i bajcie kalibracji rssi-at-1-metrowej, którą reklamuje się sygnał nawigacyjny). Możesz także użyć Monitorowania iBeacon do wywoływania delegata za każdym razem, gdy wchodzisz lub wychodzisz z regionu - ponownie musisz podać ProximityUUID, którego szukasz (możesz również podać poważnego, małego). "Wyjście z regionu" definiuje się jako czas, w którym nie otrzymuje się żadnej reklamy, a zatem nie może być natychmiastowe. Liczba regionów, które mogą być monitorowane w tym samym czasie: na urządzeniu jest ograniczona do 20 - Oznacza to, że jeśli inne aplikacje monitorują \ o tej samej godzinie, Twoja aplikacja może nie być w stanie monitorować \ zasięgu (w prawo?). - CoreBluetooth - Możesz także wykryć inne struktury reklamowe w reklamie beacon. Jeśli beacon reklamuje się również w formacie iBeacon, nie można zobaczyć pól iBeacon (ProximityUUID, major, minor ...), mimo że są one wysyłane w standardowej strukturze reklamowej określonej przez producenta, którą można zobaczyć w innych przypadkach .
bieganie w Planie - Im mniej ograniczone stosowanie literami:
- iBeacon zakrojone i monitoring - bez dalszych ograniczeń.
- CoreBluetooth - przekazywanie
nil
wserviceUUIDs
zscanForPeripheralsWithServices
wyszuka wszystkie urządzenia peryferyjne. PrzekazywanieCBCentralManagerScanOptionAllowDuplicatesKey
jakoYES
w opcjach spowoduje, żedidDiscoverPeripheral
będzie wywoływane wiele razy dla tego samego peryferyjnego \ beacona (zakładam, że używając licznika, który wykryłeś, reklama nie została odebrana od jakiegoś czasu i założono, że użytkownik opuścił "region") .
działa w tle - Im bardziej ograniczony use-case:
- iBeacon Począwszy nie działa bezpośrednio. Monitorowanie iBeacon zadzwoni pod numer
didEnterRegion
i sprawi, że czas działania aplikacji wyniesie 6 sekund - w którym można rozpocząć wprowadzanie wartości (na przykład, aby wykryć poważny błąd o mniejszej wartości).Wykrywanie może nie być natychmiastowe, ponieważ iOS włącza i wyłącza skanowanie w celu zachowania mocy baterii. Jeśli wpiszesz region wielu sygnałów nawigacyjnych z tym samym ProximityUUID, a monitorujesz ten UUID bez określonego głównego i \ lub mniejszy,didEnterRegion
zostanie wywołany, gdy zaczniesz odbierać sygnał z pierwszego sygnału nawigacyjnego - jednak, jeśli nie zakończyłeś region pierwszego sygnału nawigacyjnego, a Ty również wszedłeś w rejon drugiego sygnału nawigacyjnego, aplikacja nie zostanie ponownie uruchomiona (didEnterRegion
nie będzie ponownie wywoływana), więc nie możesz zacząć od wykrycia drugiego dużego sygnału nawigacyjnego o numerze &. Aplikacja nie może po prostu wyskoczyć na pierwszy plan, ale może tworzyć lokalne powiadomienia i inne operacje w tle. - CoreBluetooth - zgodnie z Core Bluetooth Background Processing
scanForPeripheralsWithServices
może działać w tle przy użyciu, ale należy podać co najmniej jedną IDUsługi.didDiscoverPeripheral
otrzyma czas działania wynoszący 10 sekund. UżywanieCBCentralManagerScanOptionAllowDuplicatesKey
nie zadziała -didDiscoverPeripheral
zostanie wywołane raz dla każdego urządzenia peryferyjnego. Dlatego nie można wykryć "wyjścia" z regionu i "ponownego wejścia". Przypuszczam, że możesz użyć niestandardowego urządzenia peryferyjnego BLE, które zmienia jego adres MAC w celu przezwyciężenia tego problemu. Aplikacja nie może po prostu wyskoczyć na pierwszy plan, ale może tworzyć lokalne powiadomienia i inne operacje w tle. Wykrywanie może nie być natychmiastowe, ponieważ iOS włącza i wyłącza skanowanie w celu zachowania mocy baterii.
bieganie po aplikacji ginie
- Monitoring iBeacon - działa! Nawet jeśli użytkownik zabił aplikację lub urządzenie zostało ponownie uruchomione.
- CoreBluetooth - aplikacja zostanie obudzona, jeśli została zabita przez iOS (z powodu braku aktywności lub ograniczeń pamięci). Jeśli jednak użytkownik jawnie zabił aplikację, nie zostanie ona przebudzona (co sprawia, że pierwszy przypadek jest trudny do sprawdzenia). Nie wiem, co stanie się po ponownym uruchomieniu urządzenia ...
Czy ktoś ma więcej doświadczenia z tymi ograniczeniami? Czy może być używana jako lepsza alternatywa dla monitoringu iBeacon w niektórych przypadkach użycia?
Dzięki!
dzięki bardzo pomocnemu opisowi. –