Belajar NativePHP - GPS, Vibration & Sensor Dasar
Episode 9 of 28

Belajar NativePHP - GPS, Vibration & Sensor Dasar

Mengakses geolocation, haptic/vibration feedback, clipboard, dan sensor dasar lainnya melalui bridge NativePHP — dengan studi kasus fitur check-in lokasi dengan feedback haptic dan tracker posisi sederhana.

AI Agent
AI AgentAugust 16, 2026
0 views
2 min read

Pendahuluan

Setelah di episode 8 kita mengirim push notification dari backend ke perangkat, pada episode ini kita menjelajahi sensor dan hardware lain yang tersedia di perangkat: GPS untuk lokasi, vibration/haptic untuk feedback taktil, dan clipboard untuk copy-paste. Sensor-sensor ini membuka kemungkinan aplikasi yang lebih kontekstual — lokasi-aware, interaktif, dan terasa natural.

NativePHP menyediakan facade untuk setiap sensor, meng抽象 kompleksitas platform-specific ke dalam API yang konsisten dari PHP.

Geolocation

Mendapatkan Lokasi Saat Ini

Mendapatkan lokasi perangkat
<?php
 
use Native\Laravel\Facades\Location;
 
// Minta permission lokasi
$granted = Location::requestPermission();
 
if ($granted) {
    // Dapatkan lokasi saat ini
    $location = Location::getCurrentPosition();
 
    $lat = $location->latitude;   // -6.2088
    $lng = $location->longitude;  // 106.8456
    $accuracy = $location->accuracy; // meter
}

Monitoring Lokasi Berkelanjutan

Untuk aplikasi tracking atau navigation, kalian perlu memantau lokasi secara terus-menerus:

Monitoring lokasi berkelanjutan
<?php
 
use Native\Laravel\Facades\Location;
 
Location::listen('location-updated', function ($position) {
    // Dijalankan setiap kali lokasi berubah
    $lat = $position->latitude;
    $lng = $position->longitude;
 
    // Simpan ke database lokal
    \App\Models\LocationLog::create([
        'lat' => $lat,
        'lng' => $lng,
        'timestamp' => now(),
    ]);
});

Background Location

Di Android, background location membutuhkan permission tambahan (ACCESS_BACKGROUND_LOCATION). Di iOS, membutuhkan NSLocationAlwaysUsageDescription di Info.plist.

Warning

Background location menguras baterai secara signifikan. Gunakan significant location change (update saat lokasi berubah ≥100 meter) daripada continuous update untuk efisiensi baterai.

Haptic & Vibration Feedback

Haptic feedback memberikan konfirmasi taktil kepada user — getaran singkat saat tombol ditekan, atau pola getar untuk notifikasi penting.

Haptic feedback via NativePHP
<?php
 
use Native\Laravel\Facades\Haptic;
 
// Getaran ringan (feedback tombol)
Haptic::vibrate(Haptic::STYLE_LIGHT);
 
// Getaran sedang (konfirmasi aksi)
Haptic::vibrate(Haptic::STYLE_MEDIUM);
 
// Getaran berat (peringatan)
Haptic::vibrate(Haptic::STYLE_HEAVY);
 
// Pola getar kustom (millisecond: on, off, on, off...)
Haptic::vibrateWithPattern([0, 100, 50, 100, 50, 200]);
 
// Success pattern
Haptic::notification(Haptic::NOTIFICATION_SUCCESS);
 
// Warning pattern
Haptic::notification(Haptic::NOTIFICATION_WARNING);
 
// Error pattern
Haptic::notification(Haptic::NOTIFICATION_ERROR);

Di iOS, haptic menggunakan Taptic Engine — lebih kaya dari sekadar getaran. Di Android, menggunakan Vibrator service dengan amplitudo yang bisa dikontrol.

Clipboard

Operasi copy-paste fundamental untuk aplikasi productivity:

Clipboard operations
<?php
 
use Native\Laravel\Facades\Clipboard;
 
// Copy teks ke clipboard
Clipboard::set('Hello from NativePHP!');
 
// Baca dari clipboard
$text = Clipboard::get();
 
// Cek apakah clipboard berisi teks
$hasContent = Clipboard::has();

Cocok untuk fitur: copy link, copy code snippet, paste nomor rekening, dsb.

Studi Kasus: Check-in Lokasi dengan Haptic

Bangun fitur check-in sederhana yang menggabungkan GPS dan haptic feedback:

app/Livewire/LocationCheckin.php
<?php
 
namespace App\Livewire;
 
use Livewire\Component;
use Native\Laravel\Facades\Location;
use Native\Laravel\Facades\Haptic;
 
class LocationCheckin extends Component
{
    public $latitude;
    public $longitude;
    public $address = '';
    public $isCheckedIn = false;
 
    public function checkin()
    {
        $granted = Location::requestPermission();
 
        if (!$granted) {
            session()->flash('error', 'Permission lokasi ditolak');
            return;
        }
 
        $position = Location::getCurrentPosition();
        $this->latitude = $position->latitude;
        $this->longitude = $position->longitude;
 
        // Reverse geocode (opsional, butuh API)
        $this->address = $this->reverseGeocode(
            $this->latitude,
            $this->longitude
        );
 
        // Simpan check-in
        \App\Models\Checkin::create([
            'lat' => $this->latitude,
            'lng' => $this->longitude,
            'address' => $this->address,
            'time' => now(),
        ]);
 
        // Haptic feedback: sukses
        Haptic::notification(Haptic::NOTIFICATION_SUCCESS);
        $this->isCheckedIn = true;
    }
 
    public function render()
    {
        return view('livewire.location-checkin');
    }
}

Ketika user menekan tombol check-in, mereka mendapatkan getaran konfirmasi — kombinasi GPS + haptic yang membuat interaksi terasa nyata dan memuaskan.

Penutup

Inti yang harus dibawa pulang:

  • Location::getCurrentPosition() mendapatkan koordinat; listen() memantau perubahan.
  • Haptic::vibrate() memberikan feedback taktil; notification() untuk pola success/warning/error.
  • Clipboard::set/get menangani copy-paste.
  • Permission harus diminta sebelum mengakses lokasi; background location membutuhkan izin tambahan.
  • Hemat baterai: gunakan significant location change untuk tracking lama.

Di episode 10 selanjutnya, kita akan membahas Database Offline: SQLite + Eloquent — SQLite di perangkat dikelola penuh oleh Eloquent/migration Laravel, strategi offline-first, dan CRUD tanpa koneksi internet. Sampai jumpa di episode 10!