Tương tác Notifications với Notification Actions trong iOS 8

122

Đây là bài hướng dẫn từng bước khá hay được submit bởi tác giả Yari D’areglia trình bày cách sử dụng notification actions trong iOS 8 để tạo ra sự tương tác với notifications.

Hướng dẫn này bao gồm cách thiết lập notifications của bạn với action button tuỳ biến, lên lịch cho notifications và xử lý action được chọn bởi người dùng.

Hình ảnh dưới đây là một ví dụ từ bài hướng dẫn:

iOS 8 được giới thiệu với một loạt những cải tiến và trong bài viết này sẽ trình bày một trong những điều mới mẻ đó: Notification Actions.

Với những tính năng mới, người dùng có thể trực tiếp tương tác với những notification push hoặc local mà không cần mở ứng dụng lên. Một ví dụ đơn giản? Một ứng dụng todo để thể hiện một lời nhắc về công việc cho người dùng thông qua local notification. Ngay bây giờ, chúng ta có thể dễ dàng thêm một button vào tin nhắn notification để đánh dấu một công việc, được thực hiện trực tiếp trong banner hoặc alert notification.

LET’S CODE

Để trình bày cho bạn cách Notification Actions làm việc, chúng tôi đã tạo một ứng dụng counter đơn giản mà nó sẽ thể hiện một tin nhắn mỗi 60 giây, hỏi người dùng tăng hay giảm giá trị counter. Nó là một ứng hữu ích, phải không?

Để cho đơn giản, project này sẽ chỉ làm việc với local notification nhưng tất cả những bước tiếp theo đều có thể dễ dàng phù hợp với Remote notifications (push notifications). Từ bây giờ, các bạn hãy nhớ khi nói về notifications có nghĩa là cả local và push notifications.

Bạn có thể download source code và hãy bắt đầu nhìn vào file AppDelegate.swift

ACTIONS, CATEGORIES AND SETTINGS

Với iOS 8 chúng ta thêm thông tin mới này cho notification:

Actions: mô tả những hành động mà người dùng có thể thực hiện để tương tác với tin nhắn notification. Chúng được trình bày như một button. Chúng được định nghĩa bằng UIUserNotificationAction class.

Categories: Chúng ta nhóm những actions vào trong categories và bất kỳ notification nào chúng ta đều có thể thiết lập category cụ thể. Chúng được định nghĩa bằng UIUserNotificationCategory class.

Settings: Điều này cần được đăng ký bởi ứng dụng và chúng chứa tất cả categories mà chúng ta khởi tạo. Settings được định nghĩa bằng UIUserNotificationSettings class.

Với ứng dụng counter ở trên, chúng ta cần 3 actions:

Tăng(cộng 1), giảm (trừ 1) và reset (đưa về giá trị 0). Để tạo ra 3 actions này chúng ta cần đến class UIUserNotificationAction:

 

 

Những ví dụ UIUserNotificationAction ở trên được thực hiện với một loạt các thành phần:

identifier: Chuỗi này là một id duy nhất mà chúng ta sẽ sử dụng sau để định danh hành động được chọn bởi người dùng.

title: Đây đơn giản chỉ là tiêu đề của button cho hành động đó.

activationMode: Chúng ta có 2 lựa chọn: foreground hoặc background. Nếu hành động của bạn cần hiện ra giao diện của ứng dụng để tương tác thì sẽ chọn foreground, ngược lại sẽ chọn background và hành động sẽ diễn ra mà không khởi động ứng dụng.

authenticationRequired: Đây là tham số được dùng chỉ khi thiết lập activationMode  là background. Trong trường hợp này, thiết lập authenticationRequired là true, người dùng cần thêm mã mở khoá để khởi động action ở background.

destructive: Nếu giá trị này là true thì action button có nền màu đỏ (hữu ích cho những loại hành động cảnh báo, cân nhắc).

Bây giờ chúng ta có một danh sách các action mà chúng ta cần đặt chúng vào trong một UIUserNotificationCategory và sau đó sẽ lưu trữ trong UIUserNotificationSettings.

