J'ai une idée comment faire, je l'ai mis en œuvre dans mon projet
d'abord, créez une notification locale avec la date d'incendie (par exemple, toutes les minutes). Étape suivante - remplir les informations utilisateur avec identifiant unique pour cette notification (si vous souhaitez supprimer à l'avenir) et votre période personnalisée comme ceci:
-(void) createLocalRepeatedNotificationWithId: (NSString*) Id
{
UILocalNotification *localNotification = [[UILocalNotification alloc] init];
NSTimeInterval your_custom_fire_interval = 60; // interval in seconds
NSDate *remindDate = [[NSDate date] dateByAddingTimeInterval:your_custom_fire_interval];
localNotification.fireDate = remindDate;
localNotification.userInfo = @{@"uid":Id, @"period": [NSNumber numberWithInteger:your_custom_fire_interval]};
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
}
Après cela, mettre en œuvre -(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
dans votre AppDelegate:
- Récupérez votre période personnalisée à partir des informations utilisateur.
- Changer la date d'incendie pour la période suivante
Il suffit de l'ajouter à nouveau dans les notificatiots sheluded!
NSInteger period = [[notification.userInfo objectForKey:@"period"] integerValue]; //1
NSTimeInterval t= 10 * period;
notification.fireDate =[[NSDate date] dateByAddingTimeInterval:t]; //2
[[UIApplication sharedApplication] scheduleLocalNotification:notification]; //3
si vous souhaitez supprimer cette notification, faire
UIApplication *app = [UIApplication sharedApplication];
NSArray *eventArray = [app scheduledLocalNotifications];
for (int i=0; i<[eventArray count]; i++)
{
UILocalNotification* oneEvent = [eventArray objectAtIndex:i];
NSDictionary *userInfoCurrent = oneEvent.userInfo;
NSString *uid=[NSString stringWithFormat:@"%@",[userInfoCurrent valueForKey:@"id"]];
if ([uid isEqualToString:notification_id_to_remove])
{
//Cancelling local notification
[app cancelLocalNotification:oneEvent];
break;
}
}
Très important!
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
ne pas appelé, lorsque vous êtes à l'arrière-plan. Vous devez donc configurer une tâche d'arrière-plan longue durée, dans laquelle vous allez à nouveau créer une notification.
Cependant, voir cette [réponse] (http://stackoverflow.com/questions/5762517/custom-repeat-interval-for-uilocalnotification). Il donne un moyen d'y parvenir si vous pouvez vivre avec la limite de notification 64. –
Vous pouvez essayer de définir un intervalle de répétition pour chaque jour, puis supprimer les notifications pour les jours requis. – Mehul
je ne suis pas statisfy avec cette réponse comme WhatsApp afficher la notification toutes les 3-4 secondes lorsque l'application est en arrière-plan et et l'appel VOIP vient –