2013-12-13 9 views
5

Sono un po 'confuso sull'importanza di un UUID CLBeaconRegion e dell'identificatore di stringa. Se la mia CLBeaconRegion ha già un ID univoco, qual è il punto di forzare l'uso di un identificatore di stringa aggiuntivo non univoco? È puramente "cosmetico"?iBeacon - Differenza tra proximityUUID e region.identifier

Poiché gli utenti non saranno in grado di scansionare e connettersi alle regioni beacon come per esempio con WiFi (e SSID) e poiché l'app ricevente ha bisogno di CLBeaconRegion precodificata e predefinita per entrare e rientrare per i beacon in una regione, qual è il vero utilizzo dell'identificatore?

Ho visto esempi in cui le persone lo utilizzano per inserire cose come com.companyname.app, che ho pensato avesse più senso, nel caso in cui l'identificatore fosse usato per abbinare il certificato di firma dell'app (ma sembra non !). Altri lo hanno usato per inserire nomi come "Esempio di beacon", "Apple", "Cucina".

In altre parole, non capisco perché il ricevitore debba anche specificare un identificativo region.identifier poiché non sa a quale nome dell'emittente si connetterà. Indipendentemente dal nome dell'emittente, il ricevente otterrà sempre l'identificatore definito su un lato.

risposta

15

L'identificativo stringa CLBeaconRegion non ha nulla a che fare con gli ID nelle trasmissioni iBeacon. È semplicemente una chiave di ricerca utilizzata da CoreLocationManager per tenere traccia di più regioni.

È possibile rendere il suo valore come si desidera, ma le persone utilizzano spesso un qualificatore di tipo package perché è un modo semplice per creare una stringa univoca specifica per l'app.

Lo scopo principale dell'ID viene se si desidera modificare o interrompere la portata/monitoraggio della propria regione. Usando lo stesso id, CoreLocation sa esattamente a quale regione ti stai riferendo.

Nell'esempio seguente, costruiamo region1, quindi avviamo il monitoraggio per esso. Quindi modifichiamo l'identificatore minore che stiamo monitorando in region2 e iniziamo a monitorarlo. Poiché lo stesso identificatore di stringa viene utilizzato in region1 e region2, CoreLocation sa che sostituisce la prima regione monitorata con la seconda.

CLBeaconRegion *region1 = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6"] major: 1 minor: 1 identifier: @"my.made.up.unique.identifer]; 
[_locationManager startMonitoringForRegion:region1]; 
CLBeaconRegion *region2 = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6"] major: 1 minor: 2 identifier: @"my.made.up.unique.identifer]; 
[_locationManager startMonitoringForRegion:region2]; 

Questo è più comunemente usato per interrompere il monitoraggio di una regione. Come questo:

In questo secondo esempio, dove ci fermiamo monitoraggio regione, è davvero così identificatore di stringa all'interno dell'oggetto regione che è importante per ottenere CoreLocation per interrompere il monitoraggio quella regione.

+0

Grazie, David. Perfettamente risposto e capito ora. –