Die App Snapchat im App Store ist eine App, mit der Sie Bilder mit einer Selbstzerstörung teilen können. Sie können die Bilder nur für X Sekunden anzeigen. Wenn Sie versuchen, einen Screenshot zu machen, während das Bild mit der Home-Power-Tastenkombination angezeigt wird, wird dem Absender mitgeteilt, dass Sie versucht haben, einen Screenshot zu machen.
In welchem Teil des SDK können Sie erkennen, dass der Benutzer einen Screenshot macht? Ich wusste nicht, dass dies möglich ist.
ios
screenshot
me2
quelle
quelle
Antworten:
Ich habe die Antwort gefunden !! Wenn Sie einen Screenshot machen, werden alle Berührungen auf dem Bildschirm unterbrochen. Aus diesem Grund muss Snapchat gedrückt gehalten werden, um das Bild zu sehen. Referenz: http://tumblr.jeremyjohnstone.com/post/38503925370/how-to-detect-screenshots-on-ios-like-snapchat
quelle
Ab iOS 7 sind die anderen Antworten nicht mehr wahr. Apple hat es so gemacht, dass
touchesCancelled:withEvent:
es nicht mehr aufgerufen wird, wenn der Benutzer einen Screenshot macht.Dies würde Snapchat effektiv vollständig zerstören, so dass ein paar Betas in einer neuen Lösung hinzugefügt wurden. Jetzt ist die Lösung so einfach wie die Verwendung von NSNotificationCenter, um UIApplicationUserDidTakeScreenshotNotification einen Beobachter hinzuzufügen .
Hier ist ein Beispiel:
Ziel c
Schnell
quelle
touchesCancelled:withEvent:
sollten Sie einen Screenshot aller (aktuellen) Versionen von iOS erkennen können.Hier ist, wie man in Swift mit Schließungen umgeht:
Swift 4.2
Dies ist als Standardfunktion enthalten in:
https://github.com/goktugyil/EZSwiftExtensions
Haftungsausschluss: Es ist mein Repo
quelle
Neueste SWIFT 3 :
Rufen Sie in viewDidLoad diese Funktion auf
Jedoch,
funktioniert völlig gut. Ich sehe keine Punkte von mainQueue ...
quelle
Es gibt anscheinend keine direkte Möglichkeit, dies zu tun, um festzustellen, ob der Benutzer darauf getippt hathome + power button
. Aus diesem Grund war es früher möglich, Darwin-Benachrichtigungen zu verwenden, aber es funktioniert nicht mehr. Da Snapchat dies bereits tut, schätze ich, dass sie das iPhone-Fotoalbum überprüfen, um festzustellen, ob zwischen diesen 10 Sekunden ein neues Bild hinzugefügt wurde, und in gewisser Weise mit dem aktuell angezeigten Bild vergleichen. Möglicherweise wird für diesen Vergleich eine Bildverarbeitung durchgeführt. Nur ein Gedanke, wahrscheinlich können Sie versuchen, dies zu erweitern, damit es funktioniert. Überprüfen Sie dies für weitere Details .Bearbeiten:
Es sieht so aus, als würden sie das UITouch-Abbruchereignis erkennen (Bildschirmaufnahme bricht Berührungen ab) und dem Benutzer diese Fehlermeldung gemäß diesem Blog anzeigen : So erkennen Sie Screenshots unter iOS (wie SnapChat)
In diesem Fall können Sie
– touchesCancelled:withEvent:
die UITouch-Stornierung mithilfe einer Methode erfassen, um dies zu erkennen. Sie können das Bild in dieser Delegatmethode entfernen und dem Benutzer eine entsprechende Warnung anzeigen.quelle
Home + Lock
das Betriebssystem beim Drücken von Tasten sofort so tut, als würden keine Finger den Bildschirm berühren. Vielleicht geschieht dies ohne einentouchesEnded:withEvent
(oder einen ähnlichen Rückruf) wie normalerweise, sodass sie möglicherweise auf dieses einzigartige Ereignismuster überwachen können? Ich bin vielleicht völlig auf dem falschen Weg, aber das ist derzeit meine einzige Theorie.Swift 4+
Mit diesem Beobachter können Sie herausfinden, wann der Benutzer einen Screenshot macht, aber Sie können ihn nicht verhindern.
quelle
Swift 4 Beispiele
Beispiel 1 mit Verschluss
Beispiel 2 mit Selektor
quelle