Resetuj ustawienia powiadomień push dla aplikacji

Rozwijam aplikację z powiadomieniami push. Aby sprawdzić wszystkie możliwe sposoby interakcji z użytkownikiem, chciałbym przetestować moją aplikację, gdy użytkownik odmówi włączenia powiadomień push dla mojej aplikacji podczas pierwszego uruchomienia.

Okno dialogowe (inicjowane przez registerForRemoteNotificationTypes) pojawia się jednak tylko raz w każdej aplikacji. Jak zresetować pamięć iPhone OS mojej aplikacji. Usunięcie aplikacji i ponowna instalacja nie pomaga.

Author: hanno, 2010-03-13

13 answers

Uwaga techniczna TN2265: Rozwiązywanie problemów z powiadomieniami Push

Po raz pierwszy aplikacja z obsługą push rejestruje powiadomienia push, iOS pyta użytkownika, czy chce otrzymywać powiadomienia dla tej aplikacji. Once the użytkownik odpowiedział na ten wpis jest nie przedstawiono ponownie, chyba że urządzenie została przywrócona lub aplikacja została odinstalowany na co najmniej jeden dzień.

Jeśli chcesz symulować pierwszy raz uruchom aplikację, możesz ją opuścić odinstalowany na jeden dzień. można osiągnąć ten ostatni nie czekając na dzień poprzez ustawienie zegara systemowego forward a day or more, turning the urządzenie całkowicie wyłączone, a następnie obracane urządzenie z powrotem włączone.

Aktualizacja: Jak wspomniano w komentarzach poniżej, To rozwiązanie przestało działać od iOS 5.1. Zachęcam do zgłoszenia błędu w Apple, aby mogli zaktualizować swoją dokumentację. Aktualnym rozwiązaniem wydaje się Resetowanie zawartości urządzenia i ustawienia.

Aktualizacja: uwaga techniczna została zaktualizowana o nowe kroki, które działają poprawnie od iOS 7.

  1. Usuń aplikację z urządzenia.
  2. całkowicie wyłącz urządzenie i włącz je ponownie.
  3. przejdź do Ustawienia > Ogólne > Data i godzina i ustaw datę z wyprzedzeniem na dzień lub więcej.
  4. wyłącz urządzenie całkowicie ponownie i włącz je ponownie.

Aktualizacja od iOS 9

Po prostu usunięcie i ponowne zainstalowanie aplikacji spowoduje zresetowanie statusu powiadomienia do notDetermined (co oznacza, że pojawią się monity).

Dzięki odpowiedzi Gomfucjusza poniżej: https://stackoverflow.com/a/33247900/704803

 296
Author: ianolito,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-01 22:41:36

Innym Tylko do testowania rozwiązaniem tego problemu jest po prostu zmiana identyfikatora pakietu. Tylko nie zapomnij zmienić go z powrotem, gdy skończysz!

 47
Author: capikaw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-11 20:43:20

Na iOS 9.0.2, otrzymuję "zarejestruj powiadomienie push alert" za każdym razem, gdy usuwam aplikację i ponownie ją instaluję. Dotyczy to zarówno plików do pobrania w AppStore, jak i trybu adhoc.

Aktualizacja: potwierdzono, że działa to na iOS 9.x

 35
Author: Gomfucius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-16 23:47:20

Jak już wspomniano, podejście do resetowania stanu powiadomień dla aplikacji na urządzeniu jest zmieniane dla iOS5 nowszy.

To mi działa na iOS6:

  • Usuń aplikację z urządzenia
  • Ustaw DateTime urządzenia dwa lub więcej dni do przodu
  • Uruchom ponownie urządzenie
  • Ustaw DateTime urządzenia dwa lub więcej dni do przodu
  • Uruchom ponownie urządzenie
  • Zainstaluj i uruchom aplikację ponownie

Jednak spowoduje to wyświetlenie tylko pierwszej zachęty ponownie - nie usunie żadnych innych rzeczy związanych ze stanem push.

 19
