notifications - pantalla - recuperar notificaciones iphone
Compruebe si las notificaciones locales están habilitadas en IOS 8 (8)
He buscado en todo Internet cómo crear notificaciones locales con IOS 8. He encontrado muchos artículos, pero ninguno explicó cómo determinar si el usuario ha activado o desactivado las "alertas". ¡¡¡Alguien podría ayudarme por favor!!! Preferiría usar Objective C sobre Swift.
Aquí hay una función simple en Swift 3 que verifica si al menos un tipo de notificación está habilitado.
¡Disfrutar!
static func areNotificationsEnabled() -> Bool {
guard let settings = UIApplication.shared.currentUserNotificationSettings else {
return false
}
return settings.types.intersection([.alert, .badge, .sound]).isEmpty != true
}
Gracias Michał Kałużny por la inspiración.
Creo que este código es más preciso:
if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]) {
UIUserNotificationType types = [[[UIApplication sharedApplication] currentUserNotificationSettings] types];
if (types & UIUserNotificationTypeBadge) {
NSLog(@"Badge permission");
}
if (types & UIUserNotificationTypeSound){
NSLog(@"Sound permission");
}
if (types & UIUserNotificationTypeAlert){
NSLog(@"Alert permission");
}
}
Objetivo C + iOS 10
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
switch (settings.authorizationStatus) {
case UNAuthorizationStatusNotDetermined:
break;
case UNAuthorizationStatusDenied:
break;
case UNAuthorizationStatusAuthorized:
break;
default:
break;
}
}];
Para ampliar la respuesta de Albert, no está obligado a usar rawValue
en Swift. Debido a que UIUserNotificationType
ajusta a OptionSetType
, es posible hacer lo siguiente:
if let settings = UIApplication.shared.currentUserNotificationSettings {
if settings.types.contains([.alert, .sound]) {
//Have alert and sound permissions
} else if settings.types.contains(.alert) {
//Have alert permission
}
}
Utilice la sintaxis de corchete []
para combinar tipos de opciones (similar al operador a nivel de bits o |
para combinar indicadores de opciones en otros idiomas).
Usando la respuesta @simeon, Xcode me dice que
''currentUserNotificationSettings'' quedó en desuso en iOS 10.0: Use UserNotifications Framework''s - [UNUserNotificationCenter getNotificationSettingsWithCompletionHandler:] y - [UNUserNotificationCenter getNotificationCategoriesWithCompletionHandler:]
Así que aquí está la solución usando el UNUserNotificationCenter para Swift 4 :
UNUserNotificationCenter.current().getNotificationSettings(){ (settings) in
switch settings.alertSetting{
case .enabled:
//Permissions are granted
case .disabled:
//Permissions are not granted
case .notSupported:
//The application does not support this notification type
}
}
Veloz con guard
:
guard let settings = UIApplication.sharedApplication().currentUserNotificationSettings() where settings.types != .None else {
return
}
Edit: Echa un vistazo a la answer @ simeon.
En Swift, necesitas usar rawValue
:
let grantedSettings = UIApplication.sharedApplication().currentUserNotificationSettings()
if grantedSettings.types.rawValue & UIUserNotificationType.Alert.rawValue != 0 {
// Alert permission granted
}
Puede verificarlo utilizando la UIApplication
de currentUserNotificationSettings UIApplication
de currentUserNotificationSettings
if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]){ // Check it''s iOS 8 and above
UIUserNotificationSettings *grantedSettings = [[UIApplication sharedApplication] currentUserNotificationSettings];
if (grantedSettings.types == UIUserNotificationTypeNone) {
NSLog(@"No permiossion granted");
}
else if (grantedSettings.types & UIUserNotificationTypeSound & UIUserNotificationTypeAlert ){
NSLog(@"Sound and alert permissions ");
}
else if (grantedSettings.types & UIUserNotificationTypeAlert){
NSLog(@"Alert Permission Granted");
}
}
Espero que esto ayude, Avísame si necesitas más información.