Mengirim push notification dari backend Laravel ke aplikasi NativePHP di perangkat: registrasi device token (APNs untuk iOS, FCM untuk Android), konfigurasi sertifikat & key, handling payload & tap action, serta notifikasi terjadwal dari logic PHP.

Setelah di episode 7 kita mengimplementasi biometrik dan secure storage, pada episode ini kita masuk ke notifications: cara mengirim pesan ke perangkat user tanpa mereka membuka aplikasi. Push notification adalah salah satu fitur paling berharga di mobile — engagement rate push notification jauh lebih tinggi dibanding email.
NativePHP mendukung dua tipe notifikasi: push notification dari server backend ke perangkat, dan local notification yang dijadwalkan langsung dari logic PHP di perangkat.
Push notification melibatkan tiga komponen:
.p8 — simpan aman, hanya bisa didownload sekali.<?php
return [
'apns' => [
'key_id' => env('APNS_KEY_ID'),
'team_id' => env('APNS_TEAM_ID'),
'key_path' => env('APNS_KEY_PATH', storage_path('authkey.p8')),
'environment' => env('APNS_ENVIRONMENT', 'sandbox'), // sandbox atau production
],
];<?php
return [
'ios' => [
'push_notifications' => true,
'push_certificate' => env('NATIVEPHP_PUSH_CERT'),
],
];nativephp.php.google-services.json dan taruh di root proyek Android (resources/native/android/).<?php
return [
'fcm' => [
'project_id' => env('FCM_PROJECT_ID'),
'service_account_path' => env('FCM_SERVICE_ACCOUNT_PATH'),
],
];Saat aplikasi pertama kali dibuka, device harus mendaftarkan token ke backend:
<?php
use Native\Laravel\Facades\Notification;
// Dapatkan device token
$token = Notification::getDeviceToken();
// Kirim ke backend
Http::post('https://api.myapp.com/devices/register', [
'token' => $token,
'platform' => PHP_OS_FAMILY === 'Darwin' ? 'ios' : 'android',
'user_id' => auth()->id(),
]);Device token berubah seiring waktu (misal setelah update OS). Pastikan backend kalian bisa menangani token update.
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\PushMessage;
class TaskReminder extends Notification
{
use Queueable;
public function __construct(private string $taskTitle) {}
public function via($notifiable): array
{
return ['push'];
}
public function toPush($notifiable): PushMessage
{
return PushMessage::create()
->title('Task Reminder')
->body("Jangan lupa: {$this->taskTitle}")
->action('Open', url('/tasks'))
->badge(1);
}
}
// Kirim ke user
$user->notify(new TaskReminder('Review PR #42'));curl -X POST "https://fcm.googleapis.com/v1/projects/myproject/messages:send" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"message": {
"token": "DEVICE_TOKEN",
"notification": {
"title": "Task Reminder",
"body": "Jangan lupa: Review PR #42"
}
}
}'Saat user menekan notifikasi, aplikasi harus merespons:
<?php
use Native\Laravel\Facades\Notification;
Notification::listen('notification-tapped', function ($payload) {
$taskId = $payload['data']['task_id'];
// Navigasi ke halaman task
return redirect("/tasks/{$taskId}");
});Local notification dijadwalkan langsung dari PHP tanpa server backend:
<?php
use Native\Laravel\Facades\Notification;
// Kirim notifikasi lokal setelah 1 jam
Notification::local()
->title('Reminder')
->body('Sudah 1 jam, waktu untuk istirahat!')
->schedule(now()->addHour());Cocok untuk reminder, timer, atau notifikasi yang dihasilkan dari logic di perangkat.
Tip
Untuk pengujian push notification di simulator iOS, gunakan Firebase Console atau tool seperti Pusher Beams. Simulator tidak menerima push notification dari APNs production — gunakan environment sandbox.
Inti yang harus dibawa pulang:
push adalah cara paling mudah mengirim push.Notification::listen() untuk navigasi.Di episode 9 selanjutnya, kita akan membahas GPS, Vibration & Sensor Dasar — geolocation, haptic feedback, clipboard, dan sensor lainnya melalui bridge NativePHP. Sampai jumpa di episode 9!