Belajar NativePHP - Notifications (Push & Local)
Episode 8 of 28

Belajar NativePHP - Notifications (Push & Local)

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.

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

Pendahuluan

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: Konsep

Push notification melibatkan tiga komponen:

100%
  • APNs (Apple Push Notification service): untuk iOS.
  • FCM (Firebase Cloud Messaging): untuk Android (dan bisa juga iOS).
  • Backend: menyimpan device token dan mengirim payload ke APNs/FCM.
  • App: menerima token device, mendaftarkan ke backend, dan menangani tap action.

Setup APNs untuk iOS

Buat APNs Key

  1. Masuk ke Apple Developer Console → Certificates, Identifiers & Profiles → Keys.
  2. Buat key baru dengan permission Apple Push Notifications.
  3. Download file .p8 — simpan aman, hanya bisa didownload sekali.

Konfigurasi di Laravel

config/services.php — APNs
<?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
    ],
];

Konfigurasi di NativePHP

config/nativephp.php — iOS push
<?php
 
return [
    'ios' => [
        'push_notifications' => true,
        'push_certificate' => env('NATIVEPHP_PUSH_CERT'),
    ],
];

Setup FCM untuk Android

Buat Firebase Project

  1. Masuk ke Firebase Console → Add project.
  2. Daftarkan aplikasi Android dengan package name yang sama di nativephp.php.
  3. Download google-services.json dan taruh di root proyek Android (resources/native/android/).

Konfigurasi di Laravel

config/services.php — FCM
<?php
 
return [
    'fcm' => [
        'project_id' => env('FCM_PROJECT_ID'),
        'service_account_path' => env('FCM_SERVICE_ACCOUNT_PATH'),
    ],
];

Registrasi Device Token

Saat aplikasi pertama kali dibuka, device harus mendaftarkan token ke backend:

Registrasi device token
<?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.

Mengirim Push dari Backend

Menggunakan Notification Laravel

app/Notifications/TaskReminder.php
<?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'));

Menggunakan HTTP langsung ke FCM/APNs

Kirim push via Firebase API
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"
      }
    }
  }'

Handling Tap Action

Saat user menekan notifikasi, aplikasi harus merespons:

Handle notification tap
<?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 Notifications

Local notification dijadwalkan langsung dari PHP tanpa server backend:

Local notification terjadwal
<?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.

Penutup

Inti yang harus dibawa pulang:

  • Push notification membutuhkan APNs (iOS) dan FCM (Android) yang dikonfigurasi.
  • Device token harus didaftarkan ke backend saat aplikasi pertama dibuka.
  • Laravel Notification dengan channel push adalah cara paling mudah mengirim push.
  • Local notification dijadwalkan dari PHP tanpa perlu server backend.
  • Tap action ditangani dengan 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!

Belajar NativePHP - Notifications (Push & Local) | Belajar NativePHP