2016-08-13 24 views
6

Używam wersji beta WatchOS 3 i próbuję zainicjować lokalne powiadomienie na zegarku. Interfejs to tylko jeden przycisk, który wywołuje metodę "buttonPushed" w poniższym kodzie. Aplikacja działa dobrze, ale nigdy nie otrzymuję powiadomienia. Struktura aplikacji jest domyślna z Xcode 8 dla aplikacji WatchKit.Powiadomienie lokalne w WatchOS 3

Ten kod jest w pliku InterfaceController.swift przedłużenia WatchKit

jestem brakuje czegoś zupełnie oczywiste?

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


    } 

Odpowiedz

3

Zgodnie z this. Za każdym razem należy podać unikalny i nowy identyfikator żądania.

Mine:

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

Można również stworzyć niepowtarzalny ciąg zidentyfikowanego za pomocą 'niech id = UUID.init(). UuidString' –

+0

Raz w życiu może to być dwa identyczne numery UUID. – Vladimir

0

Lokalne watchOS powiadomień 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)") 
} 
}) 

Unikalne metody identyfikator żądania

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

Unikalne metody identyfikator żądania

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

Swift 4 prosty kod

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)