Push-Benachrichtigungseinstellungen für App zurücksetzen

173

Ich entwickle eine App mit Push-Benachrichtigungen. Um alle möglichen Arten der Benutzerinteraktion zu überprüfen, möchte ich meine App testen, wenn ein Benutzer beim ersten Start ablehnt, Push-Benachrichtigungen für meine App zu aktivieren.

Der Dialog (initiiert von registerForRemoteNotificationTypes) wird jedoch nur einmal pro App angezeigt. Wie setze ich den Speicher des iPhone OS für meine App zurück? Das Löschen der App und die Neuinstallation helfen nicht.

hanno
quelle

Antworten:

300

Technischer Hinweis TN2265: Fehlerbehebung bei Push-Benachrichtigungen

Wenn sich eine Push-fähige App zum ersten Mal für Push-Benachrichtigungen registriert, fragt iOS den Benutzer, ob er Benachrichtigungen für diese App erhalten möchte. Sobald der Benutzer auf diese Warnung reagiert hat, wird sie erst wieder angezeigt, wenn das Gerät wiederhergestellt oder die App mindestens einen Tag lang deinstalliert wurde.

Wenn Sie eine erstmalige Ausführung Ihrer App simulieren möchten, können Sie die App einen Tag lang deinstallieren lassen. Letzteres können Sie erreichen, ohne einen Tag zu warten, indem Sie die Systemuhr einen Tag oder länger vorwärts stellen, das Gerät vollständig ausschalten und dann wieder einschalten.

Update: Wie in den Kommentaren unten erwähnt, funktioniert diese Lösung seit iOS 5.1 nicht mehr. Ich würde empfehlen, einen Fehler bei Apple einzureichen, damit diese ihre Dokumentation aktualisieren können. Die aktuelle Lösung scheint darin zu bestehen, den Inhalt und die Einstellungen des Geräts zurückzusetzen.

Update: Der technische Hinweis wurde mit neuen Schritten aktualisiert, die ab iOS 7 ordnungsgemäß funktionieren.

  1. Löschen Sie Ihre App vom Gerät.
  2. Schalten Sie das Gerät vollständig aus und wieder ein.
  3. Gehen Sie zu Einstellungen> Allgemein> Datum und Uhrzeit und legen Sie das Datum einen Tag oder länger vor.
  4. Schalten Sie das Gerät wieder vollständig aus und wieder ein.

UPDATE ab iOS 9

Durch einfaches Löschen und erneutes Installieren der App wird der Benachrichtigungsstatus auf zurückgesetzt notDetermined(dh es werden Eingabeaufforderungen angezeigt).

Dank der Antwort von Gomfucius unten: https://stackoverflow.com/a/33247900/704803

ianolito
quelle
16
Hat jemand dies mit iOS 5.1 versucht? Ich habe diese Schritte genau befolgt und kann das Gerät immer noch nicht zum Zurücksetzen bringen ... Ich habe sogar versucht, die Uhr auf meinem Mac vorwärts zu stellen, bevor ich sie über Xcode installiere.
Nr.
1
Ditto ... Ich habe keine Aufforderung erhalten.
Rob
2
Apple hat den Richtlinien für AppStore-Übermittlungen eine neue Anforderung hinzugefügt, die sich darauf stützt, dass die Anwendung die Eingabeaufforderung anzeigt. Dies könnte darauf hindeuten, dass die automatische Eingabeaufforderung in iOS 5.1 entfernt wurde. Es gibt jedoch keine API zum Abfragen der Einstellungen des Benachrichtigungscenters. Sie sind sich daher nicht sicher, welchen Zweck die Eingabeaufforderung ohnehin haben würde. Siehe meine Antwort auf ein ähnliches Problem: stackoverflow.com/questions/10191006/…
Greg
10
Das ist lächerlich. Ist Apple nicht klar, dass Entwickler oder sogar Benutzer diese Dinge möglicherweise zurücksetzen möchten, ohne eine wirklich schlechte Problemumgehung zu verwenden?
Sudo
2
Wenn ich dies im Simulator versuche, erhalte ich den Fehlercode = 3010 "Remote-Benachrichtigungen werden im Simulator nicht unterstützt"
Thomas Zimmer
48

