2013-10-08 2 views
14

비컨 (iOS 장치)을 테스트하는 동안 예상치 못한 동작을하는 수신기 비컨을 발견했습니다. locationManager : didEnterRegion 비컨이 영역에 들어갔더라도 메서드가 호출되지 않습니다. 하지만 locationManager : didRangeBeacons : inRegion :이 올바르게 호출되고 감지 된 비콘이 표시됩니다. 아무도 이런 경험이 없었습니까?locationManager : 비컨 탐지시 didEnterRegion이 호출되지 않음

+0

문제가 발생한 후 1,5 일. 문제는 비행기 모드 때문이었습니다. 비행기 모드가 켜져 있으면 iBeacon은 완벽하게 작동하지만 모니터링하지 않습니다. 나는 그 지역에 들어간 후에 아무런 오류가 없거나 무엇이든지 – bpolat

답변

7

테스트의 시작 조건에 대해 자세히 설명하지 않고 똑같은 것을 본다면 말하기 어렵습니다. 그러나 특정 사례에서 locationEnter : getRangeBeacons : inRegion이 locationManager : didEnterRegion을 호출하지 않고도 호출되는 것을 보았습니다.

동일한 지역에서 동시에 거리 측정 및 모니터링을 시작한 경우 iOS에서 모니터 된 지역의 이 이미이라고 생각하면 locationManager : didEnterRegion을 호출하지 못할 수 있습니다.

  1. 당신이 지역에없는 있는지 확인하십시오 :

    정말 뭔가 어긋 경우, 당신은 당신이 테스트 케이스를 설정해야합니다 테스트합니다.

  2. 하자 아이폰 OS는
  3. 시작
  4. 는 아이폰 OS가 몇 분
  5. 지역을 입력 동안 계속하자 그 지역을 모니터링 몇 분 동안 실행합니다. 당신을 locationManager를 호출받을 경우
  6. 참조 : didEnterRegion

를 여전히 위를 통과 한 후 전화를하지 않으면, 뭔가 분명히 잘못된 것입니다.

+0

내가 전송을 시작했다는 것은 수치 스럽다. 이 경우에는 .. 전화해야 겠어? 일단 내가 전송을 중지하고 다시 전송을 시작하여 지역에서 빠져 나왔다면, 예상대로 작동했다 (didEnterRegion이 호출 됨). –

+0

* 당신이이 지역에 들어온 것으로 생각하면 상관 없습니다. :) 중요한 것은 iOS LocationManager가 생각하는 것이며, 현재 상태는 보이지 않습니다. 이미 모니터링을 시작할 때 정의한 지역에 이미 있다고 생각하지 않도록 100 % 확신해야합니다. 이미 지역에 있다고 생각하면 콜백을받지 못할 수도 있습니다. 이것이 위의 절차를 제안한 이유입니다. 테스트가 시작될 때 iOS가 사용자를 지역 외부로 인식하도록합니다. – davidgyoung

+0

다른 방법으로 묻습니다 ...보고하는 문제가 반복적이라면 의견에서 말하는 내용과 원래 게시물에서 작동하지 않는 내용의 차이점은 무엇입니까? 휴대 전화를 재부팅 하시겠습니까? 오랜 시간을 기다리고 있니? 실패를 반복하려면 무엇이 필요합니까? – davidgyoung

31

방법이 다음과 같은 방식으로 구현되어 있는지 확인하십시오. viewDidLoad에서 는 최종 개시 모니터링 후

self.beaconRegion.notifyOnEntry=YES; 
self.beaconRegion.notifyOnExit=YES; 
self.beaconRegion.notifyEntryStateOnDisplay=YES; 
[self.locationManager startMonitoringForRegion:self.beaconRegion]; 

에서 moniotoring 시작 정의 된 영역에 대한 상태 요청

- (void) locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region 
{ 
    [self.locationManager requestStateForRegion:self.beaconRegion]; 
} 

상태가 결정된 후, 레인 징 시작 비컨

-(void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region 
{ 
    if (state == CLRegionStateInside) 
    { 
     //Start Ranging 
     [manager startRangingBeaconsInRegion:self.beaconRegion]; 
    } 
    else 
    { 
     //Stop Ranging here 
    } 
} 

및 구현 귀하의 필요에 따라 다음 방법 ...

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region 
{ 
    [email protected]"Entered region"; 
} 

-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region 
{ 
    [email protected]"Exited region"; 
} 

-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region 
{ 
    if(beacons.count>0) 
    {} 
} 

희망이 있으면 문제가 해결 될 것입니다.

+1

체크리스트가 도움이됩니다. –

+0

좋아해 주셔서 감사합니다 ... –

+0

놀라운 설명. 고맙습니다. – MeV

12
before starting coding in project , you must follow given setup guidlines --> 
1. in project info or info.plist --> 
     Custom IOS Target Properties --> 
        . add "Required background modes" 
        . in this add two items --> 
           ."App shares data using CoreBluetooth" 
           ."App registers for location updates" 
2. in project Capability --> 
     There is Background Modes 
        . check "Loaction update" 
        . check "Acts as a Bluetooth LE accessory" 
        . check "uses bluetooth LE accessories" 

(. 씨 Davidgyoung에 의해 주어진 지시 사항을 따르 않는 날 믿어, 그것은 확실히 작동합니다.)

+0

좋은 답변입니다. 나를 위해 일해주세요. –

+0

앱이 BLE 중앙 기기 인 경우 필요한 배경 모드에서 'CoreBluetooth를 사용하는 앱 통신'을 설정해야합니다. 앱이 BLE 주변 기기 인 경우 'CoreBluetooth를 사용하는 앱 공유 데이터'를 설정해야합니다. – mezulu

6

당신은 또한 당신이 지역을 모니터링하는 것을 인식 할 필요가 -없는 특정 비컨.

그래서 당신은 당신이 두 가지 상황에서만 통지를하지 얻을 것 같은 proximityUUID을 공유하는 3 개 비콘을 가지고 해당 지역은 (전공 및 부전공 값없이) 만 proximityUUID로 정의 된 경우 :

  1. 없음 비콘을에서 (didExitRegion:) 지역은 이 지역에서

  2. 하나 이상의 비콘 범위에 있었다 (didEnterRegion:)

    발견됩니다 범위와 첫번째 비콘/비콘에 있었다 그들은 모두 ~ 30 초 동안 시야 밖으로 갔다

+0

이 도움이되었습니다. 감사. –

관련 문제