How to set Local Notification repeat interval on Prayer time different times?

六眼飞鱼酱① 提交于 2019-12-11 07:06:46

问题


In local notifications there is repeatInterval property where we can put the unit repeat intervals for minute, hour, day, week, year, etc.

I want that repeat interval on Prayer time hours and every day same process.

So every Prayer time hours the local notification comes.

Prayer time is everyday different times


回答1:


You can't do it with repeat. Make a bunch of different make notifications - one for each day - for the next 30 days. When the user opens the app, then recreate them for the next 30.




回答2:


You can set repeat interval as day and pass array of local notifications of different time.

myapp.scheduledLocalNotifications = arrayOfNOtifications;

this may help you : how to create multiple local notifications




回答3:


i have done a app like this try this .

func scheduleNotification() {

    let dateString = "2017-04-04 09:00:00"
    let dateFormatter = DateFormatter()

    var localTimeZoneName: String { return TimeZone.current.identifier }
    var secondsFromGMT: Int { return TimeZone.current.secondsFromGMT() }
    dateFormatter.timeZone = TimeZone(secondsFromGMT: secondsFromGMT)
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

    let dateObj:Date = dateFormatter.date(from: dateString)!



    let triggerDaily = Calendar.current.dateComponents([.hour,.minute,.second,], from: dateObj)


    let trigger = UNCalendarNotificationTrigger(dateMatching: triggerDaily, repeats: true)


    let content = UNMutableNotificationContent()
    content.title = "mIdeas"
    content.body = getRandomMessage()
    content.sound = UNNotificationSound.default()
    content.categoryIdentifier = "myCategory"


    let request = UNNotificationRequest(identifier: "textNotification", content: content, trigger: trigger)

    UNUserNotificationCenter.current().delegate = self
    //this commented code is to remove the pre-seted  notifications so if you need multiple times don't use this line of code
   //UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
    UNUserNotificationCenter.current().add(request) {(error) in

        if let error = error {
            print("Uh oh! i had an error: \(error)")
        }
    }
}

call this function to set notification you can modify this func and add parameters to pass time




回答4:


Yes you can push a notification at a particular time and day with a repeat option.

Follow the code below:

//1. catch the notif center
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];



//2. I prefer removing any and all previously pending notif
[center removeAllPendingNotificationRequests];

//then check whether user has granted notif permission
[center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
            if (settings.authorizationStatus != UNAuthorizationStatusAuthorized) {
                // Notifications not allowed, ask permission again
                [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert)
                                      completionHandler:^(BOOL granted, NSError * _Nullable error) {
                                          if (!error) {
                                              //request authorization succeeded!
                                          }
                                      }];
            }
        }];


//3. prepare notif content
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
content.title = [NSString localizedUserNotificationStringForKey:NSLocalizedString(@"Hello! Today's Sunday!!",nil) arguments:nil];
content.body = [NSString localizedUserNotificationStringForKey:NSLocalizedString(@"Sleep tight!",nil) arguments:nil];
content.sound = [UNNotificationSound defaultSound];
content.badge = @([[UIApplication sharedApplication] applicationIconBadgeNumber] + 1);

//4. next, create a weekly trigger for notif on every Sunday
NSDate* sundayDate = startDate;
NSDateComponents *components = [[NSDateComponents alloc] init];
while(true){
        NSInteger weekday = [[NSCalendar currentCalendar] component:NSCalendarUnitWeekday fromDate:sundayDate];
            if(weekday == 1){//sunday, stay asleep reminder . LOL
                components.weekday = 1;
                components.hour = 9;
                components.minute = 0;
                break;
            }else{//keep adding a day
                [components setDay:1];
                sundayDate = [[NSCalendar currentCalendar] dateByAddingComponents:components toDate:sundayDate options:0];
            }
        }

//5. Create time for notif on Sunday
unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth |  NSCalendarUnitDay;
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comps = [calendar components:unitFlags fromDate:sundayDate];
comps.hour   = 9;
comps.minute = 0;
sundayDate = [calendar dateFromComponents:comps];

NSDateComponents *triggerWeekly = [[NSCalendar currentCalendar] components:NSCalendarUnitWeekday + NSCalendarUnitHour + NSCalendarUnitMinute fromDate:sundayDate];
UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:triggerWeekly repeats:YES];

//6. finally, add it to the request
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"LocalIdentifier"                                                                            content:content trigger:trigger];
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
        if (!error) {
            NSLog(@"Local Notification succeeded");
        } else {
            NSLog(@"Local Notification failed");
        }
    }];

If you are looking for actionable items on the notification. You should add it somewhere in the center.

UNNotificationAction *snoozeAct = [UNNotificationAction actionWithIdentifier:@"Snooze"
                                                                           title:NSLocalizedString(@"Snooze",nil) options:UNNotificationActionOptionNone];
UNNotificationAction *deleteAct = [UNNotificationAction actionWithIdentifier:@"Delete"
                                                                           title:NSLocalizedString(@"Delete",nil) options:UNNotificationActionOptionDestructive];
UNNotificationCategory *category = [UNNotificationCategory categoryWithIdentifier:identifier
                                                                              actions:@[snoozeAct,deleteAct] intentIdentifiers:@[]
                                                                              options:UNNotificationCategoryOptionNone];
NSSet *categories = [NSSet setWithObject:category];
[center setNotificationCategories:categories];
content.categoryIdentifier = @"ActionIdentifier";

Make sure you set a different identifier for your notification request!



来源:https://stackoverflow.com/questions/44017007/how-to-set-local-notification-repeat-interval-on-prayer-time-different-times

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!