클라이언트 측 지오펜싱을 트리거하여 Nav SDK로 모바일 애셋 추적하기

이 문서에서는 클라이언트 측 지오펜싱의 정의와 사용 시기, 모바일 애플리케이션의 사용 사례에 이를 적용하는 방법을 설명합니다. 또한 Google Navigation SDK를 사용하여 Android에서 예를 구현하는 방법도 보여줍니다.

지오펜싱 감지가 포함된 Nav SDK
지오펜싱 감지 기능이 포함된 Nav SDK

회사는 종종 휴대기기가 특정 지역에 들어가거나 나올 때를 알아야 합니다. 이는 가상 지리적 경계 또는 지오펜싱을 유지하여 기기가 경계를 넘을 때 소프트웨어에서 이벤트를 트리거할 수 있도록 하여 실행됩니다.

특정 차량이 경계를 통과하는 시점을 이해하는 것은 다음과 같은 여러 사용 사례에서 중요합니다.

  • 고객 참여: 비즈니스에서는 지오펜싱을 사용하여 최종 사용자에게 특별 이벤트, 이벤트, 신제품에 관한 푸시 알림을 보낼 수 있습니다.
  • 보안 및 안전: 비즈니스에서는 지오펜싱을 사용하여 데이터 센터나 창고와 같은 민감한 영역 주변에 가상 경계를 만들고 누군가 해당 지역을 진입하거나 떠나는 경우 보안 담당자에게 알릴 수 있습니다.
  • 교통: 비즈니스에서는 지오펜싱을 사용하여 차량 위치를 추적하고 경로 및 일정을 최적화할 수 있습니다.

따라서 클라이언트 대면 앱 내에서 이러한 영역 (다각형)을 나타내는 방법을 알아야 합니다. 이 앱은 기기 위치를 추적하고 특정 지오펜싱을 위반했는지 확인해야 합니다.

범위

이 문서에서는 지오펜싱의 클라이언트 측 구현에 중점을 둡니다 . 즉, 클라이언트 앱에는 다음이 있어야 합니다.

  1. 침해 여부를 확인해야 하는 다각형
  2. 사용자의 실시간 위치
  3. 현재 위치가 폴리곤 내부에 있는지 아니면 외부에 있는지 확인하는 로직입니다.

이 가이드에는 Android에서의 예시가 포함되어 있지만 iOS에서도 동일하게 이 작업을 실행할 수 있는 방법이 있습니다. Android 위치 서비스에는 원형 지오펜싱이 내장되어 있으며 여기에서 확인할 수 있습니다. 아래의 참조 코드와 설명은 보다 복잡한 구현을 위한 출발점입니다.

Navigation SDK는 드라이버 앱에 추가된 네이티브 Android / iOS 라이브러리로, 다음을 담당합니다.

  • 이를 실행하는 앱에서 도로 스냅 위치를 가져옵니다. 이는 Google의 도로망을 사용하여 가장 가까운 도로 구간에 위치를 맞추기 때문에 Android의 FusedLocationProvider (FLP)보다 정확합니다. 도착예정시간을 훨씬 더 정확하게, FLP의 기타 정보를 제공합니다.
  • 실시간 교통정보 및 기타 경로 제한을 고려하여 운전자가 A 지점에서 B 지점까지 효율적으로 이동할 수 있는 세부 경로 안내입니다.
  • 이벤트 리스너 및 등록된 콜백을 통해 이벤트 실행

리스너

Navigation SDK에는 사용할 수 있는 리스너가 많이 있습니다. 다음과 같습니다...

  • RoadSnappedLocation 제공업체를 통한 위치 변경
  • ReroutingListener를 통해 이벤트 경로를 변경 (사용자가 유턴, 좌회전 등을 하지 않아 권장 경로에서 벗어남)
  • ArrivalListener를 통한 도착 이벤트 (사용자가 예정된 목적지에 도착함)
  • 남은 거리 및 도착예정시간 이벤트 (운전자가 목적지에 도착하려고 할 때 알림 받기 - 미터 기준, 운전자가 목적지에 도착할 예정일 때 시간 기반 알림 수신) 모두 RemainingTimeOrDistanceChangedListener를 통해 사용할 수 있습니다.

이 가이드에서는 RoadSnappedLocation 제공업체 및 위치 리스너만 사용합니다.

