Memicu pembatasan sisi sisi klien untuk melacak aset seluler dengan Nav SDK

Dokumen ini menjelaskan apa yang dimaksud dengan geofencing sisi klien, kapan harus menggunakannya, dan cara menerapkannya pada kasus penggunaan dalam aplikasi seluler. Dokumen ini juga menunjukkan cara menerapkan contoh di Android menggunakan Google Navigation SDK.

Nav SDK dengan deteksi geofence
Nav SDK dengan deteksi geofence

Perusahaan sering kali perlu mengetahui kapan perangkat seluler memasuki atau meninggalkan area tertentu. Hal ini dilakukan dengan mempertahankan batas geografis virtual, atau geofence, yang memungkinkan software memicu peristiwa saat perangkat melintasi batas.

Memahami kapan kendaraan tertentu melintasi batas penting untuk berbagai kasus penggunaan seperti:

  • Engagement pelanggan: Bisnis dapat menggunakan geofencing untuk mengirim notifikasi push kepada pengguna akhir tentang penawaran khusus, acara, atau produk baru.
  • Keamanan dan keselamatan: Bisnis dapat menggunakan geofencing untuk membuat perimeter virtual di sekitar area sensitif, seperti pusat data atau gudang, dan memberi tahu petugas keamanan jika seseorang memasuki atau meninggalkan area tersebut.
  • Transportasi: Bisnis dapat menggunakan geofencing untuk melacak lokasi kendaraan serta mengoptimalkan rute dan jadwal.

Oleh karena itu, penting bagi Anda untuk mengetahui cara merepresentasikan zona (poligon) tersebut di dalam aplikasi yang menghadap klien. Aplikasi ini harus melacak lokasi perangkat dan memeriksa apakah perangkat melanggar geofence tertentu.

Cakupan

Dokumen ini berfokus pada penerapan geofencing sisi klien . Artinya, aplikasi klien harus memiliki:

  1. Poligon yang perlu diperiksa untuk mengetahui pelanggaran;
  2. Lokasi real-time pengguna
  3. Logika untuk memeriksa apakah lokasi saat ini berada di dalam atau di luar poligon.

Panduan ini mencakup contoh di Android, tetapi ada cara yang setara untuk melakukannya di iOS. Layanan Lokasi Android memiliki penerapan bawaan untuk geofence melingkar yang dapat dilihat di sini. Kode dan deskripsi referensi di bawah adalah titik awal untuk penerapan yang lebih kompleks.

Navigation SDK adalah library Android / iOS native yang ditambahkan ke aplikasi pengemudi. SDK ini bertanggung jawab untuk:

  • Mendapatkan lokasi yang disesuaikan dengan jalan dari aplikasi yang menjalankannya. Hal ini lebih akurat daripada FusedLocationProvider (FLP) Android karena menggunakan jaringan jalan Google untuk menyambungkan lokasi ke segmen jalan terdekat yang membuat perkiraan waktu tiba (ETA) jauh lebih akurat, dan informasi lain dari FLP.
  • Pengalaman belokan demi belokan yang memungkinkan pengemudi mencapai titik B dari titik A secara efisien dengan mempertimbangkan lalu lintas real-time dan batasan rute lainnya.
  • Memicu peristiwa melalui pemroses peristiwa dan callback terdaftar.

Pemroses

Navigation SDK memiliki banyak pemroses yang dapat Anda gunakan. Di antaranya:

  • Perubahan lokasi melalui penyedia RoadSnappedLocation.
  • Mengalihkan rute acara (pengguna melewatkan putar balik, belok kiri, dll. dan menyimpang dari rute yang direkomendasikan) melalui ReroutingListener.
  • Peristiwa kedatangan (pengguna tiba di tujuan yang direncanakan) melalui ArrivalListener.
  • Peristiwa jarak yang tersisa dan perkiraan waktu tiba (mendapatkan notifikasi saat pengemudi akan tiba di tujuan - berdasarkan meter, mendapatkan notifikasi saat pengemudi akan tiba di tujuan - berdasarkan waktu) keduanya tersedia melalui .RemainingTimeOrDistanceChangedListener

Dalam panduan ini, hanya RoadSnappedLocationProvider dan LocationListener-nya yang digunakan.

Solusi Geofencing Sisi Klien

Sekarang, mari kita bahas langkah-langkah membangun kemampuan geofencing sisi klien. Dalam contoh di bawah, kita memiliki Navigation SDK yang beroperasi dalam mode belokan demi belokan dan poligon yang ditentukan dalam rute yang merepresentasikan geofence kita.

Diagram fungsional
Diagram fungsional

  1. Geofence disimpan di BigQuery dan ditarik oleh backend Anda.
  2. Backend secara berkala mengirimkan geofence ke aplikasi mengemudi.
  3. Pengemudi melakukan navigasi dan aplikasi pengemudi secara rutin memeriksa geofence untuk pemicu.
  4. Aplikasi Driver memberi tahu backend tentang peristiwa pemicu sehingga backend dapat bertindak.

Saat kendaraan bergerak di sepanjang rute, aplikasi akan memeriksa secara berkala apakah poligon telah dilanggar. Saat aplikasi mendeteksi bahwa aplikasi telah melewati pembatasan wilayah, pesan akan ditampilkan di UI yang bertuliskan: Pembatasan wilayah dilanggar.

