2013-07-26 15 views
7

Sto sviluppando un'app calendario composta da più eventi (ad esempio 500 eventi) che consiste in compleanni. Sto scaricando gli eventi dal servizio web. Voglio dare all'utente l'avviso su ogni data di nascita in un momento specifico, seduto alle 10:00 del giorno del compleanno. Uso la notifica locale per pianificare un avviso, ma sono bloccato perché iOS consente solo 64 notifiche per app e ho più compleanni. Non so come programmare più notifiche una volta che l'app supera il limite. Si prega di suggerire come risolverei questo problema. qui di seguito è il mio codice per programmare le notificheCome pianificare più notifiche locali in iOS quando la notifica supera il limite di 64

- (void)scheduleNotification:(NSMutableArray *)datesArray withMessage:(NSMutableArray *)messagesArray NotificationID:(NSString *)notificationID 
{ 

    NSCalendar *calendar = [NSCalendar currentCalendar]; 

    NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
    [formatter setDateStyle:NSDateFormatterNoStyle]; 
    [formatter setTimeStyle:NSDateFormatterShortStyle]; 


    NSDateFormatter *formatter1 = [[NSDateFormatter alloc]init]; 
    [formatter1 setDateStyle:NSDateFormatterMediumStyle]; 
    [formatter1 setDateFormat:@"dd/MM/yyyy"]; 

    // NSDate *myTime = [formatter dateFromString:@"06:10 PM"]; 
    NSDate *myTime = [formatter dateFromString:fireTime]; 

    for (int i = 0; i < [datesArray count]; i++) 
    { 
     NSDate *myDate = [formatter1 dateFromString:[datesArray objectAtIndex:i]]; 

     NSDateComponents *dateComponents = [calendar components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:myDate]; 
     NSDateComponents *timeComponents = [calendar components:NSHourCalendarUnit|NSMinuteCalendarUnit fromDate:myTime]; 

     NSDateComponents *newCompoents = [[NSDateComponents alloc]init]; 

     NSDateComponents *todayComponents = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]]; 

     int day = [dateComponents day]; 
     int month = [dateComponents month]; 

     [newCompoents setDay:[dateComponents day]]; 
     [newCompoents setMonth:[dateComponents month]]; 

     if (day >= [todayComponents day] && month >= [todayComponents month]) { 

      NSLog(@"day = %d, month = %d", day, month); 
      [newCompoents setYear:[todayComponents year]]; 
     } 
     else{ 
      NSLog(@"%d, %d", day, month); 
      [newCompoents setYear:[todayComponents year]+1]; 
     } 


     [newCompoents setHour:[timeComponents hour]]; 
     [newCompoents setMinute:[timeComponents minute]]; 

     NSDate *combDate = [calendar dateFromComponents:newCompoents]; 

     localNotif = [[UILocalNotification alloc] init]; 
     if (localNotif == nil) 
      return; 
     localNotif.fireDate = combDate; 
     localNotif.timeZone = [NSTimeZone defaultTimeZone]; 

     // Notification details 

     NSString *message = [@"Wish" stringByAppendingFormat:@" %@%@", [messagesArray objectAtIndex:i],@" On His Birthday"]; 
     localNotif.alertBody = message; 

     // Set the action button 
     localNotif.alertAction = @"View"; 

     localNotif.soundName = UILocalNotificationDefaultSoundName; 
     localNotif.applicationIconBadgeNumber = 1; 

     // Specify custom data for the notification 
     NSDictionary *infoDict = [NSDictionary dictionaryWithObject:notificationID forKey:notificationID]; 
     localNotif.userInfo = infoDict; 

     // Schedule the notification 
     [[UIApplication sharedApplication] scheduleLocalNotification:localNotif]; 
    } 

} 

mi corregga se sto facendo errori e suggerire come pianificare più notifiche volta 64 limite è attraversata.

+0

IMO è possibile riprogrammare LocalNotification ogni volta che si apre l'app, come controllare il conteggio LocalNotifications totale pianificato e se è inferiore a 64, riprogrammare lì .. – Bala

+0

e basta dare un'occhiata a questa risposta http://stackoverflow.com/a/7721445/1059705 – Bala

+0

sì, posso contare il numero totale di notifiche usando quel metodo. cosa intendi quando apri la tua app. devo controllare il conteggio nel delegato della mia app e programmare più notifiche. – suhit

risposta

1

Ho un problema simile e alcune opzioni aggiuntive che possono essere d'aiuto, anche se hanno tutti difetti che indicano che il comportamento corretto non è garantito.

Ricordare che compleanni sovrapposti potrebbero essere utili qui. Se due persone finiscono con un compleanno nello stesso giorno, annullare e riprogrammare con entrambe le informazioni associate. Puoi trovare altri intervalli in cui si verifica la ripetizione se sei OK w/un messaggio generico.

Ovviamente, incoraggiare l'utente a premere la notifica per aprire l'app sarebbe di aiuto (possibile anche con le entrate pubblicitarie). Potresti provare un bel messaggio per il tuo ultimo.

È un hacker, ma è possibile utilizzare il geofencing (ma probabilmente non le notifiche remote) come descritto qui: Can push notifications be used to run code without notifying user?. Se aggiungi una funzione che la utilizza, potresti persino essere in grado di ottenerla approvata.

Ho preso in considerazione il passaggio di un calendario personalizzato, ma NSCalendar è un ponte senza pedaggio per CFCalendarRef e la storia sembra essere che non avrò fortuna cercando di approfondire (e ottenerlo approvato almeno). Sarei felice di sentirmi dire che ho torto.

Problemi correlati