多个 UNUserNotifications 未触发

Multiple UNUserNotifications not firing

我正在如下设置多个 UNUsernotifications,

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

                                  [self set10Notif];

                              }
                          }];
}

set10Notif 方法中,我设置了多个(8 个用于测试)通知,时间为距当前时间 10 秒。

-(void) set10Notif
{
    notifCount = notifCount+1;
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0") && notifCount < 10)
    {
        // create actions
      NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

      [calendar setTimeZone:[NSTimeZone localTimeZone]];

       NSDate *fireD = [[NSDate date] dateByAddingTimeInterval:notifCount*10];

       NSString *fireStr = [self returnStringFromDate:fireD withFormat:@"hh/mm/ss dd/MM/yyyy"];

       NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond|NSCalendarUnitTimeZone fromDate:fireD];

      UNMutableNotificationContent *objNotificationContent = [[UNMutableNotificationContent alloc] init];
    objNotificationContent.title = [NSString localizedUserNotificationStringForKey:@"Notif!" arguments:nil];
    objNotificationContent.body = [NSString localizedUserNotificationStringForKey:fireStr
                                                                        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");
        }
        [self set10Notif];
       }];
   #endif
    }
}

本地通知全部设置完毕。但是设备中只触发了一个通知,这是最后一个。

为什么多个通知不能触发? 我做错了什么?

为每个通知提供不同的 "requestWithIdentifier" 和 "time delay" 并尝试,可能对您有用。

多个 NSUSERNOTIFICATION 在自定义日期和时间触发

UNUserNotificationCenter *center=[UNUserNotificationCenter currentNotificationCenter];
[center requestAuthorizationWithOptions:( UNAuthorizationOptionSound | UNAuthorizationOptionAlert)
                      completionHandler:^(BOOL granted, NSError * _Nullable error) {
                          if (!error) {
                              NSLog(@"request authorization succeeded!");
                              // [self showAlert];
                          }
                      }];

UNMutableNotificationContent *objNotificationContent = [[UNMutableNotificationContent alloc] init];

objNotificationContent.title = [NSString localizedUserNotificationStringForKey:@"શ્રી હરિ જયંતિ!" arguments:nil];
objNotificationContent.body = [NSString localizedUserNotificationStringForKey:@"જય સ્વામિનારાયણ \nઆવતીકાલે એકાદશી છે!"
                                                                    arguments:nil];
objNotificationContent.sound = [UNNotificationSound defaultSound];

NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"nirnay" withExtension:@"jpg"];
NSError *error;
UNNotificationAttachment *attachment = [UNNotificationAttachment attachmentWithIdentifier:@"nirnay" URL:fileURL options:nil error:&error];
objNotificationContent.attachments = @[attachment];

/// 4. update application icon badge number
// objNotificationContent.badge = @([[UIApplication sharedApplication] applicationIconBadgeNumber] + 1);



for (int i=0; i<5; i++)
{
    int hours=11;
    int mint=46+i;

    NSString *myDateAsAStringValue=@"2017-03-22";
    NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    // or @"yyyy-MM-dd hh:mm:ss a" if you prefer the time with AM/PM


    NSDate *myDate = [dateFormatter dateFromString: myDateAsAStringValue];
    NSDate *pickerDate = myDate;
    NSLog(@"pickerDate - %@",pickerDate);
    NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc]init];
    //  [dateFormatter setDateFormat:DT_FORMATE_BIRTHDATE];
    [dateFormatter2 setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];

    NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
    [dateFormatter2 setTimeZone:gmt];
    NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
    NSDateComponents *timeComponents = [calendar components:(NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay |NSCalendarUnitHour | NSCalendarUnitMinute|NSCalendarUnitSecond)
                                                   fromDate:pickerDate];
    [timeComponents setHour:hours];
    [timeComponents setMinute:mint];
    [timeComponents setSecond:0];
    NSDate *dtFinal = [calendar dateFromComponents:timeComponents];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
    NSString *fierDate = [formatter stringFromDate:dtFinal];

    NSLog(@"fierDate - %@",fierDate);
    UNCalendarNotificationTrigger *trigger3 = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:timeComponents
                                                                                                       repeats:NO];



    UNNotificationRequest *request3 = [UNNotificationRequest requestWithIdentifier:[NSString stringWithFormat:@"ten%d",i]
                                                                           content:objNotificationContent trigger:trigger3];

    /// 3. schedule localNotification
    [center addNotificationRequest:request3 withCompletionHandler:^(NSError * _Nullable error) {
        if (!error) {
            NSLog(@"Local Notification succeeded By calender");
        }
        else {
            NSLog(@"Local Notification failed");
        }
    }];


}