erkennen, dass "Allow Notifications" für iOS8 ein/aus ist



uilocalnotification (8)

Die Methode enabledRemoteNotificationTypes ist seit iOS8 veraltet.

Um den Status der Remote-Benachrichtigungen in iOS8 zu überprüfen, können Sie anrufen

[[UIApplication sharedApplication] isRegisteredForRemoteNotifications];

Es wird NEIN zurückgegeben, wenn der Benutzer Benachrichtigungen in den Einstellungen deaktiviert. Documentation zu isRegisteredForRemoteNotifications

Oder Sie können alle aktuellen Benachrichtigungseinstellungen abrufen:

[[UIApplication sharedApplication] currentUserNotificationSettings];

Documentation zu currentUserNotificationSettings

https://ffff65535.com

Ich versuche, die lokalen Benachrichtigungseinstellungen für die App in iOS 8 zu ermitteln

Für UIUserNotificationSettings gibt es 7 zurück, da ich Badge, Sound & Alert UIUserNotificationSettings habe.

In der Einstellung schalte ich "Allow Notification" aus, die App gibt immer noch 7 für UIUserNotificationSettings (Badge, Sound & Alert an) aus. Gibt es eine Möglichkeit, " Notification zulassen" ein / aus zu erkennen?

- (void)application:(UIApplication *)application
    didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings{

    NSLog(@"---notificationSettings.types %d" , notificationSettings.types );
    if(notificationSettings.types!=7){
        UIAlertView * alert =[[UIAlertView alloc ] initWithTitle:@"Please turn on Notification"
                                                         message:@"Go to Settings > Notifications > App.\n Switch on Sound, Badge & Alert"
                                                        delegate:self
                                               cancelButtonTitle:@"Ok"
                                               otherButtonTitles: nil];
        [alert show];
    }
}

Die Verwendung von .isRegisteredForRemoteNotifications() funktioniert nicht (obwohl es sollte). Wenn die Benachrichtigungen jedoch deaktiviert sind oder einer der Typen nicht vorhanden ist, funktioniert der folgende Code.

func notificationsAreOk() -> Bool {
    let wishedTypes = UIUserNotificationType.Badge |
        UIUserNotificationType.Alert |
        UIUserNotificationType.Sound;
    let application = UIApplication.sharedApplication()
    let settings = application.currentUserNotificationSettings()
    if settings == nil {
        return false
    }
    if settings.types != wishedTypes {
        return false
    }
    return true
}

BEARBEITEN : Nach einigen Tests funktioniert das nicht immer, wenn Benachrichtigungen deaktiviert sind. Ich überlege, eine Testbenachrichtigung zu senden, um zu erfahren, wann sie funktionieren.


Ich entschuldige mich für diese Antwort / diesen Kommentar, wenn sie an der falschen Stelle ist. Ich bin wirklich neu in der iOS-Programmierung und habe noch nie einen Stack-Überlauf geschrieben. Ich denke, das sollte eigentlich ein Kommentar sein, aber ohne eine Bewertung von 50 bin ich nicht erlaubt. Ich entschuldige mich auch, wenn die Erklärung etwas rudimentär ist, aber auch irgendwie neu :).

Ich wollte auch testen, ob ein Benutzer geändert hat, welche Benachrichtigungen meine App nach der ersten Anforderung erlaubt / benötigt. Nach dem Versuch, die Apple-Dokumentation zu entschlüsseln (die Autoren bei Apple sind entweder viel klüger als ich oder die Dokumentation ist absichtlich unklar), und ich testete ein wenig auf den Wert von

[[UIApplication sharedApplication] currentUserNotificationSettings].hash.

Ich glaube, dass dies einen Drei-Bit-Hashwert zurückgibt, wobei Bit eins für Banner-Benachrichtigungen, Bit 2 für Sound-Benachrichtigungen und Bit 3 für Alert-Benachrichtigungen sind.

So...

000 = 0 = no notifications.
001 = 1 = only banner,
010 = 2 = only sound,
011 = 3 = sound and banner, no alert
100 = 4 = only alert notifications
and so on until,
111 = 7 = all notifications on.

Dies zeigt auch 0 an, wenn Benachrichtigungen zulassen in der Einstellungen-App deaktiviert ist. Hoffe das hilft.


Schau dir das an. Code wird getestet und getestet.

- (BOOL)isUserNotificationAllowed {
    UIUserNotificationType types = [[UIApplication sharedApplication] currentUserNotificationSettings].types;
    if(types & UIUserNotificationTypeBadge || types & UIUserNotificationTypeSound || types & UIUserNotificationTypeAlert){
        return YES;
    }
    else {
        return NO;
    }
}

Sie können überprüfen, ob der Benutzer Push-Benachrichtigungen aktiviert oder deaktiviert hat, indem Sie folgenden Code verwenden.

Aktivieren oder Deaktivieren von Iphone Push-Benachrichtigungen

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if (types == UIRemoteNotificationTypeNone) 
  // Yes it is..

Hoffe, das wird dir helfen ..


Sie können den Hashwert von UIApplication.sharedApplication().currentUserNotificationSettings() .

if(UIApplication.instancesRespondToSelector(Selector("registerUserNotificationSettings:"))){
        if(UIApplication.sharedApplication().currentUserNotificationSettings().hashValue == 0){
            pushNotificationStatus = "false"
        } else {
            pushNotificationStatus = "true"
        }
}

Swift 3+

let isRegisteredForLocalNotifications = UIApplication.shared.currentUserNotificationSettings?.types.contains(UIUserNotificationType.alert) ?? false

Schnell 2.3

let isRegisteredForLocalNotifications = UIApplication.sharedApplication().currentUserNotificationSettings()?.types.contains(UIUserNotificationType.Alert) ?? false

UIUserNotificationType notificationType = [[[UIApplication sharedApplication] currentUserNotificationSettings] types];

if(notificationType == UIRemoteNotificationTypeNone)
        {

            NSLog(@"OFF");
        }
        else{

            NSLog(@"ON");
        }

funktioniert bei mir