Eine andere Lösung zum Testen besteht darin, einfach Ihre Bundle-ID zu ändern. Vergiss nur nicht, es wieder zu ändern, wenn du fertig bist!

Capikaw
quelle
12
Müssen Sie nicht auch ein Zertifikat für die neue App-ID erstellen, um sie zu testen?
Tony
1
Dies würde nur funktionieren, wenn Sie Wildcard-basierte Bereitstellungsprofile verwenden. Andernfalls müssten Sie ein Profil für das neue Bundle erstellen.
Zorayr
Selbst wenn Sie ein neues Profil erstellen müssen, klicken Sie einfach auf die Schaltfläche "Fix it" und warten Sie einige Sekunden - viel schneller als bei all diesen Neustartzyklen.
Ilya
Das ist die schnellste Lösung! Es funktioniert ziemlich gut für mich! Wenn Sie Ihre bundle_id ändern, können Sie die App nicht mit denselben "Bereitstellungsprofilen" signieren. Aber keine Sorge, in xCode (meine Version 7.1.1) können Sie auf "Fix it" klicken und es erledigt den Job. Vergessen Sie auch nicht das Onglet "Capabilities", in dem Sie mehrere Elemente "reparieren" können (indem Sie auf die Schaltfläche "Fix it" klicken), und dann funktioniert es sehr gut!
Dam Fa
Diese Antwort ist eine legitime Option, aber immer noch ein Hack-Fix für eine dumme Situation von Apple. Ich ändere weder die bundleID noch schalte ich die Geräteuhr um. Ebenso könnte jeder Entwickler einen Funktionscode schreiben, der eine UIAlertView zeigt, in der gefragt wird, ob Push-Benachrichtigungen zulässig sind. .. Ja = Aufruf der Registermethode; No = call didFailToRegisterForRemoteNotificationsWithError (etc) .. das ist meine eigene Lösung, mein Take-away nach dem Lesen dieser Fragen und Antworten. Technisch gesehen ist dies der beste Weg, um Benutzer auf Datenschutzinformationen aufmerksam zu machen ... WARUM Push aktiviert oder optional sein muss.
Tom Pace
36

Unter iOS 9.0.2 wird jedes Mal, wenn ich die App lösche und neu installiere, die Meldung "Push-Benachrichtigung registrieren" angezeigt. Dies gilt sowohl für AppStore-Produktionsdownloads als auch für den Ad-hoc-Modus.

UPDATE: Es wurde bestätigt, dass dies für iOS 9.x funktioniert

Genki
quelle
1
Ich habe das gleiche Verhalten für iOS 9.x. Ich würde Ihnen empfehlen, die ursprüngliche Antwort durch Hinzufügen eines UPDATE
Yevhen Dubinin
3
Schließlich! Keine App mehr löschen, Gerät ausschalten, Uhr auf Vorwärtszeit stellen und so was Dummes.
Mkeremkeskin
19

Wie bereits erwähnt, wurde der Ansatz zum Zurücksetzen des Benachrichtigungsstatus für eine App auf einem Gerät für iOS5 und eine neuere Version geändert.

Dies funktioniert für mich unter iOS6:

  • Entfernen Sie die App vom Gerät
  • Stellen Sie die Datums- und Uhrzeit des Geräts mindestens zwei Tage im Voraus ein
  • Starten Sie das Gerät neu
  • Stellen Sie die Datums- und Uhrzeit des Geräts mindestens zwei Tage im Voraus ein
  • Starten Sie das Gerät neu
  • Installieren Sie die App und führen Sie sie erneut aus

Dadurch wird jedoch nur die erste Eingabeaufforderung erneut angezeigt. Es werden keine anderen Push-Status-bezogenen Elemente entfernt.

micmdk
quelle
Hat auch für mich auf ios7 gearbeitet, du musst das Datum zweimal ändern, wenn es nicht funktioniert
Nath
1
Danke dir! Dies funktioniert sogar unter iOS 8 (ich musste die Push-Berechtigungen für Twitter.app zurücksetzen, da die Einstellung "App-Symbolabzeichen" in den Einstellungen in den Einstellungen nicht vorhanden war).
Gklka
9

Die Liste: /private/var/mobile/Library/RemoteNotification/Clients.plist

