19/09/2019, 06:37

Cách tạo Web Push Notification

Người viết: NamNV609 Đã bao giờ bạn vào một trang nào mà nhận được một popup dạng như này chưa? Và bạn có thắc mắc nó là gì và hoạt động ra sao không? Vâng, định nghĩa chính xác nó là gì thì mình không rõ. Nhưng nó sử dụng OneSignal để thực hiện việc này. Nó giúp ...

Cách tạo Web Push Notification

Người viết: NamNV609

Đã bao giờ bạn vào một trang nào mà nhận được một popup dạng như này chưa?

Cách tạo Web Push Notification

Và bạn có thắc mắc nó là gì và hoạt động ra sao không? Vâng, định nghĩa chính xác nó là gì thì mình không rõ. Nhưng nó sử dụng OneSignal để thực hiện việc này. Nó giúp chúng ta nhận được thông báo khi có bài viết mới (kể cả khi không mở trang đó). Công nghệ được sử dụng ở đây được gọi là web push notification! Hôm nay chúng ta sẽ cùng đi làm một trang đơn giản. Giống như hình mình đã đưa để hiểu được khái niệm cơ bản về nó nhé. Để chế biến, chúng ta cần những nguyên liệu sau:

  • Tài khoản tại OneSignal
  • Tool giúp chúng ta public localhost ra internet (Ngrok hoặc LocalTunnel. Cá nhân mình chọn LocalTunnel vì nó hỗ trợ tạo subdomain) để test thằng OneSignal.
  • Laravel. Mình chọn PHP cho nhanh. Vì dù sao mình cũng là coder PHP.

OK, sau khi đã có nguyên liệu. Chúng ta cùng đi sơ chế nhé.

Sơ chế

OneSignal

Sau khi đăng ký tài khoản (nếu chưa có) tại OneSignal. Chúng ta đăng nhập và thực hiện tạo một application và thực hiện cài đặt như sau:

  • Trong phần App settings, tại Web Push Platforms ta chọn Google Chrome and Mozilla Firefox
  • Trong phần Configure web push, tại mục Choose Integration ta chọn Custom code, tại phần Site Setup ta nhập thông tin dạng như sau (mọi người hãy sửa lại cho phù hợp nhé):

Cách tạo Web Push Notification

Laravel

Sau khi xử lý xong phần OneSignal. Chúng ta sang phần tạo project Laravel. Do máy mình chỉ có PHP 5.6.30 nên mình dùng Laravel phiên bản v5.4.30 (mọi người có thể cài bản nào tùy ý). Đầu tiên chúng ta tạo Laravel project bằng lệnh:

Sau khi tạo project xong. Chúng ta đi thêm một vài migrations để phục vụ cho demo này. Trong demo này, chúng ta cần 03 bảng là:

  • posts: Để chứa bài viết
  • categories: Danh mục bài viết
  • users: Chứa thông tin đăng nhập của admin (chúng ta dùng luôn migrate mặc định của Laravel cho đỡ phải tạo nhiều)

Bắt đầu nào. Bảng categories trước:

Sau đó đến bảng posts:

Sau khi xong phần migration. Chúng ta sẽ tạo models tương ứng với các bảng. Đầu tiên là model Category:

Tiếp là model Post:

Cuối cùng là thêm đoạn sau vào model User:

Và để cho tiện quản lý, chúng ta sẽ tạo thư mục chứa các file models tại app/Models và chuyển 03 model là User.php, Category.php và Post.php vào đây.

Chế biến

Sau khi sơ chế xong các nguyên liệu. Chúng ta bắt đầu chế biến từng phần một nhé. Let’s get cooking!

User homepage

Phần user homepage bạn có thể xem tại pull request này: https://github.com/namnv609/laravel-webpush-notification-demo/pull/4/files

Chi tiết bài viết

Phần chi tiết bài viết các bạn có thể xem tại pull request này: https://github.com/namnv609/laravel-webpush-notification-demo/pull/5/files

Vậy là đã xong bên phần người dùng. Bây giờ chúng ta sang bên admin.

Admin login form

Phần admin login bạn có thể xem tại pull request này: https://github.com/namnv609/laravel-webpush-notification-demo/pull/3/files

Admin quản lý danh mục bài viết

Bạn có thể xem tại pull request này: https://github.com/namnv609/laravel-webpush-notification-demo/pull/7/files

Admin quản lý bài viết

Phần quan trọng nhất đây. Đây là lúc chúng ta cần xử lý nghiệp vụ nhiều hơn bình thường. Ngoài việc thêm bài viết (post) mới vào database thì chúng ta còn gọi lên OneSignal để push notification tới các users đã đăng ký nhận tin mới. Đầu tiên, chúng ta cài một package hỗ trợ chúng ta tương tác với OneSignal API. Package đó do mình tự viết từ trước.

Tiếp theo, chúng ta tạo event và listener để thực hiện gửi notification cho users thông quan OneSignal API:

Sau khi tạo hai file thành công. Chúng ta bắt tay vào xử lý.

Đầu tiên là file app/Events/NewPostAdded.php:

Ở đây, chúng ta khai báo biến $post để chứa thông tin về bài viết vừa được thêm mới. Và gán dữ liệu cho nó ở constructor. Tiếp, phần chính là ở đây. Phần lắng nghe sự kiện.

Chúng ta thực hiện ở file app/Listeners/NewPostNotification.php: