2013-06-21 17 views
6

Sto lavorando a un'applicazione per iPhone e Mac OS X, che consente di bloccare e sbloccare il Mac in prossimità. Significa che se la potenza del segnale è sotto una soglia determinata o se la connessione si perde, blocca il mac.CoreBluetooth - Pubblicità iPhone in modalità backgrund

Sto lavorando con il framework CoreBluetooth di Apple per BTLE, utilizzando l'iPhone come periferica e il Mac come centrale. Fin qui tutto bene. Anche i wokrs sono molto buoni ma quando invio l'app sullo sfondo dell'iPhone, la pubblicità sembra cambiare. L'iPhone pubblicizza ancora, ma senza il profilo del servizio e le caratteristiche che uso nell'app. Anche se questo non è un problema quando l'iPhone è ancora nel raggio d'azione del Mac, poiché è ancora connesso e le caratteristiche non sono usate nella centrale, diventa un problema dopo aver spostato l'iPhone fuori dalla portata. Come previsto, il Mac si blocca e inizia a scoprire di ricollegare l'iPhone e sbloccare se riuscito.

Ma in questa scoperta utilizzo il profilo di servizio specificato e le caratteristiche solo per ottenere dispositivi che eseguono la mia app e per identificare quello per lo sblocco.

Ho provato una soluzione scoprendo senza un profilo di servizio e identificando il dispositivo corretto tramite il suo UUID, che ho salvato, quando ho iniziato a utilizzare questo iPhone per il blocco e lo sblocco. Questa soluzione funziona anche in un piccolo ambito, perché quando spengo il Bluetooth sull'iPhone e lo riaccendo, ottiene un altro UUID. Questo è un vincolo con cui potrei convivere, ma cambia anche l'UUID dopo alcune ore e quindi lo sblocco non funziona.

Forse qualcuno ha già lavorato a un'app simile e sa come risolvere un problema simile? O conosci un valore statico che posso usare per identificare il dispositivo?

risposta

5

Quindi sembra, come al solito, Apple ha alcune cose strane e uniche in corso nel loro quadro. Quando fai pubblicità da un dispositivo iOS (come il tuo iPhone), ci sono due "aree di archiviazione" per gli annunci pubblicitari - una normale che può essere vista da qualsiasi dispositivo in fase di scansione e una "overflow" che può essere vista solo da Dispositivi iOS che eseguono specificamente la scansione per questo. Quando la tua app viene pubblicizzata in background, tutti gli UUID dei servizi che pubblicizzi entrano purtroppo in questa area di overflow, quindi sembra che solo altri dispositivi iOS possano vederlo, e non il tuo Mac. Dalle CBPeripheralManager docs:

qualsiasi servizio uuid (UUID) contenuti nel valore della chiave CBAdvertisementDataServiceUUIDsKey che non rientrano nel spazio assegnato vengono aggiunti ad una speciale area di “troppo pieno”; possono essere rilevati solo da un dispositivo iOS che li sta digitalizzando esplicitamente. Mentre l'app è in background, il nome locale non viene pubblicizzato e tutti gli UUID di servizio vengono posizionati nell'area di overflow.

Problemi correlati