Mengonfigurasi Dependensi untuk Android-Maps-Utils

Solusi ini menggunakan Android-Maps-Utils, library open source yang berisi utilitas yang berguna untuk berbagai aplikasi yang menggunakan Google Maps Android API.

Library ini bersifat publik dan dihosting di Github serta dapat diakses di:

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

Untuk menyertakan library ini di aplikasi Android Anda (cakupan dokumen ini), Anda harus mengubah file build.gradle untuk menyertakannya. Perhatikan bahwa file build.gradle ini adalah untuk modul (aplikasi) yang Anda bangun, bukan di tingkat project.

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

Kemudian, setelah menyinkronkan Gradle dengan file build.gradle terbaru, Anda dapat mengimpor com.google.maps.android.PolyUtil di file Java:

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

Menentukan Pembatasan Wilayah Anda

Perhatikan bahwa di sini juga PolygonOptions sedang diimpor. Alasannya adalah bahwa inilah yang digunakan untuk merepresentasikan poligon:

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);

Seperti yang dapat Anda lihat di atas, di sini kita menentukan poligon tetap dengan pasangan koordinat yang telah ditetapkan sebelumnya - (lintang, bujur). Namun, dalam skenario nyata, koordinat dan definisi poligon tersebut sebagian besar akan berasal dari endpoint backend dan mungkin akan diambil dari jarak jauh. Artinya, poligon harus dibuat dengan cepat oleh aplikasi.

Untuk mengetahui detail selengkapnya tentang apa yang dapat ditentukan dalam PolygonOptions, lihat di sini.

Anda harus menentukan poligon selama pembuatan Fragmen atau Aktivitas. Contoh:

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
}

Memantau Pembaruan Lokasi

Setelah menentukan geofence, Anda hanya perlu membuat pemroses update lokasi untuk berlangganan peristiwa yang disebutkan di atas di Navigation SDK yang disebut RoadSnappedLocationProvider yang akan menampilkan lokasi terbaru perangkat.

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) {
   }
};

Dengan Android-Maps-Utils, Anda dapat menggunakan PolyUtil.containsLocation untuk memeriksa apakah lokasi yang diterima berada di dalam poligon yang telah ditentukan sebelumnya. Dalam contoh di bawah, poligon yang telah ditentukan sebelumnya, yang merepresentasikan geofence, digunakan, tetapi dalam praktiknya Anda mungkin memiliki beberapa poligon dan loop akan diperlukan.

Pendekatan Alternatif

Dokumen ini berfokus pada aplikasi yang menghadap klien yang memeriksa pelanggaran geofence kustom (poligon). Namun, ada skenario yang membuat Anda ingin melakukan pemeriksaan tersebut di backend.

Artinya, aplikasi akan melaporkan update lokasi ke backend dan backend ini kemudian akan memeriksa apakah kendaraan tersebut melanggar poligon tertentu, sehingga tidak bergantung pada aplikasi klien untuk melakukan validasi.

Kemungkinan solusinya adalah sebagai berikut:

[Lingkungan Eksekusi] Arsitektur geofencing sisi server

Contoh arsitektur yang menunjukkan pendekatan sisi server untuk geofencing.

Solusi sisi server
Solusi sisi server

  1. Aplikasi pengemudi, yang menggunakan Driver SDK, mengirimkan pembaruan lokasi ke Fleet Engine. Pembaruan lokasi dan navigasi dalam aplikasi terjadi melalui Navigation SDK.
  2. Fleet Engine mengirimkan pembaruan tersebut ke Cloud Logging atau Pub/Sub.
  3. Backend mengumpulkan sinyal lokasi tersebut.
  4. Geofence disimpan di BigQuery untuk dianalisis oleh backend.
  5. Setelah memicu geofence, notifikasi akan dikirim ke Aplikasi Pengemudi.

Dalam arsitektur ini, Driver SDK dan Fleet Engine digunakan. Fleet Engine dapat mengirimkan update PubSub dan membuat entri log di Cloud Logging. Dalam kedua kasus tersebut, lokasi kendaraan dapat diambil.

Kemudian, backend dapat memantau antrean PubSub atau membaca log dan memantau update kendaraan. Kemudian, setiap kali ada pembaruan (atau setiap beberapa detik, menit, bergantung pada tingkat kepentingannya), backend dapat memanggil fungsi GIS BigQuery untuk menentukan apakah kendaraan tertentu berada di dalam atau di luar geofence. Jika satu atau beberapa geofence dilanggar, backend dapat bertindak dan memicu pipeline internal atau alur kerja relevan lainnya.

Kesimpulan

Geofencing adalah alat canggih yang dapat digunakan untuk berbagai tujuan. Bisnis dapat menggunakan geofencing untuk menargetkan pengguna akhir dengan iklan dan promosi yang relevan, menyediakan layanan berbasis lokasi, serta meningkatkan keamanan dan keselamatan.

Navigation SDK menyediakan pemroses peristiwa yang berguna yang dapat mendeteksi banyak momen penting selama perjalanan. Perusahaan sering kali memerlukan geofence kustom untuk kasus penggunaan tertentu. Dalam dokumen ini, kami menunjukkan cara untuk mencapainya, tetapi kemungkinannya tidak terbatas. Kami ingin segera melihat hasil kreasi Anda.

Tindakan Berikutnya

Bacaan Lanjutan yang Disarankan: