WatchOS中的本地通知3

我正在使用WatchOS 3testing版,并尝试在手表上发起本地通知。 界面只是一个button,在下面的代码中调用“buttonPressed”方法。 该应用程序运行良好,但我从来没有得到通知。 应用程序结构是Xcode 8对于WatchKit应用程序的默认值。

此代码位于WatchKit扩展的InterfaceController.swift文件中

我错过了一些完全明显的东西?

@IBAction func buttonPushed() { sendMyNotification() } func sendMyNotification(){ if #available(watchOSApplicationExtension 3.0, *) { let center = UNUserNotificationCenter.current() center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in // Enable or disable features based on authorization. } let content = UNMutableNotificationContent() content.title = NSString.localizedUserNotificationString(forKey: "Hello!", arguments: nil) content.body = NSString.localizedUserNotificationString(forKey: "Hello_message_body", arguments: nil) content.sound = UNNotificationSound.default() content.categoryIdentifier = "REMINDER_CATEGORY" // Deliver the notification in five seconds. let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 5, repeats: false) let request = UNNotificationRequest.init(identifier: "FiveSecond", content: content, trigger: trigger) // Schedule the notification. center.add(request ,withCompletionHandler: nil) } else { // Fallback on earlier versions } } 

据此。 您应该每次都为请求指定一个唯一的新标识符。

矿:

 let id = String(Date().timeIntervalSinceReferenceDate) let request = UNNotificationRequest(identifier: id, content: content, trigger: trigger) 

本地通知watchOS swift 4.0

 var content = UNMutableNotificationContent() content.title = "ALERT !" content.body = msg content.sound = UNNotificationSound.default() as? UNNotificationSound // Time var trigger: UNTimeIntervalNotificationTrigger? trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false) // Actions var snoozeAction = UNNotificationAction(identifier: "Track", title: "Track", options: .foreground) var category = UNNotificationCategory(identifier: "UYLReminderCategory", actions: [snoozeAction], intentIdentifiers: [] as? [String] ?? [String](), options: .customDismissAction) var categories = Set<AnyHashable>([category]) center.setNotificationCategories(categories as? Set<UNNotificationCategory> ?? Set<UNNotificationCategory>()) content.categoryIdentifier = "UYLReminderCategory" var identifier: String = stringUUID() var request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger) center.add(request, withCompletionHandler: {(_ error: Error?) -> Void in if error != nil { print("Something went wrong: \(error)") } }) 

唯一的请求标识符方法

 func stringUUID() -> String { let uuid = UUID() let str: String = uuid.uuidString return str } 

目标C

  // Objective-C UNMutableNotificationContent *content = [UNMutableNotificationContent new]; content.title = @"ALERT !"; content.body = msg; content.sound = [UNNotificationSound defaultSound]; // Time UNTimeIntervalNotificationTrigger *trigger; trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:1 repeats:NO]; // Actions UNNotificationAction *snoozeAction = [UNNotificationAction actionWithIdentifier:@"Track" title:@"Track" options:UNNotificationActionOptionForeground]; // Objective-C UNNotificationCategory *category = [UNNotificationCategory categoryWithIdentifier:@"UYLReminderCategory" actions:@[snoozeAction] intentIdentifiers:@[] options:UNNotificationCategoryOptionCustomDismissAction]; NSSet *categories = [NSSet setWithObject:category]; // Objective-C [center setNotificationCategories:categories]; // Objective-C content.categoryIdentifier = @"UYLReminderCategory"; NSString *identifier = [self stringUUID]; UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:identifier content:content trigger:trigger]; [center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) { if (error != nil) { NSLog(@"Something went wrong: %@",error); } }]; 

唯一的请求标识符方法

 -(NSString *)stringUUID { NSUUID *uuid = [NSUUID UUID]; NSString *str = [uuid UUIDString]; return str; } 

Swift 4简单的代码

  let content = UNMutableNotificationContent() content.title = "How many days are there in one year" content.subtitle = "Do you know?" content.body = "Do you really know?" content.badge = 1 let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false) let request = UNNotificationRequest(identifier: "timerDone", content: content, trigger: trigger) UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)