2015-02-10 14 views
17

Poniższy sposób utrzymuje powrocie taką samą wartość:Sprawdzanie powiadomień push rejestracji: isRegisteredForRemoteNotifications nie aktualizowanie

[[UIApplication sharedApplication] isRegisteredForRemoteNotifications]; 

Za każdym razem ten kod działa, wyniki brzmi TAK. Nawet gdy wchodzę do aplikacji "Ustawienia" i ustawiam powiadomienia push na "wyłączone" dla mojej aplikacji, gdy powyższy kod zostanie uruchomiony, wartość TAK.

Inne szczegóły: * biegnę aplikację na iPhone dostał który ma iOS 8.1.3 * biegnę aplikację w Xcode 6.1 i mam telefon fizycznie przyłączone do mojego komputera

Każdy pomysł, dlaczego wartość "isRegisteredForRemoteNotifications" się nie zmienia?

+1

Możliwy duplikat [wykryć "Pozwól Powiadomienia" jest on/off dla systemów iOS 8] (http://stackoverflow.com/questions/25111644/detect-allow- notifications-is-on-off-for-ios8) - zobacz odpowiedź, która sugeruje użycie 'currentUserNotificationSettings'. –

+0

Gdzie większość odpowiedzi nieprawidłowo sugeruje, aby sprawdzić, czy "isRegisteredForRemoteNotifications" @AaronBrager – Lefteris

Odpowiedz

21

Ponieważ iOS 8 rejestruje urządzenie i dostarcza Token, nawet jeśli użytkownik zrezygnuje z pushów.

W takim przypadku pchnięć nie są prezentowane użytkownikowi podczas push jest wysyłany, ale jeśli aplikacja jest uruchomiona robi ładunek, dzięki czemu można go zaktualizować, gdy aplikacja jest uruchomiona ...

Aby sprawdzić, czy Powiadomienia push są włączone w iOS 8 należy sprawdzić włączonych typów powiadomień użytkownika:

- (BOOL)pushNotificationsEnabled { 
    if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]) { 
     UIUserNotificationType types = [[[UIApplication sharedApplication] currentUserNotificationSettings] types]; 
     return (types & UIUserNotificationTypeAlert); 
    } 
    else { 
     UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes]; 
     return (types & UIRemoteNotificationTypeAlert); 
    } 
} 
1

Jeśli używasz Swift 2 bitowego operatorzy nie będą działać z UIUserNotificationType. Oto rozwiązanie przy użyciu Swift 2, iOS 8+:

func hasPushEnabled() -> Bool { 
     //ios 8+ 
     if UIApplication.sharedApplication().respondsToSelector("currentUserNotificationSettings") == true { 
      let settings = UIApplication.sharedApplication().currentUserNotificationSettings() 
      if (settings?.types.contains(.Alert) == true){ 
       return true 
      } 
      else { 
       return false 
      } 
     } 
     else { 
      let types = UIApplication.sharedApplication().enabledRemoteNotificationTypes() 
      if types.contains(.Alert) == true { 
       return true 
      } 
      else { 
       return false 
      } 
} 
Powiązane problemy