2013-11-28 4 views
0

나는 UIAlertViews를 사용하여 조금 어려움을 겪고 있습니다. 비컨 범위에 들어갈 때 사용자에게 표시하고 싶습니다. 나는 UIAlertview가 비컨과 일정한 거리에 도달했을 때에 만 나타나기를 바란다. 먼저 "didrangebeacons"대리자 메서드에서 Alertview를 실행하는 방법에 대해 생각했습니다. 그러나 이것은 AlertView를 초당 1 회 발생시킵니다. 그런 다음 didEnterRegion에서이 작업을 수행해야한다고 생각했지만 사용자가 범위 (어쩌면 20m 거리)에있는 즉시 해고 될 것입니다.iBeacon은 AlertView를 표시해야합니다.

올바르게 구현하는 것이 가장 좋은 방법은 무엇입니까? 내가 설정할 국기에 대해 생각했다. 예를 들어 : "showAlert"라는 플래그를 만들고 DidEnterRegion 대리자 메서드에서 처음에 "YES"로 설정합니다. 특정 RSSI에 도달하면 바로 alertview를 표시하고 그 후에는 NO로 설정합니다. 신호의 지역이 나가자 마자 나는 다시 YES로 설정 될 것입니다.

이렇게하는 것이 올바른 방법입니까?

감사합니다.

답변

1

didRangeBeacons 메서드에서 CLBeacon 개체 및/또는 RSSI의 정확도 속성을 검사하여 신호가 충분히 가깝게 있는지 확인합니다.

정확도는 미터 단위로 표시되며 RSSI를 사용하는 것보다 나을 수도 있습니다.

그런 다음 플래그를 경고가 표시된 상태로 설정하고 경고를 표시합니다. 대리자 메서드 "didExitRegion"에서 플래그를 다시 설정하여 해당 지역으로 돌아 가면 다시 알림을받을 준비가되었습니다.

+0

고맙습니다! – sesc360

3

거리 정보는 didRangeBeacons 메서드에서만 얻을 수 있습니다. 그 방법에서는 일련의 표지를 얻을 수 있습니다. 어레이에 둘 이상의 신호가있는 경우 수행 할 작업을 결정해야합니다. 내가하는 일은 루프를 통해 가장 가까운 비컨을 찾는 것입니다. (정확도를 기준으로하면 대략적인 거리입니다)

가끔 비어있는 비컨 배열이나 근접성을 나타내는 모든 비컨으로 호출됩니다 unknown 및/또는 -1의 정확도 값 이러한 경우를 처리해야합니다.

또한 배경에 있으면 상황이 엉망이됩니다. 이 경우 비컨의 범위를 입력하면 didEnterRegion 호출이 발생하고 몇 가지 범위 지정 호출이 내 테스트를 기준으로 약 5 초 동안 수행됩니다. 그 후 호출이 중지되고 더 이상 얻지 못합니다. 사용자가 앱을 포 그라운드로 반환합니다. 백그라운드에서 실행 중이고 처음 몇 개의 전화를 무시하면 사용자가 충분히 가까이 있지 않기 때문에 사용자가 가까워지면 알림을받지 못합니다.

+0

좋은 정보! 그래서 나는 범위에있는 비콘과의 거리를 얻으려면 didRangeBeacons 메서드가 필요합니다 ...하지만 AlertView를 어디에서 실행해야합니까? 그리고 한 번만 나타나는 경우를 어떻게 처리 할 수 ​​있습니까? 앞서 언급했듯이 : didRangeBeacons 메서드에서이 작업을 수행하면 초당 한 번씩 경고보기가 실행됩니다. 거기에 가장 좋은 방법이 있습니까? 그리고 배경 문제를 어떻게 처리할까요? 앱이로드되지 않아도 사용자가 비컨의 범위에있을 때 사용자에게 알림이 전송되도록해야합니다. – sesc360

+1

@ISARFAKTOR, 원하는 작업을 매핑 한 다음이를 구현하는 코드 로직을 찾아야합니다. 다른 포스터가 말했듯이, 당신은 아마도 부울 "alertShown"플래그가 필요합니다. 백그라운드에서 작동하는 한 몇 가지 어려운 제한 사항이있는 것으로 보입니다. 백그라운드에서 실행중인 경우 멀리 떨어진 전화를 무시할 수 없으며 사용자가 가까이있을 때 다시 전화를받을 것으로 예상됩니다. 작동하지 않습니다. 실제로 작동 한 –

관련 문제