Cara Mengirim Notifikasi Push Seluler Dengan PHP dan Firebase

  • Post author:
  • Post category:Tutorial

Layanan Firebase Cloud Messaging (FCM) Google adalah cara gratis dan nyaman untuk mendistribusikan pemberitahuan push ke perangkat seluler. Ini bekerja dengan iOS, Android, dan target web, menghilangkan perbedaan antar platform. Anda mengirim payload Anda sekali ke API Firebase dan mendapatkan pengiriman real-time ke semua pengguna Anda.

Dalam artikel ini, kami akan menunjukkan cara menggunakan Firebase untuk mengirim pemberitahuan push dari kode PHP sisi server Anda. Kami menggunakan library php-firebase-cloud-messaging (PHP-FCM) pihak ketiga untuk lebih menyederhanakan integrasi Firebase.

Menguraikan Arsitektur

Berhasil mengirim pemberitahuan push memerlukan beberapa komponen untuk bekerja sama. Pertama, Anda memerlukan akun Firebase aktif dengan proyek yang mengaktifkan FCM. Kami akan menyiapkan ini dalam langkah-langkah berikut. Anda akan diberikan kunci server yang harus disertakan oleh backend PHP Anda dengan permintaan Firebase-nya.

Anda juga memerlukan aplikasi yang menggunakan SDK Firebase untuk menghasilkan token pendaftaran klien. Token ini harus dikirim ke backend PHP Anda. Simpan di database Anda bersama dengan informasi yang mengidentifikasi klien, seperti ID pengguna yang masuk ke dalam aplikasi Anda.

Karena artikel ini berfokus pada integrasi backend, kami akan menganggap Anda sudah memiliki aplikasi klien Firebase yang berlangganan notifikasi dan mengambil token pendaftaran. Anda dapat mengikuti dokumentasi untuk membuat aplikasi Android dasar jika Anda memerlukan proyek sampel. Dalam kode sisi klien Anda, kirim token Firebase ke titik akhir API yang akan Anda buat di layanan PHP Anda.

Setelah Anda memiliki beberapa token klien yang tersedia di server Anda, Anda dapat mengirim pemberitahuan push dengan membuat permintaan HTTP ke FCM API . Firebase akan melakukan mediasi dengan platform pengiriman notifikasi individual, mendorong peringatan Anda ke perangkat yang ditentukan. FCM secara internal memetakan setiap token klien ke platform yang benar, seperti Layanan Google Play untuk Android dan Apple Push Notification Service (APNS) untuk iOS.

Membuat Proyek Firebase Anda

Buka ke Firebase Console, login, dan klik “Tambahkan proyek” untuk mulai menyiapkan integrasi Anda. Beri nama proyek Anda dan klik melalui petunjuk konfigurasi awal. Klik roda gigi pengaturan di kiri atas saat Anda mencapai dasbor. Pilih “Pengaturan proyek” dari menu yang muncul.

Buka tab “Pesan Cloud” dan catat Server Key Anda. Layanan PHP Anda akan menggunakan kredensial ini untuk mengirim pemberitahuan ke Firebase API.

Anda harus mendaftarkan aplikasi seluler Anda di dalam Firebase console. Kembali ke beranda, gunakan tombol “Tambahkan aplikasi” untuk menambahkan komponen iOS dan Android Anda. Ikuti wizard penyiapan untuk menyediakan data aplikasi Anda dan mengunduh file konfigurasi Firebase-nya. Ini harus dirujuk saat Anda menginisialisasi Firebase di kode sisi klien.

Jika Anda membuat aplikasi iOS, Anda perlu menautkan kunci APNS ke Firebase secara manual. Klik roda gigi pengaturan di kiri atas, pilih “Pengaturan proyek,” dan arahkan kembali ke “Pesan Cloud.” Bagian “Aplikasi Apple” akan muncul ketika Anda memiliki komponen iOS di proyek Anda. Tambahkan kunci APNS atau sertifikat dari Akun Pengembang Apple Anda untuk menyelesaikan integrasi. Ini memungkinkan FCM mengirim pemberitahuan ke APNS atas nama Anda.

Mempersiapkan Aplikasi PHP Anda

Mulai proyek PHP Anda dengan menambahkan pustaka PHP-FCM menggunakan Komposer:

composer require sngrl/php-firebase-cloud-messaging

Dalam kode Anda, buat instance PHP-FCM Kelas klien:

use sngrlPhpFirebaseCloudMessagingClientClient;
 
$client = new Client();
$client -> setApiKey("FCM-SERVER-KEY");
$client -> injectGuzzleHttpClient(new GuzzleHttpClient());

 

Pass metode setApiKey() Kunci Server yang Anda salin dari Firebase API Anda menghibur. Dalam aplikasi nyata, ini harus disimpan dengan aman dan diperlakukan sebagai rahasia rahasia.

PHP-FCM bergantung pada instance Guzzle yang disuntikkan untuk membuat permintaan HTTP-nya. Guzzle otomatis disertakan sebagai dependensi sehingga Anda tidak perlu menginstalnya secara manual. Kami sedang membangun klien Guzzle baru dalam contoh di atas; Anda dapat menggunakan kembali instans yang ada jika Anda sudah memiliki Guzzle di aplikasi Anda.

Instans Klien FCM sekarang siap mengirim notifikasi ke akun FCM Anda.

Mendaftarkan Token Klien

Notifikasi didistribusikan ke token klien yang mewakili perangkat pengguna Anda. Seperti yang dijelaskan di atas, Anda harus mengekspos titik akhir API di aplikasi Anda yang memungkinkan aplikasi klien Anda mengirim token FCM mereka setelah pengguna masuk.

Berikut adalah contoh dasar tampilannya:

$token = $_POST["fcmToken"];
$userId = ((int) $_POST["userId"]);
 
/**
 * Call a function which persists a user/token 
 * association to your database
 */
saveUserFcmToken($userId, $token);

 

Untuk mengirim pemberitahuan push ke setiap perangkat yang terdaftar, pilih semua token di penyimpanan data Anda. Anda dapat mengirim ke pengguna tertentu dengan mengambil token yang terkait dengan ID mereka. Ini akan menampilkan notifikasi di semua perangkat yang mereka masuki, yang biasanya merupakan perilaku yang diinginkan.

Sending Notifications

PHP-FCM mengabstraksi setiap pengiriman notifikasi ke dalam objek Message. Ini membungkus Pemberitahuan – berisi teks yang ditampilkan kepada pengguna – dan opsi pengiriman apa pun yang Anda berikan.

Siapkan Pemberitahuan Anda terlebih dahulu:

use sngrlPhpFirebaseCloudMessagingClientNotification;
 
$notification = new Notification(
    "Notification Title",
    "The longer text of the notification, displayed below the title."
);

 

Next buat Pesan untuk mewakili pengiriman notifikasi:

use sngrlPhpFirebaseCloudMessagingClientMessage;
 
$message = new Message();
$message -> setNotification($notification);

 

Sebelum mengirim pesan Anda, tambahkan satu atau beberapa penerima. Metode addRecipient() mengambil instance Perangkat; kelas ini membutuhkan salah satu token klien FCM Anda sebagai parameter konstruktornya:

use sngrlPhpFirebaseCloudMessagingClientRecipientDevice;
 
$message -> addReceipient(new Device("FCM-CLIENT-TOKEN-USER-1"));
$message -> addReceipient(new Device("FCM-CLIENT-TOKEN-USER-2"));

 

Sekarang Anda siap mengirim pesan menggunakan Klien yang dibuat sebelumnya:

$client->send($message);

Notifikasi akan dikirimkan ke perangkat yang Anda tambahkan sebagai penerima.

Berikut adalah contoh lengkap yang menggabungkan kode penanganan notifikasi menjadi fungsi yang praktis:

use sngrlPhpFirebaseCloudMessagingClientClient;
use sngrlPhpFirebaseCloudMessagingClientMessage;
use sngrlPhpFirebaseCloudMessagingClientNotification;
use sngrlPhpFirebaseCloudMessagingClientRecipientDevice;
 
$client = new Client();
$client -> setApiKey("FCM-SERVER-KEY");
$client -> injectGuzzleHttpClient(new GuzzleHttpClient());
 
function sendNotification(
    Client $client,
    string $title,
    string $body,
    string ...$clientTokens) : void {
 
    $message = new Message();
 
    $message -> setNotification(
        new Notification(
            $title,
            $body
        )
    );
 
    foreach ($clientTokens as $clientToken) {
        $message -> addRecipient(new Device($clientToken));
    }
 
    $client -> send($message);
 
}
 
sendNotification($client, "Hello World", "Test Notification", "FCM-CLIENT-TOKEN-1");

 

Menangani Data Respons FCM

Metode Client::send() mengembalikan objek respons HTTP untuk permintaan notifikasi. Anda dapat memeriksa data respons yang dikodekan JSON untuk menentukan apakah notifikasi Anda berhasil dikirim.

$message = new Message();
$message -> setNotification(new Notification("Test", "Test"));
$message -> addReceipient(new Device("FCM-CLIENT-TOKEN-USER-1"));
$message -> addReceipient(new Device("FCM-CLIENT-TOKEN-USER-2"));
 
$response = $client -> send($message);
$responseData = $response -> json();

 

Array data respons memiliki struktur yang mirip dengan berikut:

{
    "success": 1,
    "failure": 1,
    "results": [
        {
            "message_id": 100
        },
        {
            "error": "InvalidRegistration"
        }
    ]
}

 

Array hasil berisi objek yang mewakili status pengiriman setiap perangkat yang Anda coba kirim. Ini akan cocok dengan urutan penerima yang ditambahkan ke Pesan melalui metode addRecipient(). Contoh JSON di atas menunjukkan bahwa hanya perangkat pertama yang menerima notifikasi. Pengiriman kedua gagal sehingga Anda harus menghapus token perangkat dari database Anda.

