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

35 lines
1.5 KiB
Markdown

# 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)
```ts
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).