CakePHP 4 Firebase Push Notification to Android

Reading Time: 8 minutes
1,892 Views

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 –

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.