Author: micmdk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-29 12:53:24

Plist: / private/var/mobile/Library/Remotenotify / Clients.plist

... zawiera zarejestrowanych klientów do powiadomień push. Usunięcie wpisu w aplikacji spowoduje ponowne wyświetlenie monitu

 9
Author: Erik Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-12 22:00:19

Robienie tego programowo wydaje mi się działać za każdym razem. Mam build z następującą linijką:

 [[UIApplication sharedApplication] unregisterForRemoteNotifications];
Uruchamiam go za każdym razem, gdy chcę wyrejestrować się z PN. Być może będziesz musiał zakończyć aplikację bezpośrednio z listy ostatnich i pobawić się Centrum powiadomień w aplikacji Ustawienia, aby to zrobić.

Również monit interfejsu użytkownika z prośbą o rejestrację w PN może się nie pojawić. Nie wiem, czy została wyłączona w którejkolwiek z ostatnich wersji systemu iOS.

 7
Author: dagnytaggart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-27 16:54:23

Jak powiedział ianolito, ustawienie daty powinno działać:

Możesz osiągnąć ten ostatni bez czekania na dzień, ustawiając zegar systemowy do przodu o dzień lub więcej, wyłączając urządzenie całkowicie, a następnie włączając urządzenie z powrotem.

Zauważyłem na moim urządzeniu (iPhone 4, iOS 6.1.2) ustawienie zegara systemowego dzień do przodu lub nawet kilka dni nie działało dla mnie. Więc ustawiłem datę do przodu na miesiąc i wtedy zadziałało i moja aplikacja pokazała powiadomienia pojawiają się ponownie.

Mam nadzieję, że to pomoże każdemu, może to być rodzaj bólu głowy!

 5
Author: Vincent Cohen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-25 17:36:33

Zgadzam się z micmdk.. Miałem konfigurację środowiska programistycznego z powiadomieniami Push i potrzebowałem sposobu resetowania telefonu, aby wyglądał jak początkowa instalacja... i tylko te dokładne kroki działały dla mnie ... wymaga dwóch restartów urządzenia: {]}

Od Apple TECH DOC:

Resetowanie alertu uprawnień powiadomień Push w systemie iOS Gdy aplikacja z obsługą push po raz pierwszy rejestruje powiadomienia push, iOS pyta użytkownika, czy chce otrzymywać powiadomienia dotyczące tej aplikacji. Gdy użytkownik ma odpowiedź na ten alert nie jest wyświetlana ponownie, chyba że urządzenie zostanie przywrócone lub aplikacja została odinstalowana przez co najmniej jeden dzień.

Jeśli chcesz symulować pierwsze uruchomienie aplikacji, możesz pozostawić ją odinstalowaną na jeden dzień. Możesz osiągnąć ten ostatni, nie czekając nawet dnia, wykonując następujące kroki:

  1. Usuń aplikację z urządzenia.

  2. Wyłącz urządzenie całkowicie i włącz je ponownie.

  3. Przejdź do Ustawienia > Ogólne > Data i godzina i ustaw datę z wyprzedzeniem na dzień lub więcej.

  4. Wyłącz urządzenie całkowicie ponownie i włącz je ponownie.

 5
Author: lepert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-08 00:56:49

Zastanawiałem się nad tym w przeszłości i doszedłem do wniosku, że nie był to w rzeczywistości poprawny przypadek testowy dla mojego kodu. Nie sądzę, że Twój kod aplikacji może rzeczywiście odróżnić kogoś odrzucającego powiadomienia za pierwszym razem lub później wyłączającego go z ustawień powiadomień iPhone ' a. To prawda, że doświadczenie użytkownika jest inny, ale to jest ukryte wewnątrz wywołania do rejestracji forremotenotificationtypes.

