dumon-geolocation/documentation/IOS_LOCATION_FLOW.md
2026-01-11 15:09:58 +08:00

1.5 KiB

iOS Location Flow (Dumon Client)

Tujuan: memastikan getLatestPosition() tidak mengembalikan default (lat/lon 0, accuracy 999) di iOS.

Aturan utama

  • getLatestPosition() hanya mengembalikan snapshot terakhir dari didUpdateLocations.
  • Jika belum ada update lokasi, hasilnya akan default.
  • Jadi, startPositioning() wajib dipanggil dan update pertama harus diterima sebelum getLatestPosition() dipakai sebagai sumber data utama.

Urutan yang benar

  1. checkAndRequestPermissions() dipanggil saat aplikasi siap meminta lokasi.
  2. Jika location: granted, lanjut; jika denied, hentikan flow dan minta user aktifkan izin.
  3. Panggil startPositioning() sekali.
  4. Tunggu event onPositionUpdate pertama.
  5. Gunakan data dari event pertama sebagai sumber posisi awal.
  6. getLatestPosition() baru dipakai setelah event pertama (sebagai snapshot tambahan/fallback).

Contoh urutan (pseudo)

await checkPermission();                  // harus granted
await continuousWatchPosition();          // startPositioning
await waitForFirstOnPositionUpdate();     // resolve saat listener pertama
const pos = await getGeoloc();            // sekarang safe

Checklist debugging

  • Pastikan initiateLocationState() dipanggil sebelum flow yang butuh posisi.
  • Pastikan checkPermission() sukses sebelum continuousWatchPosition().
  • Pastikan ada log yang membuktikan onPositionUpdate terpanggil.
  • Jangan panggil getLatestPosition() terlalu awal (sebelum update pertama).