2014-01-29 5 views
5

Beim Testen mit einer einfachen App zum Testen der Beacon-Region-Überwachung werden je nach Gerät sehr unterschiedliche Ergebnisse angezeigt (nicht das Gerätemodell, das spezifische Gerät). Das Problem ist, dass ich nicht den CLRegionStateInside Zustand auf der Region nach requestStateForRegion erhalten und didEnterRegion nicht auf diesem Gerät überhaupt aufgerufen wird. startRangingBeaconsinRegion: Funktioniert gut, aber um Energie und Verarbeitung zu sparen, wird empfohlen, nur zu starten, wenn die didEnterRegion: -Methode aufgerufen wird. Ich habe es auf 6 Geräten getestet und es funktioniert auf der Hälfte (iPhone 5) und funktioniert nicht auf einem iPhone 5, einem 5S und einem 4S.IBeacon-Bereichsüberwachung funktioniert nicht einheitlich über Geräte hinweg

Die Beacons, die ich benutze, sind die kontakt.io Beacons.

Dies ist der Code zur Einrichtung der Region

Überwachung
self.locationManager = [[CLLocationManager alloc] init]; 

    self.locationManager.delegate = self; 



    NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:BEACON_UUID]; 

    CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid 

                   identifier:@"regionIdentifier"]; 

    region.notifyOnEntry = YES; 

    region.notifyOnExit = YES; 

    region.notifyEntryStateOnDisplay = YES; 



    [self.locationManager startMonitoringForRegion:region]; 

    [self.locationManager requestStateForRegion:region]; 

    //If I enable this line, ranging starts on all devices 

// [self.locationManager startRangingBeaconsInRegion:region]; 
+0

Ich glaube, Sie nennen sollte [_locationManager startMonitoringForRegion: Region]; nicht startRangingBeaconsInRegion :. – Greg

+0

Ich rufe diese Methode, wie Sie in meinem Beitrag sehen können. Die Lösung ist, dass Benutzer die Hintergrundaktualisierung aktivieren, wie ich in meiner Antwort – TimPelgrim

Antwort

4

ich das Problem gefunden. Um iBeacons so zu verwenden, wie es in den Dokumenten beschrieben ist, müssen Benutzer die Hintergrundaktualisierung in den Einstellungen aktiviert haben. für diese Einstellung zu überprüfen, ich folgende Schnipsel verwenden:

if ([[UIApplication sharedApplication] backgroundRefreshStatus] == UIBackgroundRefreshStatusAvailable) { 

    NSLog(@"Background updates are available for the app."); 
}else if([[UIApplication sharedApplication] backgroundRefreshStatus] == UIBackgroundRefreshStatusDenied) 
{ 
    NSLog(@"The user explicitly disabled background behavior for this app or for the whole system."); 
}else if([[UIApplication sharedApplication] backgroundRefreshStatus] == UIBackgroundRefreshStatusRestricted) 
{ 
    NSLog(@"Background updates are unavailable and the user cannot enable them again. For example, this status can occur when parental controls are in effect for the current user."); 
} 

in dieser Antwort gefunden: Detecting user settings for Background App Refresh in iOS 7

4

Überwachung aus verschiedenen Gründen möglicherweise nicht. Eine sein, dass App Hintergrund aktualisieren ist deaktiviert, um Ihre Batterie zu speichern. Ein anderer versäumt es sicherzustellen, dass Sie die richtigen App-Funktionen eingerichtet haben.

Background Modes

Wenn dies nicht, dass es funktioniert ein großer Beitrag ist, kann man lesen, dass Details alle Elemente zu beheben.

iBeacon StartMonitoringForRegion Doesn’t Work

+0

Nice Link, der Hintergrund-Refresh-Modus-Test wies mich auf die richtige Richtung – dulgan

Verwandte Themen