Sam
Sam

Reputation: 95

ios - prevent app from sending notification if already one there

I can't seem to find it and I'm not sure how to Google it. In my app I use background fetches to do checks and if there is new data, I send a notification to the user using UILocalNotification. Now how do I prevent the app from sending a new notification to the user if there is already one there? I'm now ending up with 5 of the same notifications when I don't look at my phone for some hours.

Thanks!

Upvotes: 1

Views: 102

Answers (2)

Gil Sand
Gil Sand

Reputation: 6036

The best way to avoid having to cancel something it in the first place is also to simply NOT sending it. Find a way to know if the user has been notified before, and if he has, don't notify again :) This is cleaner, more efficient, will last forever, and won't backfire, ever.

Also, this answers your question of "not sending a notification again" instead of sending it and cancelling afterwards, which isn't a good idea if you think about it.

Upvotes: 0

Niraj
Niraj

Reputation: 1964

You can use UIApplication's property scheduledLocalNotifications

Here's the sample code:

NSMutableArray *notifications = [[NSMutableArray alloc] init]; [notifications addObject:notification]; myApp.scheduledLocalNotifications = notifications; 
//Equivalent: [myApp setScheduledLocalNotifications:notifications];

UIApplication *myApp = [UIApplication sharedApplication];
NSArray *eventArray = [myApp scheduledLocalNotifications];
for (int i=0; i<[eventArray count]; i++)
{
    UILocalNotification* oneEvent = [eventArray objectAtIndex:i];
    NSDictionary *userInfoCurrent = oneEvent.userInfo;
    NSString *uid=[NSString stringWithFormat:@"%@",[userInfoCurrent valueForKey:@"uid"]];
    if ([uid isEqualToString:uidtodelete])
    {
        //Cancelling local notification
        [myApp cancelLocalNotification:oneEvent];
        break;
    }
}

NSArray *arrayOfLocalNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications] ;

for (UILocalNotification *localNotification in arrayOfLocalNotifications) {

    if ([localNotification.alertBody isEqualToString:savedTitle]) {
        NSLog(@"the notification this is canceld is %@", localNotification.alertBody);

        [[UIApplication sharedApplication] cancelLocalNotification:localNotification] ; // delete the notification from the system

    }

}

Hope this would help figure out the solution.

Upvotes: 1

Related Questions