Đoạn code để thực hiện công việc trên cực kỳ đơn giản và sẽ bắt đầu với việc tạo ra category:

Chúng ta thiết lập identifier của category bởi vì nó cần nhận ra category của mỗi action. Sau đó chúng ta sẽ lưu trữ những action trước đó vào bên trong category, sử dụng giao thức setActions:forContext: . Các bạn có thể thấy chúng ta thiết lập 2 context khác nhau, default và minimal.

Minimal context sẽ đề cập đến notification banner,  màn hình khoá của thiết bị và khu vực notification khi kéo từ cạnh trên màn hình thiết bị. Trong trường hợp này notifications actions có thể được hiển thị ít hơn hai actions.

Trong khi default context chỉ xuất hiện khi người dùng chấp nhận hiển thị notifications cho ứng dụng của bạn dưới dạng alert, trong trường hợp này chúng ta nhận được tất cả những actions mà chúng ta đã thiết lập trước đó.

Ở thời điểm này chúng ta có thể xây dựng các thiết lập bằng code:

Chúng ta sẽ chọn kiểu notification mà ứng dụng cần và chúng ta sẽ xây dựng những thiết lập thông qua những kiểu này và tất cả những categories được tạo ra (trong trường hợp này chỉ có một).

Việc cuối cùng là gọi function registerUserNotificationSettings trong hàm shared application.

Khi đoạn code này được gọi lần đầu tiên, người dùng sẽ được gợi ý với một bảng alert hỏi về quyền để hiển thị notifications, chính xác là chúng tôi đã sử dụng với notifications trong iOS 7.

SCHEDULE THE NOTIFICATIONS

Đoạn code mà chúng ta sử dụng để sắp xếp thời gian cho Interactive Notifications chính xác là giống nhau mà chúng ta viết cho notification cơ bản với sự bổ sung một thuộc tính để trỏ tới category:

Lưu ý là thuộc tính category lưu trữ những giá trị tương tự mà chúng ta đã thiết lập từ trước như category identifier (“COUNTER_CATEGORY”). Vì vậy bây giờ chúng ta chắc chắn rằng khi những notifications này được gửi đi thì nó sẽ hiển thị lên những actions mà được lưu trữ trong category với id “COUNTER_CATEGORY”.

HOW TO HANDLE THE ACTIONS

Vậy khi ứng dụng này khởi động một notification với 3 actions mỗi phút. Nếu ứng dụng không trong trạng thái foreground thì người dùng sẽ được gợi ý với dạng notification alert và người dùng có thể chọn một trong hai (minimal context) hoặc 3 (default context) actions có sẵn.

Những gì chúng ta cần bây giờ là một cách để thực hiện các hành động cho phép người dùng lựa chọn. Hàm application:handleActionWithIdentifier:forLocalNotification:completionHandler chính xác là những gì chúng ta cần (có một hàm tương tự cho remote notifications).

Vậy là đủ, hàm này sẽ thông qua identifier của action được chọn bởi người dùng. Khi chúng ta thiết lập actions chúng ta sử dụng 3 identifiers: INCREMENT_ACTION, DECREMENT_ACTION và RESET_ACTION. Chúng ta cũng có thể truy cập vào notification.category để đảm bảo rằng nó sẽ phù hợp với identifier mà chúng ta thiết lập cho category (COUNTER_CATEGORY).

Hàm completionHandler là một closure mà chúng ta cần để gọi khi tất cả hành động xử lý đã xong.

Đây là đoạn code:

Class Counter là một class mà chúng ta đã xây dựng như là model chỉ để quản lý những giá trị đang hiện hành của counter (bạn có thể kiểm tra code của nó trong file Counter.swift) như là khi bạn thấy chúng ta chỉ tăng, giảm hoặc thiết lập lại counter phụ thuộc vào action mà người dùng đã chọn.

Lưu ý: Code của project này có thể hơi khác bởi vì tác giả đã đóng gói những chuỗi identifiers vào trong một enum. Để cho dễ nắm bắt, trong bài viết này tác giả sử dụng những chuỗi identifier trực tiếp.

Nguồn: IDE Academy via Maniacdev via thinkandbuild.it