2016-03-09 3 views
16

Mam powiadomienia push w mojej aplikacji. Zawsze, gdy aplikacja jest uruchamiana, chciałbym sprawdzić, czy użytkownik włączył powiadomienia push dla mojej aplikacji.Sprawdź ustawienia użytkownika powiadomienia push w Swift

zrobić to w ten sposób:

let notificationType = UIApplication.sharedApplication().currentUserNotificationSettings()!.types 
if notificationType == UIUserNotificationType.None { 
    print("OFF") 
} else { 
    print("ON") 
} 

Jeśli powiadomienia push są wyłączone przez użytkownika, czy jest jakiś sposób, aby uaktywnić to z mojej aplikacji?

A może jest jakaś alternatywa, aby wysłać użytkownika do ustawień powiadomień push (Ustawienia - Powiadomienia - Nazwa aplikacji)?

+1

Można jedynie otwarta strona ustawień aplikacji, ale nie na stronie Ustawienie powiadomienia. –

+0

Na szczęście nie można zmusić użytkownika do włączenia powiadomień push. To decyzja użytkownika o skorzystaniu z usługi. – vadian

+0

Ale czy nie ma sposobu, aby ponownie wyświetlić alert, gdzie użytkownik zostanie zapytany, czy on/ona włączał powiadomienia dla mojej aplikacji? – Stack108

Odpowiedz

16

Nie ma możliwości zmiany ustawień w aplikacji. Ale możesz poprowadzić użytkownika do ustawień systemu specyficznych dla aplikacji za pomocą tego kodu.

extension UIApplication { 
    class func openAppSettings() { 
     UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString)!) 
    } 
} 

Aktualizacja dla Swift 3.0

extension UIApplication { 
    class func openAppSettings() { 
     UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!) 
    } 
} 
+0

W Swift 3 rozszerzenie UIApplication { klasa func openAppSettings() { let url = URL (string: UIApplicationOpenSettingsURLString) UIApplication.shared.openURL (! URL) } } – Zaldy

+0

możemy bezpośrednio związane otwarta aplikacja powiadomienia push/lokalizacja sekcji ustawień? Używam Xcode 9.2 i Swift 3.0 –

0

Krótka odpowiedź: Nie, jeśli użytkownik nie zaprzeczył żądania powiadomień Push nie można zadać je ponownie, należy zaznaczyć je na stronie ustawienia, można to zrobić za pomocą alertu informującego o krokach i dwóch opcjach "Ok" i "Przejdź do ustawień", tutaj należy użyć kodu Romana.

Długi Odpowiedź: Należy zadać tylko użytkownikowi powiadomień Push, gdy absolutnie konieczne, a jeśli masz zamiar poprosić pomaga poprzedzić z nieco widok wyjaśniający dlaczego chcesz/potrzebujesz do wysyłania powiadomień push, to jest to świetny artykuł TechCrunch, który pomoże Ci uzyskać lepsze retencji/akceptacji ze strony użytkowników - http://techcrunch.com/2014/04/04/the-right-way-to-ask-users-for-ios-permissions/

11

dla iOS 10 lub wyższy

sprawdzenie czy powiadomień push zostały włączone do aplikacji zmieniła się dramatycznie dla Swift 3. Zastosowanie to zamiast powyższych przykładów, jeśli używasz Swift 3.

let center = UNUserNotificationCenter.current() 
    center.getNotificationSettings { (settings) in 
     if(settings.authorizationStatus == .authorized) 
     { 
      print("Push authorized") 
     } 
     else 
     { 
      print("Push not authorized") 
     } 
    } 

Oto dokumentacja firmy Apple, w jaki sposób udoskonali swój czek: https://developer.apple.com/reference/usernotifications/unnotificationsettings/1648391-authorizationstatus

+5

Ta funkcja jest dostępna tylko w przypadku iOS 10+ w innych pakietach SDK, który ulegnie awarii. Proszę uważaj. –

+0

Nie nastąpi awaria, XCcode wygeneruje błąd kompilatora, jeśli nie zawiniesz go/funkcja w '@available (iOS 10.0, *)' –

5

To jest wersja Swift 3, gdzie można sprawdzić, czy powiadomienia są włączone lub wyłączone.

let notificationType = UIApplication.shared.currentUserNotificationSettings?.types 
    if notificationType?.rawValue == 0 { 
     print("Disabled") 
    } else { 
     print("Enabled") 
    } 
0

Swift 4 wersja salabaha za odpowiedź

extension UIApplication { 
    class func openAppSettings() { 
     UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!, options: [:], completionHandler: {enabled in 
      // ... handle if enabled 
     }) 
}