Lewati ke konten utama
menjadi.dev
Chapter 47.5 Mobile Lanjutan

Background Location Tracking

Track lokasi user saat app di background — untuk fitness, delivery

Tujuan Pembelajaran

  • Memahami implementasi background location tracking
  • Mampu menggunakan expo-task-manager untuk background task
  • Mengerti batasan iOS dan Android untuk background tracking

Analogi

Diagram

      Background Tracking = GPS Watch:
- Kamu lari pagi, app di saku (background)
- GPS Watch tetap track rute, pace, jarak
- Pas selesai, buka app → lihat history rute

Background task = GPS watch yang jalan meski kamu gak lihat app.
    

Background tracking seperti GPS watch — jalan terus di belakang layar, tracking lokasi, menyimpan data. Saat app dibuka, semua data sudah siap.

Penjelasan Konsep

Background location tracking memungkinkan aplikasi terus mendapatkan update lokasi meskipun di background atau device locked. Use case: fitness tracker, delivery driver tracking, family locator.

Expo implementation: (1) Define background task dengan TaskManager. (2) Minta permission LOCATION_ALWAYS. (3) Start Location.startLocationUpdatesAsync(TASK_NAME, options).

Background task: TaskManager.defineTask(TASK_NAME, ({ data, error }) => { /* data.locations = array of LocationObject */ }). Task menerima array locations — bisa >1 lokasi (dikirim dalam batch).

Options: (1) accuracy: Balanced (baterai efisien) atau Best (presisi). (2) timeInterval: minimum waktu antar update (ms). (3) distanceInterval: minimum jarak antar update (meter). (4) showsBackgroundLocationIndicator: true (iOS: blue bar), false.

Batasan: (1) iOS: blue bar atau purple arrow di status bar — user tahu app tracking. App bisa di-terminate oleh OS kapan saja. (2) Android: foreground service dengan persistent notification — user harus tahu app running. (3) Baterai: background GPS tracking boros baterai — gunakan distanceInterval besar. (4) Permission: user bisa revoke kapan saja — handle di app.

Data management: task handler tidak bisa akses React state — harus simpan ke storage/asyncdb. App baca dari storage saat foreground.

Inti yang Perlu Dipahami

Bagian ini berfokus pada memahami implementasi background location tracking., mampu menggunakan expo-task-manager untuk background task., dan mengerti batasan iOS dan Android untuk background tracking. Jangan terburu-buru menghafal istilahnya. Lebih penting untuk memahami peran setiap konsep dan kapan konsep itu muncul dalam pekerjaan web development.

Saat membaca Background Location Tracking, gunakan tujuan belajar sebagai penanda arah. Kalau kamu sudah bisa menjelaskan tujuan itu dengan kata-katamu sendiri, berarti fondasinya mulai terbentuk.

Cara Membayangkannya

Background tracking seperti GPS watch — jalan terus di belakang layar, tracking lokasi, menyimpan data. Saat app dibuka, semua data sudah siap. Analogi ini dipakai supaya konsep teknis tidak terasa melayang. Hubungkan setiap istilah dengan perannya: siapa yang meminta, siapa yang memproses, data apa yang berpindah, dan hasil apa yang diharapkan.

Kalau analoginya sudah terasa masuk akal, barulah lihat istilah teknisnya. Cara ini membuat materi lebih mudah dipahami daripada langsung menghafal definisi.

Saat Melihat Contoh Kode

Contoh kode pada chapter ini memakai bahasa tsx. Bacalah contoh kode sebagai ilustrasi alur, bukan sebagai bagian yang harus langsung dihafal. Define task di top-level. Simpan lokasi ke MMKV (tidak bisa useState di background). startLocationUpdatesAsync dengan timeInterval dan distanceInterval.

Perhatikan nama fungsi, urutan langkah, dan data yang berpindah. Biasanya tiga hal itu sudah cukup untuk memahami hubungan antara teori dan praktik.

Konteks dalam Perjalanan Belajar

Setiap konsep di platform ini dipilih karena dipakai di industri. Fokus pada pemahaman, bukan hafalan.

Kamu sudah di bagian lanjutan. Mulai pikirkan bagaimana konsep ini dipakai di dunia kerja — bukan hanya untuk belajar, tapi untuk membangun produk nyata.

Gunakan pertanyaan reflektif dan prompt AI di akhir chapter sebagai latihan aktif. Membaca saja tidak cukup — kamu perlu menjelaskan ulang dengan kata-katamu sendiri.

Contoh Kode

tsx
import * as TaskManager from "expo-task-manager";
import * as Location from "expo-location";
import { MMKV } from "react-native-mmkv";

const TRACKING_TASK = "background-location";
const storage = new MMKV({ id: "tracking" });

TaskManager.defineTask(TRACKING_TASK, ({ data, error }) => {
  if (error) return;
  const locations = (data as any).locations as Location.LocationObject[];
  const history = JSON.parse(storage.getString("routeHistory") ?? "[]");
  history.push(...locations.map(l => ({ lat: l.coords.latitude, lng: l.coords.longitude, ts: l.timestamp })));
  storage.set("routeHistory", JSON.stringify(history));
});

async function startTracking() {
  const { status } = await Location.requestForegroundPermissionsAsync();
  if (status !== "granted") return;
  await Location.startLocationUpdatesAsync(TRACKING_TASK, {
    accuracy: Location.Accuracy.Balanced,
    timeInterval: 5000,
    distanceInterval: 10,
  });
}

Penjelasan Kode

Define task di top-level. Simpan lokasi ke MMKV (tidak bisa useState di background). startLocationUpdatesAsync dengan timeInterval dan distanceInterval.

Prompt AI

Desain fitur 'Live Tracking' untuk aplikasi delivery: customer bisa lihat posisi kurir real-time di maps. Kurir tracking di background → simpan → sync ke server → customer lihat di maps.

Pertanyaan Reflektif

Apakah kamu sebagai user nyaman kalau aplikasi tracking lokasimu di background? Apa yang membuatmu percaya/tidak percaya?