2015-01-31 30 views
16

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'un serviceUUIDs'un serviceUUIDs numarasından geçirilmesi tüm çevre birimleri için taranacaktır. CBCentralManagerScanOptionAllowDuplicatesKey'u YES 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ızda didEnterRegion ç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 ProcessingscanForPeripheralsWithServices öğ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!

+0

çok yardımcı açıklaması sayesinde. –

cevap

2

Sizin açıklamanızda çoğunlukla haklısınız. Sadece iki açıklamalar: 20 bölge limiti aygıt başına değildir olan

  • , bu uygulamaya özgüdür. Diğer uygulamalar mobil cihazda ne yapıyor olursa olsun, uygulamanızın iOS tarafından 20 bölgeye kadar izlenmesine izin verilir. Bununla birlikte, donanım desteğiyle arka planda kaç bölgenin izlenebileceğine cihaz özgü donanım sınırları vardır. Bu sınırlar belgesizdir. Belgelenmemiş bu sınırları aşarsanız, muhtemelen arka planda tespit edilen işaretlere çok daha uzun sürebilir. (Bununla birlikte, dediğin her ne kadar algılamaların geldiği konusunda OS garantisi yoktur.)

  • CLBeacon İzleme ve Değişen API'leri kullanarak bağlanamazsınız. Bu API'ler, yalnızca bağlantısız olan BLE reklam paketleriyle çalışır.

Evet, alternatif olarak scanForPeripheralsWithServices kullanmak mümkündür. Bu, özel bir sistemi uygulamak için Gimbal fenerlerinin yaptığı şeydir. Ancak, arka plan algılama süresi ve güvenilirlik açısından gerçek dezavantajlar vardır.

+0

Teşekkürler, Gimbal işaretlerine bakacağım.Kullanıcının uygulamayı açık bir şekilde öldürmesi veya cihazı yeniden başlatması durumunun dışında başka dezavantajlar olup olmadığını biliyor musunuz? Kullanıcı uygulamayı arka planda uzun süre bıraksa bile algılanabilecek bir işaret oluşturmaya çalışıyorum. – Oren

+0

... ve 4 byte büyük + minörden daha fazla bilgi. – Oren

+0

@davidyoung ScanForPeripheralsWithServices'ı alternatif olarak kullanmanın dezavantajları hakkında biraz daha fazla bilgi verebilir misiniz? Onlar neler? (arka planda uygulamayı başlatmanın zorluğunun yanı sıra) – fspirit

İlgili konular