... enthält die registrierten Clients für Push-Benachrichtigungen. Wenn Sie den Eintrag Ihrer App entfernen, wird die Eingabeaufforderung erneut angezeigt

Erik Johnson
quelle
11
nutzlose Antwort, wenn Sie für den App Store entwickeln
Samvermette
20
Wenn dies für Jailbreaker möglich ist, sollte es Entwicklern möglich sein, dies auf einem Telefon ohne Jailbreak zu tun, oder? Und es ist KEINE nutzlose Antwort, da Sie dies nicht in eine App einfügen würden, um sie an den Store zu senden. Es ist Sache der Entwickler, WHILE TESTING durchzuführen.
Oscar
1
Diese Datei ist nicht Teil von iOS 5.x.
gmogames
Sehen Sie eine aktualisierte Antwort als Teil dieser Frage: stackoverflow.com/questions/13021066/…
AriX
7

Programmatisch zu arbeiten scheint für mich jedes Mal zu funktionieren. Ich habe einen Build mit der folgenden Zeile unkommentiert:

 [[UIApplication sharedApplication] unregisterForRemoteNotifications];

Ich führe es jedes Mal aus, wenn ich mich von PN abmelden möchte. Möglicherweise müssen Sie die App explizit aus der Liste der letzten Nachrichten beenden und mit dem Benachrichtigungscenter in der App "Einstellungen" herumspielen, um sie richtig zu machen.

Außerdem wird die UI-Eingabeaufforderung, die den Benutzer auffordert, sich für PN zu registrieren, möglicherweise nicht angezeigt. Nicht sicher, ob in einer der letzten iOS-Versionen deaktiviert wurde.

dagnytaggart
quelle
Arbeitete für mich iOS 10 / iPhone 6S. Beachten Sie, dass ich die App vor der Neuinstallation abgemeldet und dann gelöscht habe.
Gabriel Jensen
5

Wie Ianolito sagte, sollte das Einstellen des Datums funktionieren:

Letzteres können Sie erreichen, ohne einen Tag zu warten, indem Sie die Systemuhr einen Tag oder länger vorwärts stellen, das Gerät vollständig ausschalten und dann wieder einschalten.

Ich habe festgestellt, dass auf meinem Gerät (iPhone 4, iOS 6.1.2) die Systemuhr einen Tag vorwärts eingestellt wurde oder sogar einige Tage bei mir nicht funktionierten . Also habe ich das Datum einen Monat vorverlegt und dann hat es funktioniert und meine Anwendung hat die Benachrichtigungsaufforderung erneut angezeigt.

Hoffe, das hilft jedem, es kann Kopfschmerzen verursachen!

Vincent Cohen
quelle
1
Bitte antworten Sie nicht mit "Neuestes Betriebssystem" - es ändert sich ständig. Dieses Verhalten scheint in 6.1.2 immer noch fehlerhaft zu sein, aber vielleicht hat es in 6.0.1 funktioniert?
Patr1ck
Die Antwort bearbeitet, noch in 6.1.2 ja und vorher auch in 6.0.1. Es funktioniert nur bei mir, wenn ich mindestens das Datum +1 Monat eingestellt habe.
Vincent Cohen
1
Ich hatte auch das 24-Stunden-Ding gehört, also habe ich es ausprobiert und es hat 2 Tage im Voraus nicht funktioniert. Stellen Sie es auf 3 Monate ein und das Berechtigungs-Popup wurde erneut angezeigt! Vielen Dank!
Markshilling
Alter Beitrag, aber froh zu sehen, dass er immer noch hilfreich ist! Viel Glück :)
Vincent Cohen
5

Ich bin mit micmdk einverstanden. Ich hatte eine Entwicklungsumgebung mit Push-Benachrichtigungen eingerichtet und brauchte eine Möglichkeit, mein Telefon so zurückzusetzen, dass es wie eine Erstinstallation aussieht. Nur diese genauen Schritte haben bei mir funktioniert. ZWEI Neustarts des Geräts sind erforderlich:

Von APPLE TECH DOC:

Zurücksetzen des Push-Benachrichtigungs-Berechtigungsalarms unter iOS Wenn sich eine Push-fähige App zum ersten Mal für Push-Benachrichtigungen registriert, fragt iOS den Benutzer, ob er Benachrichtigungen für diese App erhalten möchte. Sobald der Benutzer auf diese Warnung reagiert hat, wird sie erst wieder angezeigt, wenn das Gerät wiederhergestellt oder die App mindestens einen Tag lang deinstalliert wurde.

