How to do Quick Replay of notification like whats app or iMessage in iPhone?

Viewed 500

I want to do code for Quick replay in iPhone app, Please know we can i achieve it? I have tried notification extension but with it replay is not possible.

As Displayed in the below snap, I want to do same chat replay without open the app. When message come for the app.

enter image description here

1 Answers

You can use UNTextInputNotificationAction and handle the text entered with UNTextInputNotificationResponse.

Here is a working example.


import UIKit

class ViewController: UIViewController {
    
    @IBOutlet weak var userTextLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Part 1: Setup
        let textAction = UNTextInputNotificationAction(identifier: "TextAction",
                                                       title: "",
                                                       options: .authenticationRequired,
                                                       textInputButtonTitle: "Send",
                                                       textInputPlaceholder: "Type here")
        
        let quickReplyCategory = UNNotificationCategory(identifier: "QUICK_REPLAY",
                                                        actions: [textAction],
                                                        intentIdentifiers: [],
                                                        options: .customDismissAction)
        
        let center = UNUserNotificationCenter.current()
        // Request permission to display alerts and play sounds.
        center.requestAuthorization(options: [.alert, .sound])
        { (granted, error) in
            // Enable or disable features based on authorization.
        }
        
        center.setNotificationCategories([quickReplyCategory])
    }
    
    @IBAction func buttonPress(_ sender: UIButton) {
        
        // Part 2: Trigger
        let now = Date()
        
        var components = Calendar.current.dateComponents([.hour, .minute, .second], from: now)
        components.second = (components.second ?? 0) + 2
        
        let trigger = UNCalendarNotificationTrigger(dateMatching: components, repeats: false)
        
        // Content
        let content = UNMutableNotificationContent()
        content.title = "New message"
        content.body = "Sounds good?"
        
        content.categoryIdentifier = "QUICK_REPLAY"
        
        // Create the request
        let uuidString = UUID().uuidString
        let request = UNNotificationRequest(identifier: uuidString,
                                            content: content, trigger: trigger)
        
        // Schedule the request with the system.
        let notificationCenter = UNUserNotificationCenter.current()
        notificationCenter.add(request) { (error) in
            if error != nil {
                // Handle any errors.
            }
        }
        
        notificationCenter.delegate = self
    }
    
}


// PART 3: Handle
extension ViewController: UNUserNotificationCenterDelegate {
    
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        completionHandler([.alert, .badge, .sound])
    }
    
    func userNotificationCenter(_ center: UNUserNotificationCenter,
                                didReceive response: UNNotificationResponse,
                                withCompletionHandler completionHandler:
        @escaping () -> Void) {
        
        // Perform the task associated with the action.
        print(response.actionIdentifier)
        
        if let textResponse = (response as? UNTextInputNotificationResponse) {
            userTextLabel.text = textResponse.userText
        }
        
        // Always call the completion handler when done.
        completionHandler()
    }
}

iOS Quick Reply in notification

Related