Swift:单击推送通知操作按钮时在文本字段中写入并处理它

Posted

技术标签:

【中文标题】Swift:单击推送通知操作按钮时在文本字段中写入并处理它【英文标题】:Swift: Write in textfield when clicking on push notification action button and handle it 【发布时间】:2018-07-17 15:40:53 【问题描述】:

我正在使用Xcode 9.4.1 (9F2000)Swift

我在AppDelegate中有这个代码:

func showPushButtons()
    let replyAction = UNNotificationAction(
        identifier: "reply.action",
        title: "Reply to this message",
        options: [])

    let pushNotificationButtons = UNNotificationCategory(
        identifier: "allreply.action",
        actions: [replyAction],
        intentIdentifiers: [],
        options: [])

    UNUserNotificationCenter.current().setNotificationCategories([pushNotificationButtons])

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) 

    let action = response.actionIdentifier
    let request = response.notification.request
    let content = response.notification.request.content.userInfo

    if action == "reply.action"
        print("Reply button clicked")

        completionHandler()
    

这使得以下内容:

收到推送通知时,将显示一个名为 Reply to this message 的操作按钮。

目前,当点击按钮时,控制台打印Reply button clicked

我想做什么:

如果我单击按钮,则会出现一个文本字段和键盘(如消息传递应用程序所知)。在写了一些文字并提交/发送后,我想在AppDelegate 中收到这条消息来处理它。

你知道怎么做吗?有什么提示吗?

【问题讨论】:

Adding text field in Remote Notification, ios 8的可能重复 【参考方案1】:

此代码现在可以使用:

func showPushButtons()
    let replyAction = UNTextInputNotificationAction(
        identifier: "reply.action",
        title: "Reply on message",
        textInputButtonTitle: "Send",
        textInputPlaceholder: "Input text here")

    let pushNotificationButtons = UNNotificationCategory(
        identifier: "allreply.action",
        actions: [replyAction],
        intentIdentifiers: [],
        options: [])

    UNUserNotificationCenter.current().setNotificationCategories([pushNotificationButtons])

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) 

    if  response.actionIdentifier  ==  "reply.action" 
        if let textResponse =  response as? UNTextInputNotificationResponse 
            let sendText =  textResponse.userText
            print("Received text message: \(sendText)")
        
    
    completionHandler()

它的作用:如果您收到带有"category":"allreply.action" 的推送通知并且您用力点击它,则会出现一个文本字段和键盘,您可以使用print("Received text message: \(sendText)") 打印它。

不要忘记从didFinishLaunchingWithOptions 致电showPushButtons() 并准备应用程序以接收(远程)推送通知。

【讨论】:

知道为什么上面的代码在 iOS 13 中不起作用吗?有什么提示吗?【参考方案2】:

用这个替换你的replyAction

let replyAction = UNTextInputNotificationAction(identifier: "reply.action", title: "message", options: [], textInputButtonTitle: "Send", textInputPlaceholder: "type something …")

这应该可以解决您的问题。

【讨论】:

以上是关于Swift:单击推送通知操作按钮时在文本字段中写入并处理它的主要内容,如果未能解决你的问题,请参考以下文章

三个文本字段值的总和,无需单击按钮(Swift - Xcode)

iOS 推送通知消息 - 单击查看按钮后的操作

单击推送通知的操作按钮时,如何转到最新的 DetailView?

Swift 本地推送通知操作视图

Apple 推送通知 - 查看按钮操作

Swift,iOS - 单击以显示文本字段时按钮向上移动?然后搬回去?