Ich habe versucht, einige Informationen zum neuen Multitasking-Umschalter in iOS 7 zu finden, insbesondere den Screenshot, den das Betriebssystem macht, wenn die App in den Ruhezustand wechselt.
Gibt es eine Möglichkeit, diese Funktion oder diesen Screenshot vollständig auszuschalten? Oder kann ich die App ganz vor dem Umschalter verstecken? Die App muss im Hintergrund ausgeführt werden, wir möchten jedoch keinen Screenshot der App anzeigen.
Der Screenshot stellt möglicherweise ein Sicherheitsrisiko dar. Denken Sie an Bank-Apps, bei denen Ihre Kartennummer oder Kontozusammenfassung jedem zur Verfügung steht, der auf die Home-Schaltfläche des Geräts doppelklickt.
Hat jemand einen Einblick in das? Vielen Dank.
Antworten:
Bei der Vorbereitung Ihrer Benutzeroberfläche für die Ausführung im Hintergrund sagt Apple:
Siehe Technische Fragen und Antworten QA1838: Verhindern, dass vertrauliche Informationen im Task-Umschalter angezeigt werden
Zusätzlich zum Verdecken / Ersetzen vertraulicher Informationen möchten Sie iOS 7 möglicherweise anweisen, den Bildschirmschnappschuss nicht über zu
ignoreSnapshotOnNextApplicationLaunch
erstellen. In der Dokumentation heißt es:Trotzdem scheint der Screenshot noch aufgenommen zu sein und ich habe daher einen Fehlerbericht eingereicht. Sie sollten jedoch weiter testen und prüfen, ob die Verwendung dieser Einstellung hilfreich ist.
Wenn es sich um eine Unternehmensanwendung handelt, sollten Sie auch die entsprechende Einstellung
allowScreenShot
überprüfen, die im Abschnitt Einschränkungen der Nutzlast der Konfigurationsprofilreferenz beschrieben ist.Hier ist eine Implementierung, die das erreicht, was ich brauchte. Sie können Ihr eigenes präsentieren
UIImageView
oder ein Delegate-Protokoll-Muster verwenden, um die vertraulichen Informationen zu verschleiern:Ich habe dann meinem App-Delegierten eine Eigenschaft dafür gegeben:
Mein View Controller legt es fest:
Der View Controller implementiert offensichtlich dieses Protokoll:
Und schließlich nutzt mein App-Delegierter dieses Protokoll und diese Eigenschaft:
Beachten Sie, dass ich
applicationWillResignActive
eher die empfohlene als die empfohlene verwendeapplicationDidEnterBackground
, da letztere, wie andere bereits betont haben, nicht aufgerufen wird, wenn Sie zweimal auf die Home-Schaltfläche tippen, während die App ausgeführt wird.Ich wünschte, ich könnte Benachrichtigungen verwenden, um all dies zu verarbeiten, anstatt das Muster des Delegiertenprotokolls, aber in meinen begrenzten Tests werden die Benachrichtigungen nicht rechtzeitig genug verarbeitet, aber das obige Muster funktioniert einwandfrei.
quelle
ignoreSnapshotOnNextApplicationLaunch
Methode ignoriert, wenn sie nicht wie hier beschrieben während der Zustandswiederherstellung aufgerufen wird .ignoreSnapshotOnNextApplicationLaunch
korrekt ist, dass, wie wir alle festgestellt haben, tatsächlich ein Schnappschuss erstellt wird, der jedoch beim nächsten Start einfach nicht verwendet wird.Dies ist die Lösung, mit der ich für meine Anwendung gearbeitet habe:
Wie Tommy sagte: Sie können die applicationWillResignActive verwenden. Ich habe mit meinem SplashImage eine UIImageView erstellt und sie als Unteransicht zu meinem Hauptfenster hinzugefügt.
Ich habe diese Methode anstelle von applicationDidEnterBackground verwendet, da applicationDidEnterBackground nicht ausgelöst wird, wenn Sie zweimal auf die Home-Schaltfläche tippen, und applicationWillResignActive. Ich habe Leute sagen hören, dass es auch in anderen Fällen ausgelöst werden kann, also teste ich immer noch, um zu sehen, ob es ein Problem gibt, aber bisher keines! ;)
Hier, um die Bildansicht zu entfernen:
Hoffe das hilft!
Nebenbemerkung: Ich habe dies sowohl auf dem Simulator als auch auf einem realen Gerät getestet: Es wird nicht auf dem Simulator angezeigt, aber auf einem realen Gerät!
quelle
Diese schnelle und einfache Methode liefert einen schwarzen Schnappschuss über dem Symbol Ihrer App im App-Umschalter für iOS7 oder höher.
Nehmen Sie zunächst das Schlüsselfenster Ihrer App (normalerweise in AppDelegate.m in der Anwendung eingerichtet: didFinishLaunchingWithOptions) und blenden Sie es aus, wenn Ihre App in den Hintergrund tritt:
Blenden Sie dann das Schlüsselfenster Ihrer App ein, wenn Ihre App wieder aktiv wird:
Überprüfen Sie zu diesem Zeitpunkt den App-Umschalter und stellen Sie sicher, dass über dem Symbol Ihrer App ein schwarzer Schnappschuss angezeigt wird. Ich habe festgestellt, dass es nach dem Starten des App-Umschalters unmittelbar nach dem Verschieben der App in den Hintergrund zu einer Verzögerung von ~ 5 Sekunden kommen kann, nach der Sie einen Schnappschuss Ihrer App sehen (den, den Sie ausblenden möchten!) was es zu einem komplett schwarzen Schnappschuss übergeht. Ich bin mir nicht sicher, was mit der Verzögerung los ist. Wenn jemand Vorschläge hat, melden Sie sich bitte.
Wenn Sie im Umschalter eine andere Farbe als Schwarz wünschen, können Sie Folgendes tun, indem Sie eine Unteransicht mit einer beliebigen Hintergrundfarbe hinzufügen:
Entfernen Sie dann diese Farbunteransicht, wenn Ihre App wieder aktiv wird:
quelle
Ich habe die folgende Lösung verwendet: Wenn die Anwendung zurücktritt, erhalte ich den appWindow-Snapshot als Ansicht und füge Unschärfe hinzu. Dann füge ich diese Ansicht dem App-Fenster hinzu
Wie macht man das:
in appDelegate kurz vor der Implementierung Zeile hinzufügen:
Fügen Sie diese Methoden hinzu:
Stellen Sie Ihre appDelegate-Implementierung wie folgt ein:
Ich habe Beispielprojekte in Swift und Objective C erstellt . Beide Projekte führen die folgenden Aktionen aus:
-Anwendung: didResignActive - Der Schnappschuss wird erstellt, verwischt und dem App-Fenster hinzugefügt
-Anwendung: Die Ansicht " willBecomeActive" wird aus dem Fenster entfernt.
Wie benutzt man:
Ziel C.
Fügen
AppDelegate+NVSBlurAppScreen
Sie Ihrem Projekt .h- und .m-Dateien hinzuFügen Sie in Ihrer Methode -applicationWillResignActive: die folgende Zeile hinzu:
Fügen Sie in Ihrer Methode -applicationDidEnterBackground: die folgende Zeile hinzu:
Schnell
Fügen Sie Ihrem Projekt die Datei AppDelegateExtention.swift hinzu
Fügen Sie in Ihrer applicationWillResignActive-Funktion die folgende Zeile hinzu:
Fügen Sie in Ihrer applicationDidBecomeActive-Funktion die folgende Zeile hinzu:
quelle
Wenn diese Bildansicht nur
[self.window addSubview:imageView];
in derapplicationWillResignActive
Funktion verwendet wird, werden UIAlertView, UIActionSheet oder MFMailComposeViewController nicht behandelt ...Beste Lösung ist
quelle
Bereitstellung meiner eigenen Lösung als "Antwort", obwohl diese Lösung sehr unzuverlässig ist. Manchmal bekomme ich einen schwarzen Bildschirm als Screenshot, manchmal das XIB und manchmal einen Screenshot von der App selbst. Je nach Gerät und / oder ob ich dies im Simulator laufen lasse.
Bitte beachten Sie, dass ich keinen Code für diese Lösung bereitstellen kann, da dort viele app-spezifische Details enthalten sind. Dies sollte jedoch den Grundgedanken meiner Lösung erklären.
quelle
Sie können Activator verwenden, um das Doppelklicken der Home-Schaltfläche zum Starten von Multitasking zu konfigurieren und das standardmäßige Doppelklicken der Home-Schaltfläche und das Starten des Multitasking-Fensters zu deaktivieren. Mit dieser Methode können Sie die Screenshots in das Standardbild der Anwendung ändern. Dies gilt für Apps mit standardmäßiger Passcode-Schutzfunktion.
quelle
Xamarin.iOS
Angepasst von https://stackoverflow.com/a/20040270/7561
Anstatt nur eine Farbe anzuzeigen, wollte ich meinen Startbildschirm anzeigen.
quelle