Могу ли я использовать UILocalNotifications и UNUserNotifications?
У меня есть приложение для iOS, которое включает в себя пользовательские "тревоги" - отправленные пользователю, когда приложение не на переднем плане. Я использую UNUserNotifications и все работает хорошо в тестировании iOS 10 и iOS 11.
Я также хотел бы связаться с пользователями, которые все еще используют iOS 8 и iOS 9.
Чтобы отправлять уведомления пользователям iOS 8, нужно ли включать альтернативные методы, использующие UILocalNotifications? Или iOS 8 будет правильно отвечать UNUserNotificatons?
Если мне нужно включить и то, и другое, я могу использовать некоторые if, чтобы использовать правильный, основанный на ОС. Просто кажется странным, что я должен включить устаревшую технику.
2 ответа
UNUserNotifications
iOS 10 и выше, поэтому не будут работать на iOS 8 и iOS 9. В этом случае вы должны проверить, является ли UNUserNotifications
существует или иным образом прибегают к более старым методам, например:
if (NSClassFromString(@"UNUserNotificationCenter")) {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNAuthorizationOptions options = (UNAuthorizationOptionBadge | UNAuthorizationOptionAlert | UNAuthorizationOptionSound);
[center requestAuthorizationWithOptions: options
completionHandler: ^(BOOL granted, NSError * _Nullable error) {
if (granted) {
NSLog(@"Granted notifications!");
}
}];
}
else {
UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound);
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes: userNotificationTypes categories: nil];
[[UIApplication sharedApplication] registerUserNotificationSettings: settings];
}
Инфраструктура UserNotifications была добавлена в iOS с iOS 10, поэтому для любой версии до этого вам нужно будет использовать более старую версию UILocalNotification
, Вы правы в том, что UILocalNotification
устарела в iOS 10 в пользу UserNotifications.framework
, но до iOS 10 символы из инфраструктуры UserNotifications недоступны, поэтому другого пути нет. Вы можете использовать простую проверку версии iOS, чтобы определить, когда использовать любой из этих методов:
if(@available(iOS 10, *)){
//UserNotifications method
}
else{
//UILocalNotification method
}