2015-10-02 2 views
8

Так как iOS9, локальное уведомление не работает должным образом. Иногда пользователи получают уведомление, иногда просто нет. Мои уведомления повторяются ежедневно. Любая идея, что может вызвать проблему? Я видел несколько сообщений, что в iOS9 есть ошибка, но я не уверен, что это причина.Проблема с UILocalNotification с iOS9

Вот кусок кода:

NSDate *alarmDate = [date dateByAddingTimeInterval:DEFAULT_SNOOZE_DURATION * i]; 
    UILocalNotification *localNotif = [[UILocalNotification alloc] init]; 
    localNotif.fireDate = alarmDate; 
    localNotif.timeZone = nil;   
    localNotif.alertBody = alertBody; 

    localNotif.hasAction = YES; 

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

    [[UIApplication sharedApplication] scheduleLocalNotification:localNotif] 

Спасибо за вашу помощь

+1

Одинаковая проблема здесь, мои пользователи жалуются на пропущенные уведомления после обновления IOS9. –

+0

Похоже, что новая «оптимизация iOS» не позволяет запускать последующие уведомления. –

+0

Вы нашли решение для этого? Именно по этой причине я получил отказ от приложения. В моем проекте между ios8 и ios9 не было изменений кода, и он работал в ios8. –

ответ

-1

Включите следующий код в Appdelegate.m

if(IS_OS_8_OR_LATER) 
{ 
    UIUserNotificationType types = UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge; 
    UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:nil]; 
    [[UIApplication sharedApplication] registerUserNotificationSettings:mySettings]; 
} 
3

писать ниже код в AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
// Override point for customization after application launch. 

[launchOptions valueForKey:UIApplicationLaunchOptionsLocalNotificationKey]; 

if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) 
{ 

    [application registerUserNotificationSettings:[UIUserNotificationSettings 
                settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge| 
                UIUserNotificationTypeSound categories:nil]]; 
} 

return YES; 

}

также написать этот код в AppDeleagte.m

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{ 
UIAlertView *notificationAlert = [[UIAlertView alloc] initWithTitle:@"Reminder" message:notification.alertBody 
                  delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 

[notificationAlert show]; 

// Set icon badge number to zero 
application.applicationIconBadgeNumber = 0; 
} 

записи ниже кода в ViewController, где хочет осуществить местное уведомление.

forExample: Здесь я инициализирую UILocalNotification, а его Firedate - текущее время и 5 секунд времени интервала.

После локального оповещения о пожаре он выдает предупреждение на вашем экране.

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
UILocalNotification *notification = [[UILocalNotification alloc] init]; 
notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:5]; 
notification.repeatInterval = NSDayCalendarUnit; 
notification.alertBody = @"This is local notification!"; 
notification.timeZone = [NSTimeZone defaultTimeZone]; 
notification.soundName = UILocalNotificationDefaultSoundName; 
notification.applicationIconBadgeNumber = 10; 


[[UIApplication sharedApplication] scheduleLocalNotification:notification]; 
} 
+0

его отлично работает на Ios 9, я использовал этот код .... попробуйте ... –

1

От локального и удаленного Руководства по программированию Notification:

В прошивке 8 и более поздние версии приложение, которые используют либо локальные или удаленные уведомления необходимо зарегистрировать типы уведомлений они намерены поставить. Затем система дает пользователю возможность ограничить типы уведомлений, отображаемых вашим приложением, на . Система не значки значка, отображает предупреждающие сообщения или воспроизводит звуки оповещения, если какой-либо из этих типов уведомлений не включен для вашего приложения, даже если они , указанные в полезной нагрузке уведомления.

Как показано в руководстве, образец кода, который Apple, показывает это:

UIUserNotificationType types = UIUserNotificationTypeBadge | 
      UIUserNotificationTypeSound | UIUserNotificationTypeAlert; 

UIUserNotificationSettings *mySettings = 
      [UIUserNotificationSettings settingsForTypes:types categories:nil]; 

[[UIApplication sharedApplication] registerUserNotificationSettings:mySettings]; 

https://stackoverflow.com/a/27376475/6219830 по: Naughty_Ottsel

Это мой код:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UIUserNotificationType types = UIUserNotificationTypeAlert; 
    UIUserNotificationSettings *mySettings =[UIUserNotificationSettings settingsForTypes:types categories:nil]; 
    [[UIApplication sharedApplication] registerUserNotificationSettings:mySettings]; 

    NSDate *date = [NSDate dateWithTimeIntervalSinceNow:10]; 
    UILocalNotification *localNotification = [[UILocalNotification alloc] init]; 

    localNotification.fireDate = date; 
    localNotification.timeZone = [NSTimeZone defaultTimeZone]; 
    localNotification.alertBody = @"Finally got it!"; 
    localNotification.soundName = UILocalNotificationDefaultSoundName; 

    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 

    return YES; 
} 

Я надеюсь, что Помогите!

+0

Спасибо большое, Ян. Это сработало для меня. Можем ли мы также настроить уведомление, как в дополнительных кнопках действий? –

0

, если Вам это нужно для iOS9, но при быстром 3.1:

final func registerToGetLocalNotificationsFor_iOS9(){ 
    let types : UIUserNotificationType = [.sound, .alert /*, .badge*/] 
    let mySettings = UIUserNotificationSettings(types: types, categories: nil) 
    UIApplication.shared.registerUserNotificationSettings(mySettings) 

} 

на iOS10 осуждается.

Смежные вопросы