14

Potrzebuję zawsze wiedzieć, jakie opcje wybrać użytkownik w ustawieniach powiadomienia Push.
(Opcje są - alert, dźwięk i odznaki)cel c - Wykryj, kiedy użytkownik zmienia ustawienia powiadomień aplikacji

Więc kiedy moja aplikacja launch wzywam:

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes]; 

i wykryć co wybrał użytkownik.

Ale jak mogę sprawdzić, czy użytkownik zmieni ustawienia później w trakcie życia aplikacji?
Czy jest jakaś metoda delegowania, która jest wywoływana, gdy wystąpi zmiana z tymi ustawieniami?

Odpowiedz

22

Brak delegata. Należy okresowo sprawdzać właściwość UIApplication: enabledRemoteNotificationTypes, na przykład w applicationDidBecomeActive:.

Szczegółowe sprawdzić te odpowiedzi:

Determine on iPhone if user has enabled push notifications

View In Lock Screen and enabledRemoteNotificationTypes - iOS5

Edit:
Jeśli trzeba zresetować ustawienia powiadomień Push i alert uprawnień, spojrzeć na Apple technical note TN2265 . W sekcji "Resetowanie powiadomienia o powiadomieniach Push Push na iOS" wyjaśniono, jak zresetować ustawienia w systemie iOS. Jednak wielu programistów skarży się, że procedura nie działa. Nie jestem pewien, czy zadziała this link, będziesz musiał mieć dostęp do forum Apple, ale jest to jeden z wątków na ten temat.

Zastanawiam się, czy może Apple usunęło okno dialogowe uprawnień w iOS 5.1. W przeciwnym razie, dlaczego mieliby wymagać od aplikacji wyświetlenia alertu? Według AppStore review guidelines:

5.3 aplikacje, które wysyłają powiadomienia push bez uprzedniego uzyskania zgody użytkownika zostanie odrzucone

Na przykład ścieżka (aplikacji) prosi użytkownika o opt-in do powiadomienia Push w środku sing-up proces, a nie kiedy aplikacja uruchamia się po raz pierwszy.

Nie wiadomo, jaki powinien być cel tego monitu, ponieważ aplikacja nie może wysłać zapytania o stan ustawienia powiadomienia. W szczególności aplikacja może sprawdzić, które typy powiadomień (przy użyciu enabledRemoteNotificationTypes) są włączone, ale NIE, jeśli powiadomienia push dla określonej aplikacji są włączone lub wyłączone (przełącznik ON/OFF centrali powiadomień u góry). Przynajmniej takie jest zachowanie w iOS 5.1. Nawet jeśli użytkownik wyłączy powiadomienia dla tej aplikacji, aplikacja może nadal rejestrować powiadomienia push (przy użyciu registerForRemoteNotificationTypes) i BĘDZIE otrzymywać token APNS.

+0

dzięki :) czy wiesz, co mam zrobić, aby uzyskać okienko pop "Pozwól wypychać tę aplikację", które użytkownik uzyskuje po pierwszym uruchomieniu aplikacji? Potrzebuję go do debugowania różnych scenariuszy, próbowałem usunąć aplikację i zainstalować ją ponownie, ale nie dostałem pop boxa ... – Eyal

+0

Edytowałem odpowiedź, aby dołączyć kilka linków, które mogą się przydać. Jednak wielu programistów skarży się, że procedura opisana przez Apple nie działa. Nigdy nie widziałem okna dialogowego uprawnień podczas tworzenia aplikacji, więc nawet nie wiedziałem, że istnieje, dopóki nie przeczytam kilku postów od innych programistów. – Amiramix

+0

Ostatnia część nie jest prawdą, przynajmniej na iOS 7, enabledRemoteNotificationTypes jest tylko dla twojej aplikacji i jeśli użytkownik ustawi powiadomienia na none, nie otrzymasz znacznika APNs. – jcesarmobile

6

Sprawdź, kiedy aplikacja staje się aktywna, a nie tylko podczas uruchamiania.

0

Jest to przykład, gdy Push jest realizowany przez UrbanAirship. Za każdym razem, gdy użytkownik zdecyduje się na rezygnację/rezygnację z opcji push po odprawieniu pożaru, a także za pomocą poniższej metody, możesz sprawdzić (TAK/NIE).

Można to osiągnąć za pomocą delegata UIApplication, jeśli nie korzysta się z UrbanAirship.

- (void)registrationSucceededForChannelID:(NSString)channelID deviceToken:(NSString)deviceToken 
    { 
     NSLog(@"registrationSucceededForChannelID : %@",[self appRegisterForPushNotification][email protected]"YES":@"NO"); 
    } 


    - (BOOL)appRegisterForPushNotification { 
     if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]) { 
      UIUserNotificationType types = [[[UIApplication sharedApplication] currentUserNotificationSettings] types]; 
      return ((types & UIUserNotificationTypeAlert) || (types & UIUserNotificationTypeSound)); 
     } 
     return NO; 
    } 
Powiązane problemy