HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何处理iOS 10中的UserNotifications操作大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@R_977_9447@安排这样的通知;
//iOS 10 Notification
if #available(iOS 10.0,*) {

    var displayDate: String {
        let dateFormatter = DateFormatter()
        dateFormatter.dateStyle = DateFormatter.Style.full
        return dateFormatter.String(from: datePicker.date as DatE)
    }
    let notif = UNMutableNotificationContent()


    notif.title = "I am a Reminder"
    notif.subtitle = "\(displayDatE)"
    notif.body = "Here's the body of the notification"
    notif.sound = UNNotificationSound.default()
    notif.categoryIdentifier = "reminderNotification"

    let today = NSDate()
    let interval = datePicker.date.timeIntervalSince(today as DatE)

    let notiftrigger = UNTimeIntervalNotificationtrigger(timeInterval: interval,repeats: falsE)

    let request = UNNotificationrequest(identifier: "reminderNotif",content: notif,trigger: notiftrigger)

    UNUserNotificationCenter.current().add(request,withCompletionHandler: { error in
        if error != nil {
            print(error)
           // completion(success: falsE)
        } else {
            //completion(Sucess: truE)
        }
        })
}

我已经在appDelegate中请求了权限,并且使用通知扩展程序的自定义视图显示通知正常.

我在appDelegate中为通知类别添加通知操作;这些也出现了.

//Notifications Actions 

private func configureUserNotifications() {
    if #available(iOS 10.0,*) {

        let tomorrowAction = UNNotificationAction(identifier: "tomorrowReminder",title: "Remind Me Tomorrow",options: [])

        let dismissAction = UNNotificationAction(identifier: "dismissReminder",title: "Dismiss",options: [])


        let category = UNNotificationCategory(identifier: "reminderNotification",actions: [tomorrowAction,dismissAction],intentIdentifiers: [],options: [.customDismissAction])

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

    } else {
        // fallBACk on earlier versions
    }
}

我在通知扩展名.plist文件中设置了相同的类别.在通知扩展中,我有以下内容用户点击操作时更改文本.

//Handle Notification Actions And update Notification Window 


 private func didReceive(_ response: UNNotificationResponse,completionHandler done: (UNNotificationContentextensionResponSEOption) -> Void) {

    if response.actionIdentifier == "tomorrowReminder" {
        print("Tomrrow Button Pressed")
        subLabel.text = "Reminder For Tomorrow"
        subLabel.textColor = UIColor.blue
        done(.dismissAndForWARDAction)
    }

    if response.actionIdentifier == "dismissReminder" {
        print("Dismiss Button Pressed")
        done(.dismiss)

    } else {
        print("Else response")
        done(.dismissAndForWARDAction)
    }

}

但是,文本没有改变,也没有调用任何语句;

在appDelegate中我有以下内容;

func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
    if #available(iOS 10.0,*) {
        UNUserNotificationCenter.current().delegate = self
        configureUserNotifications()

    }
}

extension AppDelegate: UNUserNotificationCenterDelegate {

@available(iOS 10.0,*)
private func userNotificationCenter(_ center: UNUserNotificationCenter,willPresent notification: UNNotification,withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void) {
    completionHandler([.alert,.sound])
}

@available(iOS 10.0,didReceive response: UNNotificationResponse,withCompletionHandler completionHandler: () -> Void) {

    print("Recieved Action For \(response.actionIdentifier)")

    if response.actionIdentifier == "tomorrowReminder" {
        print("Tomorrow Reminder")


        //Set new reminder for tomorrow using the notification content title



        completionHandler()
    }

    if response.actionIdentifier == "dismissReminder" {
        print("Dismiss Reminder...")
        completionHandler()
    }
}

}

这些函数都不是在appDelegate中实际调用的.我不确定更新扩展视图的问题是否与应用程序委托有关.我不这么认为,我已经关注了Apple的WWDC视频以及其他教程并查看了文档API并且无法弄清楚;

>为什么通知扩展文本标签不更新?
>为什么appDelegate中的函数没有被调用
>我如何使用app delegate中的通知内容来使用
为了行动?

PS:过去几周我一直在研究并试图解决这个问题,看起来相当直接,我不确定我错过了什么.我知道我不是唯一有这些问题的人.

解决方法

我没有检查你的整个代码,但至少,这些函数头需要改变如下:
func userNotificationCenter(_ center: UNUserNotificationCenter,withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

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

func didReceive(_ response: UNNotificationResponse,completionHandler done: @escaping (UNNotificationContentextensionResponSEOption) -> Void) {

简单的规则:
删除私有,添加@escaping.

您可能从Xcode收到了错误的建议,但是如果将它们设为私有,则不会生成Objective-C入口点. iOS运行时在内部使用Objective-C选择器,因此无法找到您的方法,因此它们不会被执行.

大佬总结

以上是大佬教程为你收集整理的如何处理iOS 10中的UserNotifications操作全部内容,希望文章能够帮你解决如何处理iOS 10中的UserNotifications操作所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。