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.

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.
<?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
}Untuk aplikasi tracking atau navigation, kalian perlu memantau lokasi secara terus-menerus:
<?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(),
]);
});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 feedback memberikan konfirmasi taktil kepada user — getaran singkat saat tombol ditekan, atau pola getar untuk notifikasi penting.
<?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.
Operasi copy-paste fundamental untuk aplikasi productivity:
<?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.
Bangun fitur check-in sederhana yang menggabungkan GPS dan haptic feedback:
<?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.
Inti yang harus dibawa pulang:
listen() memantau perubahan.notification() untuk pola success/warning/error.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!