web-dev-qa-db-fra.com

Vérifiez si les notifications locales sont activées dans IOS 8

J'ai cherché partout sur Internet comment créer des notifications locales avec IOS 8. J'ai trouvé de nombreux articles, mais aucun n'a expliqué comment déterminer si l'utilisateur avait activé ou désactivé des "alertes". Quelqu'un pourrait-il m'aider !!! Je préférerais utiliser l'Objectif C plutôt que Swift.

30
Jacob Richman

Vous pouvez le vérifier en utilisant les UIApplicationcurrentUserNotificationSettings

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");
    }
}

J'espère que cela vous aidera, faites le moi savoir si vous avez besoin de plus d'informations

75
Bhumit Mehta

Pour développer la réponse d'Albert, vous n'êtes pas obligé d'utiliser rawValue dans Swift. Comme UIUserNotificationType est conforme à OptionSetType, il est possible de procéder comme suit:

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
    }
}

Vous utilisez le support [] syntaxe pour combiner les types d'options (similaire au bit ou au | opérateur pour combiner les drapeaux d'options dans d'autres langues).

22
simeon

Swift avec guard:

guard let settings = UIApplication.sharedApplication().currentUserNotificationSettings() where settings.types != .None else {
    return
}
9
zgjie

Voici une fonction simple dans Swift qui vérifie si au moins un type de notification est activé.

Prendre plaisir!

static func areNotificationsEnabled() -> Bool {
    guard let settings = UIApplication.shared.currentUserNotificationSettings else {
        return false
    }

    return settings.types.intersection([.alert, .badge, .sound]).isEmpty != true
}

Merci Michał Kałużny pour l'inspiration.

8
dustinrwh

Edit: Jetez un oeil à --- simeon's answer .

Dans Swift, vous devez utiliser rawValue:

let grantedSettings = UIApplication.sharedApplication().currentUserNotificationSettings()
if grantedSettings.types.rawValue & UIUserNotificationType.Alert.rawValue != 0 {
    // Alert permission granted
} 
6
Albert Vila Calvo

Je pense que ce code est plus précis:

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");
    }
}
3
Evok

En utilisant la réponse @simeon, Xcode me dit que

'currentUserNotificationSettings' a été déprécié dans iOS 10.0: Utiliser UserNotifications Framework's - [UNUserNotificationCenter getNotificationSettingsWithCompletionHandler:] et - [UNUserNotificationCenter getNotificationCategoriesWithCompletionHandler:]

voici donc la solution en utilisant l'UNUserNotificationCenter pour 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
        }
    }
2
Andrea Gorrieri

Objectif 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;
        }
    }];
0
Ofir Malachi