func notificationFires(){ /** URL Code: if let url = URL(string: "tel://") { UIApplication.shared.open(url,options: [:]) }**/ let call = UNNotificationAction(IDentifIEr:"call",Title:"Call",options:[.foreground]) let cancel = UNNotificationAction(IDentifIEr: "cancel",Title: "Cancel",options: [.destructive ]) let category = UNNotificationcategory(IDentifIEr: "category",actions: [call,cancel],intentIDentifIErs: [],options: []) UNUserNotificationCenter.current().setNotificationCategorIEs([category]) let notification = UIlocalnotification() notification.category = "category" // 2 notification.soundname = UIlocalnotificationDefaultSoundname notification.fireDate = datePicker.date // 3 if textFIEld.text == "" { notification.alertbody = "You have a call right Now!" } else{ notification.alertbody = self.textFIEld.text } // 4 notification.timeZone = NSTimeZone.default // 5 // 6 notification.applicationIconBadgeNumber = 1 // 7 func application(application: UIApplication!,handleActionWithIDentifIEr IDentifIEr:String!,forlocalnotification notification:UIlocalnotification!,completionHandler: (() -> VoID)!){ if (IDentifIEr == "call"){ if let url = URL(string: "tel://2162964785") { UIApplication.shared.open(url,options: [:]) } }else if (IDentifIEr == "cancel"){ } } UIApplication.shared.schedulelocalnotification(notification) func application(application: UIApplication,dIDReceivelocalnotification userInfo: [NSObject : AnyObject],fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> VoID) { print("RecIEved: notification") let center = UNUserNotificationCenter.current() center.removeDeliverednotifications(withIDentifIErs: ["notification"]) }}解决方法 假设您的通知正常,您可以符合UNUserNotificationCenterDelegate来处理“调用” *** 作.
就像是:
func userNotificationCenter(_ center: UNUserNotificationCenter,dIDReceive response: UNNotificationResponse,withCompletionHandler completionHandler: @escaPing () -> VoID) { if response.actionIDentifIEr == "call" { let body = response.notification.request.content.body if let url = URL(string: "tel://\(body)") { UIApplication.shared.open(url,options: [:],completionHandler: nil) } } }
主体常量将设置为您要“打开”的电话号码.
此外,重要的是要注意这必须在实际设备上进行测试.打开tel方案在模拟器中什么都不做.
UNUserNotificationCenterDelegate API参考:https://developer.apple.com/reference/usernotifications/unusernotificationcenterdelegate
编辑:
您不需要调用委托方法.相反,你实现它.委托方法由UNUserNotificationCenter调用.
为了使其正常工作,确保将UNUserNotificationCenter.current()委托属性设置为符合UNUserNotificationCenterDelegate协议的类非常重要.
例如,如果您在AppDelegate中处理通知,则可能具有以下方法:
func callNotification() { let center = UNUserNotificationCenter.center() // Todo: - Create your actions,category,content,trigger and request... center.delegate = self // important! center.removeAllPendingNotificationRequests() center.add(request,withCompletionHandler: nil)}
上面的方法将负责定义您的通知并安排它.为简洁起见,我已经省略了所有定义通知的代码,因为您表明这是有效的.相反,您应该注意委托属性设置为self.
然后在扩展中,您将使AppDelegate符合UNUserNotificationCenterDelegate并实现所需的方法.
extension AppDelegate: UNUserNotificationCenterDelegate { func userNotificationCenter(_ center: UNUserNotificationCenter,completionHandler: nil) } } }}
现在,因为您的AppDelegate符合UNUserNotificationCenterDelegate协议并且您将self(AppDelegate)设置为UNUserNotificationCenter的委托,所以将调用userNotification(_:dIDReceive:withCompletionHandler :)方法的实现.
总结以上是内存溢出为你收集整理的swift – 如何创建URL按下通知 *** 作时运行?全部内容,希望文章能够帮你解决swift – 如何创建URL按下通知 *** 作时运行?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)