2017-02-02 8 views
0

Я пытаюсь использовать UserNotifications Каркасы для прошивки 10.UNUserNotificationCenter Trigger не стреляя

Уведомления, кажется, отлично работает, если я не прохожу в триггере. Они сразу представлены в приложении. Но мне нужно пройти за триггер. Может ли кто-нибудь увидеть недостаток в моем коде? Это должно занять 15 секунд, но оно никогда не гаснет.

UNMutableNotificationContent* content = [[UNMutableNotificationContent alloc] init]; 
content.title = [NSString localizedUserNotificationStringForKey:@"Hello!" arguments:nil]; 
content.body = [NSString localizedUserNotificationStringForKey:@"Hello_message_body" 
                arguments:nil]; 
content.sound = [UNNotificationSound defaultSound]; 
content.categoryIdentifier = @"WhatUpsw"; 


NSString *imageName = @"hug2"; 

NSURL *url = [[NSBundle mainBundle]URLForResource:imageName withExtension:@"jpg"]; 


UNNotificationAttachment *attachment = [UNNotificationAttachment attachmentWithIdentifier:imageName URL:url options:nil error:nil]; 
content.attachments = @[attachment];       

// Deliver the notification in five seconds. 
UNTimeIntervalNotificationTrigger* trigger = [  UNTimeIntervalNotificationTrigger 
               triggerWithTimeInterval:15 repeats:NO]; 

UNNotificationRequest* request = [UNNotificationRequest requestWithIdentifier:@"FiveSecondsw" 
                     content:content trigger:trigger]; 
// Schedule the notification. 
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) { 
    if (error != nil) { 
     NSLog(@"Something went wrong: %@",error); 
    } else { 
     NSLog(@"All good!: %@", request); 
    } 
}]; 

также проверки ожидающие запросы я вижу:

<__NSArrayM 0x17024d170>(
<UNNotificationRequest: 0x1702235c0; identifier: FiveSecond, content: <UNNotificationContent: 0x17010bd00; title: Hello!, subtitle: (null), body: Hello_message_body, categoryIdentifier: , launchImageName: , peopleIdentifiers: (
), threadIdentifier: , attachments: (
), badge: (null), sound: <UNNotificationSound: 0x1700b4580>, hasDefaultAction: YES, defaultActionTitle: (null), shouldAddToNotificationsList: YES, shouldAlwaysAlertWhileAppIsForeground: NO, shouldLockDevice: NO, shouldPauseMedia: NO, isSnoozeable: NO, fromSnooze: NO, darwinNotificationName: (null), darwinSnoozedNotificationName: (null), trigger: <UNTimeIntervalNotificationTrigger: 0x170223780; repeats: NO, timeInterval: 10.000000>> 
) 
+0

Повторите попытку с другим значением идентификатора – bhakti123

+0

@ bhakti123 Ive попробовал. Если я начну новый проект, бум работает так, как ожидалось. В этом проекте этого просто нет, и я не понимаю, почему. Очень странно. – mKane

+1

Это связано с тем, что каждое уведомление, которое вы планируете, имеет тот же идентификатор. UNUserNotificationCenter нужны разные идентификаторы для разных уведомлений. Поскольку уже существует уведомление с этим идентификатором, вы никогда не получите второй, который вы планируете. – bhakti123

ответ

0

Я бегу IOS 10.3 Beta и Xcode 8.3 бета 2, так что может быть просто ошибка. Чтобы устранить эту проблему, я удалил расширение содержимого, перезапустил Xcode и добавил расширение еще раз. После этого все сообщения прошли.

1

Возникает ли проблема, только если ваше приложение работает на переднем плане? Если вы закроете приложение или переключитесь на другой, прежде чем время срабатывания будет достигнуто, будет ли уведомление работать правильно?

Для того, чтобы иметь уведомления появляются в то время как приложение работает, вам необходимо установить UNUserNotificationCenterDelegate в вашем appController(_:didFinishLaunching:):

func appController(_ appController: TVApplicationController, didFinishLaunching options: [String : Any]?) { 
    // ... 

    UNUserNotificationCenter.current().delegate = self 

    // ... 
} 

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, 
           withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) 
{ 
    completionHandler(.alert) 
} 

Делегат должен быть установлен до запуска будет завершена.

 Смежные вопросы

  • Нет связанных вопросов^_^