지오펜스 앱에 대한 지침
앱에서 지오펜싱의 모범 사례를 따르세요.
중요 API
권장 사항
지오펜스 이벤트가 발생할 때 앱으로 인터넷에 접속해야 하는 경우, 지오펜스를 생성하기 전에 인터넷 접속 가능 여부를 검사하세요.
- 현재 앱으로 인터넷에 접속할 수 없는 경우, 지오펜스를 설정하기 전에 인터넷에 연결하라는 메시지를 사용자에게 띄울 수 있습니다.
- 인터넷 접속이 불가능한 경우 지오펜싱 위치 검사에 필요한 전원을 사용하지 마세요.
지오펜스 이벤트가 Entered(시작됨) 또는 Exited(종료됨) 상태의 변경을 나타내는 경우, 타임스탬프 및 현재 위치를 점검하여 지오펜싱 알림의 관련성을 확인하세요. 자세한 내용은 아래의 타임스탬프 및 현재 위치 확인하기를 참조하세요.
디바이스에서 위치 정보에 액세스할 수 없는 시기를 관리하고 필요한 경우 사용자에게 알리려면 예외를 생성하세요. 사용 권한이 꺼져 있거나, 디바이스에 GPS 라디오가 없거나, GPS 신호가 차단되었거나, Wi-Fi 신호가 충분히 강하지 않기 때문에 위치 정보의 사용이 불가능해질 수 있습니다.
일반적으로는 포그라운드 및 백그라운드에서 동시에 지오펜스 이벤트의 수신을 대기할 필요가 없습니다. 그러나 앱이 포그라운드 및 백그라운드 양쪽에서 지오펜스 이벤트의 수신을 대기해야 하는 경우:
- 이벤트가 발생했는지 여부를 확인하려면 ReadReports 메서드를 호출하세요.
- 앱이 사용자에게 표시되지 않을 경우 포그라운드 이벤트 수신기의 등록을 취소하고, 앱이 다시 표시되면 재등록하세요.
코드 예제 및 자세한 내용은 백그라운드 및 포그라운드 수신기를 참조하세요.
지오펜스는 앱당 1,000개 이하로만 사용하세요. 이 시스템은 실제로 앱당 수천 개의 지오펜스를 지원합니다. 1,000개 이하로 사용하면 앱의 메모리 사용량을 줄일 수 있을 만큼 우수한 좋은 앱 성능을 유지할 수 있습니다.
반경이 50m 미만인 지오펜스를 생성하지 마세요. 앱이 반경이 작은 지오펜스를 사용해야 하는 경우, GPS 라디오가 있는 디바이스로 앱을 사용하여 최상의 성능을 구현하도록 사용자에게 권고합니다.
추가 사용법 지침
타임스탬프 및 현재 위치 확인하기
이벤트가 Entered(시작됨) 또는 Exited(종료됨) 상태의 변경을 나타내는 경우, 이벤트의 타임스탬프와 현재 위치를 둘 다 확인하세요. 백그라운드 작업을 시작하기에 충분한 리소스가 시스템에 없거나, 사용자가 알림을 알아채지 못하거나, 대기 중인 디바이스와 같은 다양한 요소는 사용자가 이벤트를 실제로 처리할 때 영향을 줄 수 있습니다. 그 예로 다음과 같은 시퀀스가 발생할 수 있습니다.
- 앱은 지오펜스를 생성하고 지오펜스의 시작 이벤트 및 종료 이벤트를 모니터링합니다.
- 사용자가 디바이스를 지오펜스 내부로 이동시키면 시작 이벤트가 트리거됩니다.
- 앱은 현재 지오펜스 내부에 있다는 알림을 사용자에게 보냅니다.
- 사용자는 작업 중이었으며, 10분 후에는 알림이 사용자에게 표시되지 않습니다.
- 10분간의 지연 시간 동안 사용자가 지오펜스 외부로 다시 이동했습니다.
타임스탬프에서는 작업이 과거에 이루어졌다는 것을 확인할 수 있습니다. 현재 위치에서는 사용자가 이제 지오펜스 외부로 돌아왔다는 것을 확인할 수 있습니다. 앱의 기능에 따라 이 이벤트를 필터링해야 할 수 있습니다.
백그라운드 및 포그라운드 수신기
일반적으로 앱은 포그라운드 및 백그라운드 작업 양쪽에서 동시에 지오펜스 이벤트의 수신을 대기할 필요가 없습니다. 둘 다 필요할 수 있는 경우를 처리하는 가장 확실한 방법은 백그라운드 작업에서 알림을 처리하게 하는 것입니다. 포그라운드 및 백그라운드 지오펜스 수신기를 모두 설정할 경우에는 먼저 트리거되는 보장이 없습니다. 따라서 항상 ReadReports 메서드를 호출하여 이벤트가 발생했는지 여부를 확인해야 합니다.
포그라운드 및 백그라운드 지오펜스 수신기를 모두 설정했다면 앱이 사용자에게 표시되지 않을 때마다 포그라운드 이벤트 수신기의 등록을 취소하고, 앱이 다시 표시되면 앱을 다시 등록해야 합니다. 다음은 표시 유형 이벤트를 등록하는 몇 가지 예제 코드입니다.
Windows.UI.Core.CoreWindow coreWindow;
// This needs to be set before InitializeComponent sets up event registration for app visibility
coreWindow = CoreWindow.GetForCurrentThread();
coreWindow.VisibilityChanged += OnVisibilityChanged;
표시 유형이 변경되면 아래에 나온 대로 포그라운드 이벤트 처리기를 사용하거나 사용하지 않도록 설정할 수 있습니다.
private void OnVisibilityChanged(CoreWindow sender, VisibilityChangedEventArgs args)
{
// NOTE: After the app is no longer visible on the screen and before the app is suspended
// you might want your app to use toast notification for any geofence activity.
// By registering for VisibiltyChanged the app is notified when the app is no longer visible in the foreground.
if (args.Visible)
{
// register for foreground events
GeofenceMonitor.Current.GeofenceStateChanged += OnGeofenceStateChanged;
GeofenceMonitor.Current.StatusChanged += OnGeofenceStatusChanged;
}
else
{
// unregister foreground events (let background capture events)
GeofenceMonitor.Current.GeofenceStateChanged -= OnGeofenceStateChanged;
GeofenceMonitor.Current.StatusChanged -= OnGeofenceStatusChanged;
}
}
지오펜스 크기 조정하기
GPS로 가장 정확한 위치 정보를 알 수 있는 반면, 지오펜싱을 통해 Wi-Fi 또는 기타 위치 센서를 사용해서 사용자의 현재 위치를 확인할 수도 있습니다. 다만 이처럼 다른 방법을 이용하면 생성할 수 있는 지오펜스의 크기에 영향을 줄 수 있습니다. 정확도 수준이 낮으면 작은 지오펜스를 생성하는 것이 유용하지 않을 겁니다. 일반적으로는 반경이 50m 미만인 지오펜스를 생성하지 않는 것이 좋습니다. 또한 지오펜스 백그라운드 작업은 Windows에서 주기적으로만 실행됩니다. 작은 지오펜스를 사용하면 Enter(시작) 또는 Exit(종료) 이벤트를 완전히 놓칠 수 있습니다.
앱이 반경이 작은 지오펜스를 사용해야 하는 경우, GPS 라디오가 있는 디바이스로 앱을 사용하여 최상의 성능을 구현하도록 사용자에게 권고합니다.