$recipients = [
    "FCM-CLIENT-TOKEN-USER-1",
    "FCM-CLIENT-TOKEN-USER-2"
];
 
$message = new Message();
$message -> setNotification(new Notification("Test", "Test"));
 
foreach ($recipients as $recipient) {
    $message -> addReceipient(new Device($recipient));
}
 
$response = $client -> send($message);
$responseData = $response -> json();
 
foreach ($responseData["results"] as $i => $result) {
    if (isset($result["error"])) {
        deleteUserFcmToken($recipients[$i]);
    }
}

 

Menambahkan Data Sewenang-wenang ke Notifications

Pesan dapat sertakan data arbitrer yang perlu dikomunikasikan ke aplikasi klien:

$message = new Message();
$message -> setNotification(
    new Notification(
        "Breaking News!",
        "A breaking news story is available."
    )
);
$message -> setData([
    "uri" => "/news/latest-stories"
]);

 

Client-side code dapat mengakses data ini untuk mengambil tindakan yang berbeda saat notifikasi diterima.

Menyetel Prioritas Pesan

FCM mendukung sistem prioritas pesan yang memungkinkan Anda meminta pengiriman segera ke perangkat target. Saat mode prioritas tinggi digunakan, FCM mencoba membangunkan perangkat Android yang sedang tidur untuk menangani notifikasi, meskipun aktivitas latar belakang sedang ditekan.

// Tunjukkan pesan prioritas tinggi
$message->setPriority("high");

This atribut harus digunakan dengan hati-hati. Mengirim terlalu banyak pesan prioritas yang tidak menghasilkan interaksi pengguna akan menyebabkan pengiriman Anda diprioritaskan. Mekanisme ini ditujukan untuk muatan yang benar-benar penting yang perlu menerobos penghematan baterai perangkat, pembatasan jaringan, dan pembatasan aktivitas latar belakang.

iOS menangani prioritas secara berbeda. Anda akan mendapatkan kesalahan jika mencoba mengirim pesan prioritas tinggi ke perangkat iOS. Anda dapat menggunakan nilai normal atau 5, yang terakhir menunjukkan pengiriman prioritas tinggi lebih disukai.

Time to Live

A Time to Live (TTL) instans pesan menentukan berapa lama itu tetap relevan. FCM tidak akan selalu dapat mengirimkan notifikasi tepat waktu. Perangkat target bisa offline atau dalam kondisi hemat baterai. FCM akan terus mencoba mengirimkan notifikasi, tetapi ini tidak selalu merupakan perilaku yang diinginkan. Beberapa pemberitahuan seperti pengingat kedaluwarsa mungkin tidak relevan bagi pengguna pada saat mereka menerimanya.

Gunakan metode setTimeToLive() untuk menentukan masa pakai pesan Anda. FCM akan berhenti mencoba mengirimkannya setelah TTL kedaluwarsa.

$message = new Message();
$message -> setNotification(
    new Notification(
        "Server rotation scheduled for 12pm",
        "Cancel within the next 10 minutes."
    )
);
$message -> setTimeToLive(600);

 

Lencana (badges) di iOS

iOS menggunakan lencana merah pada ikon layar beranda untuk menunjukkan jumlah notifikasi yang belum dibaca yang tersedia dalam aplikasi. Anda dapat mengubah lencana numerik aplikasi Anda dengan metode setBadge() pada objek Notification:

$message = new Message();
$notification = new Notification(
    "Server rotation scheduled for 12pm",
    "Cancel within the next 10 minutes."
);
$notification -> setBadge(1);
$message -> setNotification($notification);
$message -> setTimeToLive(600);

 

Kelas Notifikasi juga memiliki metode untuk perilaku khusus platform lainnya. Anda dapat mengubah ikon notifikasi di perangkat Android (setIcon()), menetapkan suara untuk diputar (setSound()), dan menggunakan tag (setTag()) untuk mengontrol apakah notifikasi sebelumnya diganti dengan pengiriman baru. Properti ini dan keunikan implementasi platformnya dijelaskan dalam dokumentasi API FCM.

Kesimpulan

FCM adalah cara ideal untuk mulai mengirim pemberitahuan push ke perangkat seluler dari backend PHP. Ini menangani interaksi dengan implementasi push khusus platform seperti APNS dan Layanan Google Play, mengurangi jumlah kode yang Anda perlukan untuk menulis.

Library PHP Firebase Cloud Messaging membungkus FCM API dalam kelas dan metode PHP yang nyaman. Untuk kontrol lebih lanjut, Anda dapat memanggil FCM API secara langsung melalui library HTTP PHP seperti Guzzle. Anda mungkin harus mengambil pendekatan ini jika Anda perlu menggunakan opsi notifikasi yang tidak diekspos oleh PHP-FCM.

Itulah berita seputar Cara Mengirim Notifikasi Push Seluler Dengan PHP dan Firebase, semoga bermanfaat. Disadur dari HowToGeek.com.