如何在iPhone中快速重播通知,例如什么应用程序或iMessage?

时间:2017-11-24 09:52:30

标签: ios objective-c iphone push-notification chat

我想在iPhone应用中为快速重播做代码,请知道我能实现吗?我尝试了通知扩展程序,但重播是不可能的。

如下面的快照中所示,我想在不打开应用程序的情况下进行相同的聊天重播。当消息来到应用程序时。

enter image description here

1 个答案:

答案 0 :(得分:0)

您可以使用UNTextInputNotificationAction来处理用UNTextInputNotificationResponse输入的文本。

这是一个可行的示例。


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