2016-08-13 68 views
6

我正在使用WatchOS 3測試版並嘗試在手錶上啓動本地通知。界面只是一個按鈕,在下面的代碼中調用「buttonPushed」方法。該應用運行良好,但我從來沒有收到通知。應用程序結構是Xcode 8對於WatchKit應用程序的默認設置。WatchOS中的本地通知3

此代碼是在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 
     } 


    } 

回答

3

根據this。您應該每次都爲請求指定一個唯一的新標識符。

礦:

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

也可以使用'讓創建一個唯一的標識的字符串ID = UUID.init()。uuidString' –

+0

一旦有生命,它可能是兩個相同的UUID。 – Vladimir

0

本地通知watchOS 迅速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; 
} 
1

夫特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)