Wywołanie niezarejestrowanych funkcji nie całkowicie usuń aplikację z ustawień powiadomień - chociaż usuwa zawartość ustawień dla tej aplikacji. To jednak nie spowoduje, że okno dialogowe zostanie wyświetlone po raz drugi użytkownikowi przy następnym uruchomieniu aplikacji(przynajmniej nie w wersji 3.1.3, z którą obecnie testuję). Ale jak mówię powyżej, prawdopodobnie nie powinieneś się tym martwić.

 3
Author: kharrison,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-13 14:47:22

Ta sama notatka techniczna, do której odwołano się w zaakceptowanej odpowiedzi (TN2265 - rozwiązywanie powiadomień Push) została zaktualizowana o rozwiązanie dla systemu iOS 5 i nowszych.

W skrócie: tworzenie kopii zapasowej i przywracanie z niej za każdym razem.

W systemie iOS 5 i nowszych zresetuj alert uprawnień powiadomień push, przywracając urządzenie z kopii zapasowej (R. 11450187). Oto kroki, aby zrobić to skutecznie:

  1. Użyj organizera Xcode, aby zainstalować aplikację na urządzenie. Najważniejsze jest, aby zainstalować aplikację po raz pierwszy bez jej uruchamiania.
  2. użyj iTunes, aby utworzyć kopię zapasową urządzenia.
  3. Uruchom aplikację. Zostanie wyświetlony alert uprawnień powiadomień push.
  4. jeśli chcesz zresetować alert uprawnień powiadomień push, przywróć urządzenie z kopii zapasowej utworzonej w pierwszym kroku.
 3
Author: David Rönnqvist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-25 07:52:39

Notatka Apple Tech opisała również, że możesz przywrócić urządzenie, aby zresetować okno dialogowe powiadomień Push.

Nie mówi, że możesz również użyć opcji "Ogólne - > Reset - > usuń całą zawartość i ustawienia" na samym urządzeniu (iOS 5.x).

 2
Author: Wizfinger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-22 13:27:49

Oprócz odpowiedzi ianolito.

Miałem ten sam problem z aplikacją, którą pobrałem rok temu i początkowo odrzucałem powiadomienia push. Teraz, chcąc odzyskać powiadomienia push, te kroki działały dla mnie na iOS 7 beta. Nie jestem pewien, który punkt(y) dokładnie go wywołał.

  • Zamknij i usuń aplikację.
  • przejdź do ustawień iCloud i usuń aplikację z iCloud. Zrób to na wszystkich innych urządzeniach, na których masz włączoną kopię zapasową iCloud dla aplikacji. Po dezaktywacji i usuwanie Utwórz nową kopię zapasową. Aplikacja nie powinna być już wyświetlana w ramach kopii zapasowych. (Być może dlatego uwaga techniczna od Apple opisana przez ianolito przestała działać w iOS 5, ponieważ iCloud został wprowadzony w iOS 5, a wiele z nich ma włączoną kopię zapasową iCloud dla aplikacji.)
  • przejdź do ustawień czasu i ustaw czas dłuższy niż 1 miesiąc z wyprzedzeniem.
  • Wyłącz iPhone ' a (bez resetu).
  • Poczekaj chwilę, włącz ją ponownie i pobierz aplikację ponownie.
  • Uruchom aplikację i byłem ponownie zaprezentowałem okno dialogowe.
  • włącz ponownie kopię zapasową aplikacji, ponieważ jest ona nadal dezaktywowana. Popraw czas.

Dzięki Bogu nie musiałem "Kasować całej zawartości i ustawień". Może to komuś pomoże.

 1
Author: Masa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-21 11:40:33

Po godzinach poszukiwań i bez powodzenia z powyższymi sugestiami, to działało jak urok dla 3.x +

override func viewDidLoad() {
        super.viewDidLoad()


            requestAuthorization()

}

func requestAuthorization() {

        if #available(iOS 10.0, *) {

            UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
                print("Access granted: \(granted.description)")
            }

        } else {
            // Fallback on earlier versions
        }

    }
 0
Author: Felecia Genet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 18:46:18