+2

Firebase cloud messaging với Laravel schedule [Backend]

I. Lời mở đầu

Hôm nay mình sẽ chia sẻ cách mình đã push notifications lên các thiết bị (bao gồm app và web). Để thực hiện được việc này mình đã sử dụng schedule của Laravel và Firebase Cloud Messaging.

II. Thực hiện

1. Create a new project

Mình sẽ bỏ qua bước này để các bạn tìm hiểu. Để setup 1 database thì bạn cần truy cập vào https://firebase.google.com/ , rồi khởi tạo 1 database mới.

2. Setup Env ( Cài đặt môi trường) trên laravel

Đầu tiên cần thêm vào package laravel-firebase:

composer require kreait/laravel-firebase

Sau khi cài đặt xong package thì set vào file .env 2 biến mới

FIREBASE_CREDENTIALS=config/name-file.json
FIREBASE_DATABASE_URL=https://name-project.firebaseio.com

Đọc đến đây sẽ có bạn thắc mắc là giá trị 2 biến môi trường ở trên kia lấy đâu ra? Đối với FIREBASE_CREDENTIALS các bạn sẽ vào phần project mà đã tạo 1 database ở bước 1. Chọn project setting >> service accounts, sau đó chọn Generate new private key lúc này bạn sẽ tải xuống 1 file json. Đưa file đó vào thư mục config. Đối với FIREBASE_DATABASE_URL thì sẽ lấy giá trị từ databaseURL trong file json bạn vừa tải ở trên.

Xong các bước trên thì chạy câu lệnh để khởi tại file firebase trong thư mục config. Trong file này sẽ gọi đến 2 biến môi trường setup ở trên để kết nối với firebase.

php artisan vendor:publish --provider="Kreait\Laravel\Firebase\ServiceProvider" --tag=config

Vậy là đã xong phần setup môi trường!!!

3. Xử lý gửi notifications

Mình sẽ tạo 1 job là SendNotifications, lưu ý trong job này bạn sẽ không implements ShouldQueue. Trong phần handle mình sẽ gọi đến SDK app('firebase.messaging'), có rất nhiều cách và format để gửi 1 notification. Ở đây mình sẽ sử dụng format gửi theo topic như đoạn code dưới:

public function handle()
{
       $messaging = app('firebase.messaging');
       $message = CloudMessage::fromArray([ 
           'topic' => 'ios',
           'notification' => [
               'body' => 'Xin chào đây là thông báo đầu tiên',
               'title' => 'Thông báo đầu tiên'
           ],
           'time' => Carbon::now()->timestamp
       ]);
 }

4. Sử dụng schedule để push notification

Để sử dụng schedule mình sẽ vào file Kernel.php trong này bạn sẽ gọi đến job mình mới tạo ở bước trên trong function schedule. Oke vậy là đã xong phần backend rồi !!! Đến đây để nhận được thông báo trên các thiết bị thì chúng ta cần xử lý tiếp phía fontend để hoàn chỉnh toàn bộ chức năng. Phần fontend mình sẽ chia sẻ tiếp trong 1 bài viết khác.

protected function schedule(Schedule $schedule)
{ 
 $schedule->job(new SendNotification)->everyMinute();
}

III. Kết bài

Trên đây, mình đã chia với các bạn cách push notifications trong laravel phần backend. Hy vọng, bài viết này của mình sẽ giúp ích cho các bạn xử lý notifications, bài viết này còn nhiều thiếu xót mong các bạn góp ý để mình hoàn thiện thêm.

Cám ơn các bạn đã đọc bài viết.

IV. Tài liệu tham khảo

https://github.com/kreait/laravel-firebase https://firebase-php.readthedocs.io/en/latest/cloud-messaging.html#send-messages-to-multiple-devices-multicast


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.