Wenn Sie eine erstmalige Ausführung Ihrer App simulieren möchten, können Sie die App einen Tag lang deinstallieren lassen. Sie können Letzteres erreichen, ohne einen Tag zu warten, indem Sie die folgenden Schritte ausführen:

  1. Löschen Sie Ihre App vom Gerät.

  2. Schalten Sie das Gerät vollständig aus und wieder ein.

  3. Gehen Sie zu Einstellungen> Allgemein> Datum und Uhrzeit und legen Sie das Datum einen Tag oder länger vor.

  4. Schalten Sie das Gerät wieder vollständig aus und wieder ein.

lepert
quelle
Dies wurde in einer anderen Antwort als nicht mehr funktionierend erwähnt.
Beau Nouvelle
Es funktioniert gut. Was in iOS 5.1 nicht mehr funktionierte, war die alte Version dieser anderen Antwort, bei der der Neustart zwischen dem Löschen der App und dem Einstellen der Uhr ausgelassen wurde.
Dgatwood
3

Ich habe mich in der Vergangenheit darüber gewundert und bin zu dem Schluss gekommen, dass es sich tatsächlich nicht um einen gültigen Testfall für meinen Code handelt. Ich glaube nicht, dass Ihr Anwendungscode tatsächlich den Unterschied zwischen jemandem erkennen kann, der Benachrichtigungen beim ersten Mal ablehnt oder später in den iPhone-Benachrichtigungseinstellungen deaktiviert. Es ist wahr, dass die Benutzererfahrung anders ist, aber dies ist im Aufruf von registerForRemoteNotificationTypes verborgen.

Durch Aufrufen von unregisterForRemoteNotifications wird die Anwendung nicht vollständig aus den Benachrichtigungseinstellungen entfernt, obwohl der Inhalt der Einstellungen für diese Anwendung entfernt wird. Dies führt also immer noch nicht dazu, dass der Dialog dem Benutzer beim nächsten Ausführen der App ein zweites Mal angezeigt wird (zumindest nicht in Version 3.1.3, mit der ich gerade teste). Aber wie ich oben sage, sollten Sie sich darüber wahrscheinlich keine Sorgen machen.

Kharrison
quelle
Ich hatte auf eine bessere Antwort gehofft, aber ich denke, es gibt einfach keine. Danke trotzdem!
Hanno
3

Der gleiche technische Hinweis wie in der akzeptierten Antwort ( TN2265 - Fehlerbehebung bei Push-Benachrichtigungen) wurde seitdem mit einer Lösung für iOS 5 und höher aktualisiert.

Kurz gesagt: Erstellen Sie jedes Mal ein Backup und stellen Sie es wieder her.

Setzen Sie unter iOS 5 und höher die Benachrichtigung über Push-Benachrichtigungsberechtigungen zurück, indem Sie das Gerät aus einer Sicherung wiederherstellen (r. 11450187). Hier sind die Schritte, um dies effizient zu tun:

  1. Verwenden Sie den Xcode Organizer, um Ihre App auf dem Gerät zu installieren. Der Schlüssel ist, die App zum ersten Mal zu installieren, ohne sie auszuführen.
  2. Verwenden Sie iTunes, um das Gerät zu sichern.
  3. Führen Sie die App aus. Die Benachrichtigung über Push-Benachrichtigungsberechtigungen wird angezeigt.
  4. Wenn Sie die Benachrichtigung über Push-Benachrichtigungsberechtigungen zurücksetzen möchten, stellen Sie das Gerät aus der Sicherung wieder her, die Sie im ersten Schritt erstellt haben.
David Rönnqvist
quelle
Es könnte das auf einmal empfohlen haben, aber es funktioniert nicht mehr. Die aktuelle Empfehlung lautet, die App zu löschen, neu zu starten, die Uhr vorwärts zu stellen, neu zu starten, optional die Uhr auf das richtige Datum und die richtige Uhrzeit zurückzustellen und die App auszuführen.
Dgatwood
2

