2013-10-31 8 views
1

지역 모니터링을 다양한 범위의 효과로 사용하는 프로젝트가있었습니다. 대부분의 경우 효과적 이었지만 정확하지는 않았지만 곧 발견되지는 않습니다. 죽은 정확하고 괜찮습니다, 그냥 육체적으로 테스트하는 것은 어렵습니다. 그럼에도 불구하고 그들은 완전한 사용자 인터페이스 전체 홀을 하루 만에 끝내기를 원했습니다. 여기 내가 한 일이 있습니다.재사용 된 프로젝트 문제에 대한 iOS 지역 모니터링

이전 프로젝트를 복사하여 이름을 바꿨고 ID와 모두 번들로 바꿨으며 본질적으로 다른 프로젝트로 만드는 데 필요한 다른 곳을 생각해 보았습니다. 이전에 xib 파일을 사용하면서 스토리 보드를 만들었습니다. 그리고 기존의 xib 파일 대신 스토리 보드를 사용하도록 시작 절차를 변경했습니다. 모든 일은 멋장이였다. 새로운 인터페이스와 본질적으로 동일한 코드를 보유하십시오.

문제 ...

지역을 유발하지 ... 혹시, 위치 서비스를 내가 하나 또는하지의 반경 내에있어 경우에 저에게 위치 서비스를 사용으로 작업하지만, 경우에도 울타리 콜백 API는 결코 사라지지 않습니다. 그런 다음 여러 장치에서 테스트했습니다. 그리고 마지막으로 그들 중 하나가 방아쇠를 당겼습니다 ...하지만 낮은 및 보라 오래된 애플 리케이션, 그것은 울타리 아무 문제가 트리거합니다. 새로운 것은 그렇지 않습니다. 나는이 일을 일으킬 수있는 잘못을 짐작할 수도조차 없다. 심지어는 API를 사용하지 못했고 성공한 방법을 수행했으며 울타리는 문제가 없다고 말합니다.

또 다른 까다로운 문제는 GPX 파일을 사용하여 위치를 시뮬레이션하면 울타리가 코드에서 트리거된다는 것입니다.

제안 사항? 필요한 경우 코드 예제를 제공합니다.

+0

그래서 gpx 파일이 울타리를 실행하지만 실제 장치에서는 의미가 없습니까? – Unheilig

+0

수정하십시오. 지역 모니터링이 제대로 작동하고 있다는 가정하에 나왔지만, 현장 테스트에서 그 성능은 상당히 나빴습니다. – Genhain

+0

CLCircularRegion에 어떤 반지름을 사용하고 있습니까? 포 그라운드에있는 동안 앱을 테스트하고 있습니까? – Spectravideo328

답변

1

좋아, 내가 주어진 QA 세부 생각할 수있는 것을 여기에 몇 가지가있다 :

1 확인 당신이 또한 제대로하고 "위치 업데이트하는 .plist를 복제 한 것으로, 프로젝트를 복사 할 때 "이 활성화되었습니다.

2 didEnterRegion과 didExitRegion을 테스트했을 때 나는 운전이나 걷기가 항상 정확한 것은 아니라는 사실을 발견했습니다. 조사한 후에 지역 모니터링을 수집하여 didEnterRegion 및 didExitRegion을 트리거하기 전에 실제로 지역의 경계를 넘었다는 것을 "보장"하는 알고리즘을 가지고 있습니다. 그리고 반경이 100 미터이고 한 방향으로 중심에서 101 미터를 걸어서 ExitRegion을 트리거한다고 가정하면 가능성이 없습니다. doEnterRegion을 실행하기 위해 다른 x 미터를 걷거나 운전해야하는 경우도 있습니다. 내 권장 사항은 코드에서 항상 반경이 크게 벗어나지 않도록하는 것입니다.

지역 내에 있고 100 미터를 가로 질러 돌아와 다시 들어올 때이 작업이 더욱 복잡해집니다. 결코 넘어지지 않았기 때문에 방아쇠를 당하지 않을 것입니다 (지역 모니터링 스탠드 포인트) 처음에 다시 교차하기 위해!

크로스 아웃 (영역을 나가기)을 강요하므로 장치가 알고리즘을 적용하여 안전하게 넘어지지 않았기 때문에 GPX에는 문제가 없습니다.

3 구현해야합니다 :

-(void) locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region 

가 시작할 때 상태를 결정하기 위해 몇 가지 NSLogs를 넣습니다. 이것은 문제를 집중하는 데 도움이 될뿐만 아니라, 교차로가없는 경우에도 지역 내 또는 외출 중임을 알리는 우회로를 유발해야합니다. 이것이 실행되지 않으면 커다란 문제가 있습니다.

4 마지막으로, CLRegion은 iOS7에서 더 이상 사용되지 않습니다. CLCircularRegion을 사용해야합니다. 그리고 방법으로 지역을 시작하십시오 :

initWithCenter:(CLLocationCoordinate2D)center radius:(CLLocationDistance)radius identifier:(NSString *)identifier 

희망이 도움이됩니다.

+0

답장을 보내 주셔서 감사합니다. 다음 작업을 진행할 수있었습니다. - 재설치 된 코코아 팟 및 모든 포켓은 으로 사용되었습니다. 위치 업데이트, 제목 및 중요한 변경 사항이 중지되었습니다. 또한 ios7에서 응용 프로그램 배경 새로 고침이 활성화되어 있는지 확인해야합니다. 그렇지 않으면 지오 펜스가 작동하지 않습니다. 이상하게도 아직 CLRegion을 사용하고 있습니다. – Genhain