2015-07-29 18 views
7

Derzeit, wenn ich die Kamera Berechtigungen für meine App in den Einstellungen ändern, dann zurück zu meiner App navigieren, wird die App eine Aktualisierung erzwingen und ich werde meinen Platz in der App verlieren. Ich folge diese Schritte genau:Wie kann ich das Zurücksetzen von iOS-Apps nach dem Ändern der Kameraberechtigungen verhindern?

  1. Öffnen Sie eine Anwendung, die die Kamera Erlaubnis verwendet.
  2. Navigieren Sie zu einem gewissen Bildschirm innerhalb der App (so können Sie die Refresh später sichtbar sehen)
  3. Gehen Sie auf die App Einstellungen, navigieren zu Hause, um die Einstellungen der App und wechseln die Kamera Erlaubnis
  4. Klicken Sie doppelt und gehen Sie zurück zur App Nach einigen Sekunden wird es aktualisieren, zurück zum ersten Bildschirm

Hinweis zu bringen: ich ein iPhone mit iOS 6 bin mit 8,4

Ich habe dieses Verhalten auf alle Apps bemerkt, dass Habe die Kamera Erlaubnis. Meine Frage ist: Gibt es eine Möglichkeit zu verhindern, dass die App nach dem Ändern der Kamera-Berechtigung aktualisiert/neu gestartet wird (im nächsten Schritt)? Es scheint nicht zu passieren, wenn Sie zum Beispiel Standortdienste wechseln, und aus Sicht der Benutzerfreundlichkeit ist das schrecklich.

Benutzerszenario: Wenn ein Benutzer tief in Ihre App navigiert und dann die Kameraberechtigung ändern muss (weil sie versehentlich nicht zuletzt geklickt haben), werden sie gezwungen, zu diesem Bildschirm zurückzukehren, wenn sie zurückkehren. Dies ist besonders schädlich für eine App, die versucht, Ihnen etwas zu verkaufen, oder Sie für ein neues Konto anmelden. Sie könnten versuchen, eine neue Funktion einzuführen, mit der Sie mit der Kamera ein Profilbild erstellen oder Ihre Kreditkarte scannen können. Da der Benutzer diese Funktion nicht kennt, haben sie den Zugriff auf die Kamera möglicherweise bereits verweigert, möchten ihn jetzt jedoch aktivieren. Nachdem Sie versucht haben, sie wieder zu aktivieren, kehren sie zu Ihrer App zurück, um zu sehen, dass sie mehr als 5 Minuten für die Anmeldung/den Kauf benötigen. Danach würde ich wahrscheinlich aufgeben.

Antwort

7

Ich bin mir sicher, dass es keine anderen Möglichkeiten gibt, das Neustarten der App zu verhindern. Tatsächlich erhalten Sie beim Umschalten der Einstellungen eine SIGKILL-Nachricht, aber kein Crash-Protokoll. Siehe unten Links-

Der einzige Weg, um dieses Szenario zu verhindern, ist es, den vorherigen Zustand von Ihnen Anwendung zu speichern, während beenden.

  • Store App Ihrer aktuellen Daten in eine json/plist/NSUserDefaults/Archiv Benutzermodell bei applicationWillTerminate: Methode und
  • gespeicherten Daten bei applicationWillEnterForeground wiederherzustellen:

Für Beispiel- @SignUpViewController für UIApplicationWillTerminateNotification registrieren Das wird ausgelöst, wenn die App beendet wird. Speichern Sie dort Benutzerinformationen.

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(applicationWillTerminate:) 
    name: UIApplicationWillTerminateNotification object:nil]; 
} 

- (void)applicationWillTerminate:(NSNotification *)notification 
{ 
// store your data here 
} 

Hoffnung das wird Ihnen helfen :)

+1

applicationWillTerminate genannt nicht einmal Benachrichtigung in viewDidLoad wird hinzufügen, wie Sie so eine Idee für diese vorschlagen? Bitte hilf mir. –

1

Die akzeptierte Antwort richtig ist, aber die Abhilfe scheint nicht in der aktuellen Version von iOS zu arbeiten (9.2) - die Anwendung scheint zu beenden, bevor UIApplicationWillTerminateNotification ist gefeuert. Durch Anhören von UIApplicationDidEnterBackgroundNotification kann das Gleiche erreicht werden. Beispiel in Swift, setzt diese in viewDidLoad()

NSNotificationCenter.defaultCenter().addObserver(self, selector: "enteringBackground:", name: UIApplicationDidEnterBackgroundNotification, object: nil) 

und eine Funktion wie diese:

func enteringBackground(sender:AnyObject){ 
    // Save application state here 
} 
+0

das ist hilfreich. Könnten Sie den Code zum Speichern/Wiederherstellen auch in diese Antwort schreiben? –