iOS tarafından BLE işaretlerinin/çevre birimlerinin taranmasını isteyen uygulamalarda uygulanan kısıtlamalar konusunda bir çok karışıklık var. Çeşitli blogları ve Yığın Taşması yanıtlarını okuduktan sonra, tüm sorunları doğru şekilde anlayıp anlamadığımı görmek istiyorum. Yanlış anlaşılan veya cevapsız bir şey varsa lütfen beni düzeltin. Yalnızca iOS 7 ve üstü için başvuruda bulunur ve bağlantıya değil, algılamaya odaklanır (iBeacon Monitoring & Ranging API'sini kullanarak bir CLBeacon'a bağlanabilir misiniz?).iBeacon Monitoring ve Ranging ile işaretlerin algılanması CoreBluetooth scanForPeripheralsWithServices
İşaret lambaları için seçenekler açıktır - Genel amaçlı bir BLE çevre birimi kullanın ya da iBeacon format'da bildirilen bir BLE çevre birimi kullanın (Ayrıca, standart olmayan bir çevre birimi adv paketindeki iBeacon biçiminde reklam verebilir ve farklı olabilir. tarama yanıt paketindeki biçimi).
Genel Kısıtlamalar
- çevrenizdeki hangi fenerleri bildiririz değişen iBeacon. İşaretçilerin önceden duyurduğu ProximityUUID değerini belirtmelisiniz ("genel" tarama yok).
didRangeBeacons
, her saniye, son zamanlarda bulunan CLBeacon nesneleri dizisiyle çağrılacaktır. Işığın uzaklığı ve doğruluğu, yalnızca Apple'ın geliştiricilerinin bildiği bazı algoritmalar kullanılarak iOS tarafından hesaplanır (Algoritma, rssi değerlerine ve işaretin kullandığı rssi-at-1 metrelik kalibrasyon baytına dayanır). Bir bölgeye her girdiğinizde veya çıktığınızda bir temsilci çağırmak için iBeacon Monitoring'i de kullanabilirsiniz. Yeniden aradığınız ProximityUUID değerini belirtmeniz gerekir (ayrıca büyük bir & minör belirtebilirsiniz). "Bir bölgeden çıkma", herhangi bir reklam almama süresiyle tanımlanır ve bu nedenle hemen gerçekleşemez. cihazında eşzamanlı olarak izlenebilir olan bölgelerin sayısı 20 ile sınırlıdır. Bu, diğer uygulamaların aynı anda izleme yapması durumunda, uygulamanızın \ range (sağ?) Görüntüleyemeyeceği anlamına gelir. - CoreBluetooth - İşaretçinin reklamındaki diğer reklam yapılarını da tespit edebilirsiniz. Eğer işaretçi de iBeacon biçiminde reklam verirse, diğer durumlarda görebileceğiniz standart bir "Üreticiye Özel" reklam yapısı altında gönderilmelerine rağmen iBeacon alanlarını (ProximityUUID, major, minor ...) göremezsiniz. . daha az kısıtlı kullanım örneği - Önalan yılında Running
:
- iBeacon değişen ve İzleme - başka kısıtlamalar.
- CoreBluetooth -
serviceUUIDs
'unserviceUUIDs
'unserviceUUIDs
numarasından geçirilmesi tüm çevre birimleri için taranacaktır.CBCentralManagerScanOptionAllowDuplicatesKey
'uYES
olarak işaretlemek,didDiscoverPeripheral
'un aynı çevre birimi için birden çok kez çağrılmasını sağlar (bir zamanlayıcı kullanarak, bir süre için reklamın alınmadığını ve kullanıcının "bölge" konumundan çıktığını varsayalım) . doğrudan çalışmaz değişen- iBeacon: daha kısıtlı kullanım-case - Arka Plan yılında Running
. iBeacon Monitoring,
didEnterRegion
numaralı telefonu arayacak ve 6 saniyelik uygulama çalışma zamanı sunacaktır. Bu programda, Ranging'i başlatabilirsiniz (örneğin, ana & minörünü tespit etmek için).Algılayıcı, pil gücünü korumak için taramayı açıp kapattığından algılama hemen gerçekleşmeyebilir. Aynı ProximityUUID ile birden çok işaretçi bölgesi girerseniz ve bu UUID'yi belirli bir ana ve/veya önemsiz olmadan izlerseniz, ilk işaretten sinyal almaya başladığınızdadidEnterRegion
çağrılır - ancak, siz ilk işaret bölgesi ve ikinci bir işaretin bulunduğu bölgeye de girdiğinizde, uygulama tekrar uyandılamayacaktır (didEnterRegion
tekrar çağrılmayacaktır), böylece ikinci işaretçinin ana & minörünü algılamak için değişime başlayamazsınız. Uygulama sadece ön plana çıkamaz, ancak yerel bildirimler ve diğer arka plan işlemleri oluşturabilir. - CoreBluetooth - Core Bluetooth Background Processing
scanForPeripheralsWithServices
öğelerine göre arka planda çalışabilir, ancak en az bir serviceUUID belirtmeniz gerekir.didDiscoverPeripheral
, 10 saniyelik bir çalışma zamanı verilecektir.CBCentralManagerScanOptionAllowDuplicatesKey
kullanımı çalışmayacak -didDiscoverPeripheral
her çevre birimi için bir kez çağrılacak. Bu nedenle, bölgeden "çıkış" ve "yeniden giriş" tespit edemezsiniz. Bu sorunun üstesinden gelmek için MAC adresini değiştiren standart olmayan bir BLE çevre birimi kullanabileceğinizi varsayalım. Uygulama sadece ön plana çıkamaz, ancak yerel bildirimler ve diğer arka plan işlemleri oluşturabilir. Algılayıcı, pil gücünü korumak için taramayı açıp kapattığından algılama hemen gerçekleşmeyebilir. app sonra Running
- iBeacon İzleme öldürüldü - Çalışır! Kullanıcı uygulamayı öldürse veya cihaz yeniden başlatılmış olsa bile.
- CoreBluetooth - iOS tarafından öldürülmüşse uygulama (hareketsizlik veya bellek kısıtlamaları nedeniyle) uyandı. Ancak, kullanıcı uygulamayı açık bir şekilde öldürürse, uyandırılmayacaktır (ki bu da ilk vakanın test edilmesini zorlaştırır). Bir aygıtın yeniden başlatılmasından sonra ne olacağını bilmiyorum ...
Bu kısıtlamalar konusunda daha fazla deneyimi olan var mı? Bazı kullanım durumlarında scanForPeripheralsWithServices
iBeacon Monitoring'e daha iyi bir alternatif olarak kullanılabilir mi?
Teşekkürler!
çok yardımcı açıklaması sayesinde. –