Notification Tutorial – part 1

Apr 02, 2021

Chào mọi người, mình là ĐạiNLT thuộc team ios của miichisoft. Trong chuỗi bài viết này mình sẽ hướng dẫn mọi người tất tần tật về notification của ios.

Notification trong ios có 2 loại:
- Local Notification
- Remote Notification(Push Notification)

Trong bài viết này mình sẽ cùng mọi người tìm hiểu về local notification, một loại notification mà app chúng ta có thể tự thực thi không cần thông qua APNs và tất nhiên sẽ không cần Apple developer account cũng như không mất tiền =)). Let’s get started.

Đúng như cái tên của nó, chúng ta có thể tạo ra local notification ở trong app của chúng ta. Nó sẽ đẩy thông báo đấy đến hệ thống và hệ thống sẽ hiển thị notification đó, khi user tương tác với notification đó hệ thông sẽ callback về app của chúng ta, dưới đây là hình minh hoạ

Local Notification Process

Giờ hãy bắt tay vào code để hiểu hơn về nó nào. Hãy tạo một project và vào file Appdelegate và import UserNotification

Nếu mọi người chưa biết thì UserNotification là thư viện được apple cung cấp để tương tác với Notification, mọi người có thể tìm hiểu thêm tại đây.

Sau đó ta sẽ thêm đoạn code để xin quyền thực hiện notification và gọi nó ở didFinishLaunching.

sau khi làm xong bước này hãy chạy project và mọi người sẽ thấy máy ảo hiển thị như sau:

Sau khi ấn allow thì ta đã có khả năng sử dụng local notification rồi :v.Hãy vào viewController và tạo một button như này:

Tạo cho nó một action như này:

  1. Đầu tiên chúng ta sẽ tạo content cho nó
  2. Tiếp theo tạo cho nó 1 trigger để nhận biết khi nào thì show notification, với local notification thì có 3 loại trigger:
  • TimeInterval
  • Calendar
  • Location

Mọi người có thể tìm hiểu thêm tại đây

3. Tạo một notification request với content và trigger chỉ định

4. Thêm request vào UNUserNotificationCenter

Giờ hãy chạy app lên và click vào button sau đó đưa app xuống background, mọi người sẽ thấy như này.

Nhưng tại sao lại cần phải đưa app xuống background vậy nhỉ?

Đó là vì mặc định app của chúng ta sẽ không cho phép hiển thị notification ở foreground.

Muốn hiển thị notification ở foreground chúng ta cần phải implement UNUserNotificationCenterDelegate

Hãy vào Appdelegate và thêm đoạn code sau ở dưới cuối:

Lưu ý: ở đây mình đã dùng .banner thay vì .alert vì project mình đang để target là ios 14, nếu mọi người để target thấp hơn thì vẫn nên dùng .alert nha ^_^

Giờ hãy gán delegate của UNUserNotificationCenter cho delegate ở ngay đầu hàm didFinishLaunching:

Giờ chạy lại app và ấn nút push lần nữa, bây giờ app của chúng ta đã có thể hiển thị notification ở ngay trên foreground rồi <3

Nãy giờ mọi người có thắc mắc tại sao khi tạo request ta cần phải có identifier không?

Đó là vì chúng ta cần nó để quản lý notification đấy, hãy vào notification center của máy ảo và nó sẽ trông như thế này:

Ủa kỳ ghê ta, nảy giờ mình tạo nhiều notification lắm rồi mà nhỉ?

Là do khi ta gửi notification thì system sẽ check identifier của notification đó, nếu đã có notification với identifier đó rồi thì thay vì tạo một notification mới system sẽ thay thế notification cũ với notification mới này. Nên dù ta có tạo ra bao nhiêu notification với một identifier thì system vẫn chỉ hiện thị 1 cái thôi :v.

Ngoài ra identifier còn sử dụng cho nhiều trường hợp khác nữa, mọi người có thể tự tìm hiểu thêm công dụng của nó nhé (◦‿<).

Giờ hãy đến với phần action, notification có 2 loại action chính đó là:

  • Default action
  • Custom actions

Default action là mặc định khi user click vào notification.

Custom action là những action chúng ta thêm vào để user có thể làm một hành động cụ thể nào đó, hãy vào ví dụ nào.

Thêm method dưới vào appdelegate:

  1. Tạo một custom action
  2. Tạo category với action đó
  3. Set category cho UNUserNotificationCenter

Lưu ý: chỉ nên set category một lần trong suốt vòng đời của app, đó là lý do mình đặt nó ở appdelegate

Giờ hãy gọi nó trong didFinishLaunching:

Sau đó quay lại viewController và set categoryIdentifier cho content:

Chạy lại app và click button, sau đó kéo notification xuống và bạn sẽ thấy như sau:

Hiện tại thì click vào nút join cũng sẽ không khác gì default action vì ta vẫn chưa gán action gì đặc biệt cho nó, ta sẽ xử lý nó như sau:

Khi user ấn vào nút join sysem sẽ delegate cho chúng ta qua func trên kèm theo actionIdentifier, mọi người có thể check identifier và gán action cho nó.

Tổng kết:

Vậy là chúng ta đã tìm hiểu qua về local notification rồi hy vọng bài viết này sẽ giúp ích cho mọi người trong công việc. nếu có gì thắc mắc mọi người có thể liên hệ mình qua email: dainlt@miichisoft.net  hoặc skype: nguyenletandai

Mọi người có thể tự tìm hiểu thêm tại:

UserNotification Framework

Local Notification

Cảm ơn đã đọc bài viết của mình <3 <3 <3.

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.