In general, a Push notifications are the messages / Notifications that we receive in devices. This really makes the customers/subscribers engage with the client’s content and their updates on digital platforms.
Inside this article, we will see the concept of CakePHP 4 Firebase Push Notification to Android. Step by step guide to implement and use it.
If you are looking for an article which gives you the complete understanding about sending push notification using firebase to android devices then this article will help you to get this.
This article assuming you have the concept of little bit of firebase and it’s console.
Learn More –
- CakePHP 4 Connect Custom Helper To Database Table
- CakePHP 4 Connect Models with Multiple Databases
- CakePHP 4 Crop Image Before Upload Using Croppie.js
- CakePHP 4 Send Push Notification to IOS Using Firebase
Let’s get started.
CakePHP 4 Installation
To create a CakePHP project, run this command into your shell or terminal. Make sure composer should be installed in your system.
$ composer create-project --prefer-dist cakephp/app:~4.0 mycakephp
Above command will creates a project with the name called mycakephp.
Create Firebase Project and App
First we need to create a project in Firebase console for web application notification. To create project Click here to go to console.
Creating a Firebase Project at Firebase console.
Step #1
Step #2
Step #3
Step #4
Back to Firebase Console dashboard panel. We can see we will have a setup icon for android as you can see in this given image. Simply click on that Icon and then the process of Setting up the registration of App will start.
Register a Android App into Firebase Project.
After creating App from here, back to firebase console. Go to App settings by click on gear icon and Click on Cloud messaging tab. You will find the Server key, we need that.
So copy server key.
Successfully, we have now completed the whole process of Creating Firebase Project > Register Android App > Copy & Paste Server API Key.
Create API Route
We need to create a POST request api route which will be hit by Android device.
Open up the file routes.php from /config and copy the given route into and paste it.
//... $routes->connect( '/send-notification', ['controller' => 'Notification', 'action' => 'send'] ); //...
Create Controller
Open project into terminal and run this command to create controller file.
$ bin/cake bake controller Notification --no-actions
It will create NotificationController.php file inside /src/Controller folder. Open controller file and write this code into it.
<?php declare(strict_types=1); namespace App\Controller; class NotificationController extends AppController { public function initialize(): void { parent::initialize(); } public function send() { $device_token = $this->request->getData("device_token"); return $this->sendNotification($device_token, array( "title" => "Sample Message", "body" => "This is Test message body" )); } public function sendNotification($device_token, $message) { $SERVER_API_KEY = '<YOUR-SERVER-API-KEY>'; // payload data, it will vary according to requirement $data = [ "to" => $device_token, // for single device id "data" => $message ]; $dataString = json_encode($data); $headers = [ 'Authorization: key=' . $SERVER_API_KEY, 'Content-Type: application/json', ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $dataString); $response = curl_exec($ch); curl_close($ch); return $response; } }
The above code will send notification to a single device ID which we will pass into request.
Let’s say that we want to send notifications to multiple devices.
So how will we send?
<?php declare(strict_types=1); namespace App\Controller; class NotificationController extends AppController { public function initialize(): void { parent::initialize(); } public function send() { $device_token1 = $this->request->getData("device_token1"); $device_token2 = $this->request->getData("device_token2"); $device_token3 = $this->request->getData("device_token3"); return $this->sendNotification(array( $device_token1, $device_token2, $device_token3 ), array( "title" => "Sample Message", "body" => "This is Test message body" )); } public function sendNotification($device_tokens, $message) { $SERVER_API_KEY = '<YOUR-SERVER-API-KEY>'; // payload data, it will vary according to requirement $data = [ "registration_ids" => $device_tokens, // for multiple device ids "data" => $message ]; $dataString = json_encode($data); $headers = [ 'Authorization: key=' . $SERVER_API_KEY, 'Content-Type: application/json', ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $dataString); $response = curl_exec($ch); curl_close($ch); return $response; } }
When we send for a single device, we need to use
$data = [
"to" => $device_token, // for single device id
"data" => $message
];
And for multiple devices, we have the key as registration_ids. If we want use this registration_ids to send only to a single device, it also works. Only we need to pass a single device token.
$data = [
"registration_ids" => $device_tokens, // for multiple device ids
"data" => $message
];
We hope this article helped you to learn about CakePHP 4 Send Push Notification to Android Using Firebase in a very detailed way.
Online Web Tutor invites you to try Skillshike! Learn CakePHP, Laravel, CodeIgniter, Node Js, MySQL, Authentication, RESTful Web Services, etc into a depth level. Master the Coding Skills to Become an Expert in PHP Web Development. So, Search your favourite course and enroll now.
If you liked this article, then please subscribe to our YouTube Channel for PHP & it’s framework, WordPress, Node Js video tutorials. You can also find us on Twitter and Facebook.