5

Я использую UNUserNotificationCenter для ios 10. Для тестирования я устанавливаю локальное уведомление в течение 10 секунд с текущего времени.Локальные уведомления не срабатывают в ios10

Это то, что я пытался,

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; 
    [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) 
          completionHandler:^(BOOL granted, NSError * _Nullable error) { 
           if (!error) { 
            NSLog(@"request succeeded!"); 
            [self set10Notifs]; 
           } 
          }];  
} 

-(void) set10Notifs 
{ 
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) { 
    #if XCODE_VERSION_GREATER_THAN_OR_EQUAL_TO_8 
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 

    [calendar setTimeZone:[NSTimeZone localTimeZone]];   

    NSDateComponents *components = [calendar components:NSCalendarUnitTimeZone fromDate:[[NSDate date] dateByAddingTimeInterval:10]]; 

    UNMutableNotificationContent *objNotificationContent = [[UNMutableNotificationContent alloc] init]; 
    objNotificationContent.title = [NSString localizedUserNotificationStringForKey:@"Prayer!" arguments:nil]; 
    objNotificationContent.body = [NSString localizedUserNotificationStringForKey:@"Time now" 
                     arguments:nil]; 
    objNotificationContent.sound = [UNNotificationSound defaultSound]; 

    UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components repeats:NO]; 


    UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"Prayer" 
                      content:objNotificationContent trigger:trigger]; 
    UNUserNotificationCenter *userCenter = [UNUserNotificationCenter currentNotificationCenter]; 
    [userCenter addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) { 
     if (!error) { 
      NSLog(@"Local Notification succeeded"); 
     } 
     else { 
      NSLog(@"Local Notification failed"); 
     } 
    }]; 
#endif 
    } 
} 

Я могу видеть журнал "Local Notification удалось". Но локальное уведомление не запускается в устройстве.

В AppDelegate, я добавил

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; 
    center.delegate = self; 
    return YES; 
} 
- (void)userNotificationCenter:(UNUserNotificationCenter *)center 
    willPresentNotification:(UNNotification *)notification 
    withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler { 
    NSLog(@"Notification is triggered"); 
    completionHandler(UNNotificationPresentationOptionBadge); 
} 

-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler{ 
    NSLog(@"User Info : %@",response.notification.request.content.userInfo); 
    completionHandler(); 
} 

Что я сделал не так? Почему уведомления приложений не запускаются?

+0

http://stackoverflow.com/questions/37807302/add-local-notification-in -ios10-swift-3? rq = 1 – Sanju

+0

проверить время своего устройства и триггерное время - http://stackoverflow.com/questions/39941778/how-to-schedule-a-local-notification-in-ios-10-объектив -c? rq = 1 – Sanju

+0

Вы активировали push-уведомления из настроек Xcode? – Stefan

ответ

6

Набор NSDateComponents как:

NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond|NSCalendarUnitTimeZone fromDate:[[NSDate date] dateByAddingTimeInterval:10]]; 
+0

Невозможно установить [несколько уведомлений] (http://stackoverflow.com/questions/40216915/multiple-unusernotifications-not-firing) .... – NAZIK

+0

Кажется, вам нужно создать компоненты даты из календаря ' dateComponents (_ components: Установить функцию , from date: Date) '. Инициализация компонентов даты из любой другой функции «dateComponents ...» календаря, по-видимому, не предусматривает планирование уведомления. (Swift 3) –

+0

@NAZIK, как вы его работали для нескольких уведомлений? я застрял в одной и той же проблеме. Пожалуйста, посмотрите: https://stackoverflow.com/questions/44132879/ios-local-notification-not-firing-second-time-but-shows-in-getpendingnotificatio –

0

Или использовать триггер времени вместо календаря триггера

-1
@IBAction func sendNotification(_ sender: Any) { 

    let content = UNMutableNotificationContent() 
    content.title = "Hello" 
    content.body = "Ved Rauniyar !!!" 
    // content.badge = 1 
    content.sound = UNNotificationSound.default() 
    // Deliver the notification in five seconds. 
    let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 5, repeats: false) 
    let url = Bundle.main.url(forResource:"ved", withExtension: "png") 
    let attachment = try? UNNotificationAttachment(identifier: "FiveSecond", 
                url: url!, 
                options: [:]) 
    content.attachments = [attachment!] 
    let request = UNNotificationRequest.init(identifier: "FiveSecond", content: content, trigger: trigger) 
    // Schedule the notification. 
    let center = UNUserNotificationCenter.current() 
    center.add(request) { (error) in 
     // print(error!) 
    } 
}