클라이언트 측 지오펜싱 솔루션

이제 클라이언트 측 지오펜싱 기능을 빌드하는 단계를 살펴보겠습니다. 아래 예에서는 세부 경로 안내 모드에서 작동하는 Navigation SDK와 지오펜싱을 나타내는 경로에 정의된 다각형이 있습니다.

기능 다이어그램
기능 다이어그램

  1. 지오펜싱은 BigQuery에 저장되며 백엔드에서 가져옵니다.
  2. 백엔드는 주기적으로 지오펜싱을 드라이브 앱으로 푸시합니다.
  3. 드라이버가 탐색하고 드라이버 앱이 정기적으로 지오펜싱에서 트리거를 확인합니다.
  4. 드라이버 앱은 작동할 수 있도록 트리거 이벤트를 백엔드에 알립니다.

차량이 경로를 따라 이동할 때 앱은 정기적으로 다각형이 침해되었는지 여부를 확인합니다. 앱이 지오펜싱을 통과했음을 감지하면 UI에 지오펜싱 위반이라는 메시지가 표시됩니다.

Android-Maps-Utils의 종속 항목 구성

이 솔루션은 Google Maps Android API를 사용하는 다양한 애플리케이션에 유용한 유틸리티가 포함된 오픈소스 라이브러리인 Android-Maps-Utils를 사용합니다.

이 라이브러리는 공개 라이브러리이며 GitHub에서 호스팅되며 다음 위치에서 액세스할 수 있습니다.

  • Android: https://github.com/googlemaps/android-maps-utils
  • iOS: https://github.com/googlemaps/google-maps-ios-utils

Android 앱에 이 라이브러리를 포함하려면 (이 문서의 범위) build.gradle 파일을 수정하여 포함해야 합니다. 이 build.gradle 파일은 프로젝트 수준이 아니라 빌드 중인 모듈 (앱)용입니다.

dependencies {
   ...
   // Utilities for Maps SDK for Android (requires Google Play Services)
   implementation 'com.google.maps.android:android-maps-utils:2.3.0'
}

그런 다음 Gradle을 최신 build.gradle 파일과 동기화한 후 자바 파일에서 com.google.maps.android.PolyUtil을 가져올 수 있습니다.

import com.google.android.gms.maps.model.PolygonOptions;
import com.google.maps.android.PolyUtil;

지오펜싱 정의

여기서 PolygonOptions도 가져오고 있습니다. 이는 다각형을 나타내는 데 사용되고 있기 때문입니다.

mPolygonOptions = new PolygonOptions()
       .add(new LatLng(29.4264525,-98.4948758))
       .add(new LatLng(29.4267029,-98.4948758))
       .add(new LatLng(29.4273742,-98.4945822))
       .add(new LatLng(29.4264562,-98.4943592))
       .fillColor(0x0000ff36)
       .strokePattern(Arrays.asList(new Dash(45.0f), new Gap(10.0f)))
       .strokeColor(Color.BLUE)
       .strokeWidth(5);

위에서 볼 수 있듯이 여기서는 미리 설정된 좌표(위도, 경도) 쌍으로 고정된 다각형을 정의합니다. 하지만 실제 시나리오에서는 이러한 좌표와 다각형 정의는 대부분 백엔드 엔드포인트에서 가져오며 원격으로 가져올 수 있습니다. 즉, 앱에서 즉시 다각형을 만들어야 합니다.

PolygonOptions에서 지정할 수 있는 항목에 관한 자세한 내용은 여기를 참고하세요.

프래그먼트나 활동을 만드는 동안 다각형을 정의해야 합니다. 예를 들면 다음과 같습니다.

protected void onCreate(Bundle savedInstanceState) {
   ...
   mPolygonOptions = new PolygonOptions()
           .add(new LatLng(29.4264525,-98.4948758))
           .add(new LatLng(29.4267029,-98.4948758))
           .add(new LatLng(29.4273742,-98.4945822))
           .add(new LatLng(29.4264562,-98.4943592))
           .fillColor(0x0000ff36)
           .strokePattern(Arrays.asList(new Dash(45.0f), new Gap(10.0f)))
           .strokeColor(Color.BLUE)
           .strokeWidth(5);

   ...// more code here
}

