2016-08-13 5 views
6

Ich benutze die WatchOS 3 Beta und versuche eine lokale Benachrichtigung auf der Uhr zu initiieren. Die Schnittstelle ist nur eine Schaltfläche, die im folgenden Code die Methode "buttonPushed" aufruft. Die App läuft gut, aber ich bekomme nie eine Benachrichtigung. Die App-Struktur ist der Standard von Xcode 8 für eine WatchKit-App.Lokale Benachrichtigung in WatchOS 3

Dieser Code ist in der InterfaceController.swift Datei der WatchKit Erweiterung

ich etwas ganz offensichtlich fehle?

@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 
     } 


    } 

Antwort

3

Nach this. Sie sollten jedes Mal eine eindeutige und neue Kennung für die Anforderung angeben.

Mine:

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

Sie können auch einen einzigartigen identifizierter Zeichenfolge mit 'lassen id = UUID.init() erstellen. UuidString' –

+0

Einmal im Leben könnte es zwei gleiche UUIDs geben. – Vladimir

0

Lokale Benachrichtigung 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)") 
} 
}) 

Einzigartige Anforderungskennung Methoden

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

Objective 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); 
    } 
    }]; 

Einzigartige Anforderungskennung Methoden

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

Swift 4 einfacher Code

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) 
Verwandte Themen