Im Apple Tech Note wurde auch beschrieben, dass Sie das Gerät wiederherstellen können, um das Dialogfeld "Push-Benachrichtigung" zurückzusetzen.

Es heißt nicht, dass Sie auch die Option "Allgemein -> Zurücksetzen -> Alle Inhalte und Einstellungen löschen" auf dem Gerät selbst verwenden können (iOS 5.x).

Herr Zystem
quelle
1
Für das, was es wert ist: Ich habe gerade versucht, alle Einstellungen zu löschen, und das hat nicht funktioniert. Versuchen, alle Inhalte und alle Einstellungen ...
Groxx
8
Und "alle Inhalte und Einstellungen" funktionieren tatsächlich, danke! Aber heilige Nuklearoption, Batman! Das ist absolut verrückt.
Groxx
94
Ich habe gehört, dass der Kauf eines neuen Geräts auch die Push-Benachrichtigung löscht!
Samvermette
Ich habe versucht, ein neues Gerät zu kaufen, aber das hat auch nicht funktioniert. Nachdem sie das neue Gerät in die Genius-Leiste gebracht hatten, arbeiteten sie etwas magisch und reparierten es für mehr Geld ... Ich bin überrascht, dass Apple nach so vielen Jahren immer noch keine praktische und einfache Möglichkeit zum Zurücksetzen von Push-Berechtigungen bereitgestellt hat. Es ist lächerlich
Chris
1

Neben der Antwort von ianolito.

Hatte das gleiche Problem mit einer App, die ich vor einem Jahr heruntergeladen hatte und die Push-Benachrichtigung zunächst ablehnte. Da ich nun Push-Benachrichtigungen zurück haben wollte, funktionierten diese Schritte für mich unter iOS 7 Beta. Nicht sicher, welche Punkte es genau ausgelöst haben.

  • Schließen und löschen Sie die App.
  • Gehen Sie zu Ihren iCloud-Einstellungen und löschen Sie die App aus der iCloud. Tun Sie dies auf allen anderen Geräten, auf denen iCloud Backup für Apps aktiviert ist. Erstellen Sie nach dem Deaktivieren und Löschen ein neues Backup. Die App sollte nicht mehr unter den Backups aufgeführt sein. (Dies ist möglicherweise der Grund, warum der von ianolito beschriebene technische Hinweis von Apple in iOS 5 nicht mehr funktioniert, da iCloud in iOS 5 eingeführt wurde und in vielen iCloud-Backups für Apps aktiviert sind.)
  • Gehen Sie zu Ihren Zeiteinstellungen und stellen Sie die Zeit länger als 1 Monat ein.
  • Schalten Sie das iPhone aus (kein Reset).
  • Warten Sie eine Minute, schalten Sie es wieder ein und laden Sie die App erneut herunter.
  • Starten Sie die App und mir wurde der Dialog erneut angezeigt.
  • Aktivieren Sie die App-Sicherung erneut, da sie noch deaktiviert ist. Korrigieren Sie die Zeit.

Gott sei Dank musste ich nicht "Alle Inhalte und Einstellungen löschen". Vielleicht hilft es jemandem.

Masa
quelle
1

Ich bin kürzlich auf ein ähnliches Problem mit reaktionsnativen Anwendungen gestoßen. Die iPhone OS-Version war 13.1. Ich habe die Anwendung deinstalliert und versucht, die App zu installieren. Dabei wurde festgestellt, dass sowohl Standort- als auch Benachrichtigungsberechtigungen nicht angefordert wurden.

Beim Überprüfen der Einstellungen konnte ich feststellen, dass meine Anwendung für den Speicherort aktiviert war (aus der vorherigen Installation). Es gab jedoch keinen entsprechenden Eintrag für die Benachrichtigung. Es wurde versucht, die Datei zu deinstallieren und neu zu starten, ohne die Zeit festzulegen. Es funktionierte nicht. Übrigens habe ich auch versucht, die Appstore-App herunterzuladen, immer noch das gleiche Verhalten.

Das Problem wurde erst nach dem Einstellen der Gerätezeit behoben.

RUppal
quelle
0

Nach stundenlangem Suchen und ohne Glück mit den obigen Vorschlägen funktionierte dies wie ein Zauber für 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
        }

    }
Felecia Genet
quelle