2014-01-20 5 views
6

Ich habe ein paar Beacons von Roximity und von dem, was ich gesammelt habe, haben alle Roximity Beacons die gleiche UUID. Ich weiß, dass ich die Haupt- und Nebenwerte mit [locationManager: didRangeBeacons: inRegion:] bekommen kann, aber wenn ich [locationManager didEnterRegion] eine Push-Benachrichtigung senden, und mein Benutzer geht durch eine andere Roximity Beacon, die mit jemand anderen App verbunden ist, wie kann ich dies in [locationManager didEnterRegion] feststellen?Kann [LocationManager didEnterRegion] Ein Beacons Major & Minor?

Antwort

12

Sie haben grundsätzlich zwei Möglichkeiten.

  1. Definieren Sie die Regionen, die Sie überwachen, so dass sie Ihre spezifischen Haupt- und Nebennummern enthalten. Die wichtigste Einschränkung ist, dass iOS können Sie nur 20 Regionen gleichzeitig überwachen, so dass Sie nur das für 20 verschiedene iBeacons tun können:

    CLBeaconRegion *region1 = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"8deefbb9-f738-4297-8040-96668bb44281"] major:1201 minor:3211 identifier:@"beacon1"];  
    [_locationManager startRangingBeaconsInRegion:region1];  
    CLBeaconRegion *region1 = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"8deefbb9-f738-4297-8040-96668bb44281"] major:1798 minor:2122 identifier:@"beacon2"];  
    [_locationManager startRangingBeaconsInRegion:region2]; 
    ... 
    
  2. eine Region nur auf dem UUID basiert überwachen, sondern auch auf der gleichen Region haben Ranging gleichzeitig. Sie erhalten weitreichende Rückrufe für jedes spezifische iBeacon, das Sie sehen. (Auch im Hintergrund wird dies nach Eingabe der Region für etwa 5 Sekunden angezeigt.) Im Ranging-Callback überprüfen Sie die Haupt-/Nebennummern der angezeigten Beacons und vergleichen sie mit einer Liste der Ihnen gehörenden Beacons. Nur wenn Sie eine Übereinstimmung sehen, führen Sie eine bestimmte Aktion aus. Die Aktualisierung dieser Liste in Ihrer App gestaltet sich möglicherweise schwierig, wenn Sie weiterhin Beacons hinzufügen. Daher empfiehlt es sich, einen Webdienst wie ProximityKit zu verwenden, mit dem Sie Ihre Liste der iBeacon-IDs in der Cloud speichern können.

    -(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region { 
        for (CLBeacon *beacon in beacons) { 
        if ([self isMyBeaconWithMajor: beacon.major minor: beacon.minor]) { 
         // Yes, this is my beacon! Do something special here 
        } 
        } 
    } 
    
    -(BOOL)isMyBeaconWithMajor: (NSNumber *)major minor: (NSNumber *)minor { 
        // TODO: write code here that returns YES if the major and minor belong to you 
    } 
    

Eine weitere letzte Möglichkeit (zugegebenermaßen etwas außerhalb, was Sie fordern) ist Baken mit einem benutzerdefinierten UUID zu verwenden, die Dinge viel einfacher macht. Vollständige Offenlegung: Ich bin ein Angestellter eine Firma, die iBeacons mit anpassbaren Kennzeichnungen verkauft.

+0

Sie für die große Antwort danken. Ich habe gestern versucht, Option # 2 zu machen, aber es funktionierte nicht ganz. Werde einen anderen Blick darauf werfen. – Chris

+0

Würde die Verwendung einer eindeutigen UUID für jede Bake Sie nicht darauf beschränken, nur bis zu 20 gleichzeitig zu überwachen? – random

+0

Stimmt, aber das ist nicht ganz das, was ich vorschlage. Wenn Sie Ihre eigene eindeutige ProximityUUID definieren und dieselbe für alle Ihre eigenen iBeacons verwenden, werden Sie ziemlich sicher sein, dass, wenn Sie diese ProximityUUID sehen, die iBeacons zu Ihnen gehören. – davidgyoung

-1

Sie können die Haupt- und Neben mit diesem Code bestimmt:

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region{ 
    CLBeaconRegion *r = (CLBeaconRegion *) region; 
    NSLog(@"UUID %@, major %@, minor %@", r.proximityUUID, r.major, r.minor); 
    [self myNotification:@"You are in the region"]; 
    [self.locationManager startRangingBeaconsInRegion:r]; 
} 
+4

Diese Delegate-Methode gibt die überwachte Region zurück. Im Grunde sagt es "hey, diese Region, die du mir gesagt hast, um zu überwachen, wurde gerade eingegeben" es sagt dir nichts über das Leuchtfeuer, das diese Region annonciert. Der zurückgegebene Haupt- und Nebenwert wäre also Ihr eigener Wert, nicht der der Beacon-Region, der die Benachrichtigung ausgelöst hat. – joshblour

Verwandte Themen