위치 업데이트 수신 대기

지오펜싱을 정의한 후에는 앞서 언급한 Navigation SDK의 RoadSnappedLocationProvider 이벤트를 구독할 위치 업데이트 리스너를 만들면 됩니다. 그러면 기기의 최신 위치를 반환합니다.

mLocListener = new RoadSnappedLocationProvider.LocationListener() {
   @Override
   public void onLocationChanged(Location snapped) {
       LatLng snappedL = new LatLng(snapped.getLatitude(), snapped.getLongitude());
       if(PolyUtil.containsLocation(snappedL, mPolygonOptions.getPoints(), true) && !mGeofenceBreached){
           Log.d("Geofence", "Vehicle has breached the polygon");
       }
   }
   @Override
   public void onRawLocationUpdate(Location location) {
   }
};

Android-Maps-Utils를 사용하면 PolyUtil.containsLocation를 사용하여 수신 위치가 사전 정의된 다각형 내에 있는지 확인할 수 있습니다. 아래 예에서는 지오펜싱을 나타내는 사전 정의된 다각형이 사용되지만 실제로는 다각형이 여러 개 있고 루프가 필요할 수 있습니다.

대안적 접근 방식

이 문서에서는 사용자 지정 지오펜싱 (폴리곤) 위반을 확인하는 클라이언트용 애플리케이션에 중점을 둡니다. 하지만 백엔드에서 이러한 검사를 수행해야 하는 경우가 있습니다.

즉, 앱이 백엔드에 위치 업데이트를 보고하면 이 백엔드는 차량이 특정 다각형을 위반했는지 확인하여 클라이언트 앱에 의존하지 않고 유효성 검사를 실시한다는 의미입니다.

가능한 해결 방법은 다음과 같습니다.

[실행 환경] 서버 측 지오펜싱 아키텍처

서버 측 지오펜싱 접근 방식을 보여주는 아키텍처 예시

서버 측 솔루션
서버 측 솔루션

  1. Driver SDK를 사용하는 드라이버 앱은 Fleet Engine에 위치 업데이트를 전송합니다. 위치 업데이트 및 인앱 탐색은 Navigation SDK를 통해 발생합니다.
  2. Fleet Engine은 이러한 업데이트를 Cloud Logging 또는 Pub/Sub로 출력합니다.
  3. 백엔드는 이러한 위치 신호를 수집합니다.
  4. 지오펜싱은 백엔드에서 분석할 수 있도록 BigQuery에 저장됩니다.
  5. 지오펜싱을 트리거하면 알림이 드라이버 앱으로 전송됩니다.

이 아키텍처에서는 Driver SDK와 Fleet Engine이 사용됩니다. Fleet Engine은 PubSub 업데이트를 내보내고 Cloud Logging에서 로그 항목을 생성할 수 있습니다. 두 경우 모두 차량 위치를 가져올 수 있습니다.

그러면 백엔드는 PubSub 대기열을 모니터링하거나 로그를 읽고 차량 업데이트를 감시할 수 있습니다. 그런 다음 업데이트가 발생할 때마다 (또는 중요도에 따라 몇 초마다) 백엔드에서 BigQuery GIS 함수를 호출하여 특정 차량이 지오펜싱 내부에 있는지 아니면 외부에 있는지 확인할 수 있습니다. 하나 이상의 지오펜싱이 침해된 경우 백엔드는 내부 파이프라인 또는 기타 관련 워크플로를 실행하고 트리거할 수 있습니다.

결론

지오펜싱은 다양한 용도로 사용할 수 있는 강력한 도구입니다. 비즈니스는 지오펜싱을 사용하여 관련성 있는 광고와 프로모션으로 최종 사용자를 타겟팅하고, 위치 기반 서비스를 제공하며, 보안과 안전을 개선할 수 있습니다.

Navigation SDK는 여정 중에 많은 중요한 순간을 감지할 수 있는 유용한 이벤트 리스너를 제공합니다. 회사는 특정 사용 사례를 위해 맞춤 지오펜싱을 필요로 하는 경우가 많습니다. 이 문서에서는 이를 달성하는 방법을 보여드렸지만 가능성은 무궁무진합니다. 어떤 프로젝트를 제출하실지 기대됩니다.

다음 작업

추천 추가 자료: