Aplikacja Snapchat w App Store to aplikacja, która umożliwia udostępnianie zdjęć z autodestrukcją. Zdjęcia można oglądać tylko przez X sekund. Jeśli spróbujesz zrobić zrzut ekranu, gdy obraz jest wyświetlany, za pomocą kombinacji klawiszy zasilania domu, nadawca powie, że próbowałeś zrobić zrzut ekranu.
Jaka część zestawu SDK umożliwia wykrycie, że użytkownik wykonuje zrzut ekranu? Nie wiedziałem, że to możliwe.
ios
screenshot
me2
źródło
źródło
Odpowiedzi:
Znalazłem odpowiedź !! Zrobienie zrzutu ekranu przerywa wszelkie dotknięcia ekranu. Dlatego snapchat wymaga przytrzymania, aby zobaczyć obraz. Źródła: http://tumblr.jeremyjohnstone.com/post/38503925370/how-to-detect-screenshots-on-ios-like-snapchat
źródło
Od iOS 7 inne odpowiedzi nie są już prawdziwe. Apple sprawiło, że tak
touchesCancelled:withEvent:
się nie dzieje, gdy użytkownik robi zrzut ekranu.To skutecznie całkowicie zepsułoby Snapchata, więc dodano kilka wersji beta w nowym rozwiązaniu. Teraz rozwiązanie jest tak proste, jak użycie NSNotificationCenter w celu dodania obserwatora do UIApplicationUserDidTakeScreenshotNotification .
Oto przykład:
Cel C
Szybki
źródło
touchesCancelled:withEvent:
powinno umożliwić wykrycie zrzutu ekranu we wszystkich (najnowszych) wersjach systemu iOS.Oto jak to zrobić w Swift z zamknięciami:
Swift 4.2
Jest to standardowa funkcja w:
https://github.com/goktugyil/EZSwiftExtensions
Zastrzeżenie: to moje repozytorium
źródło
Najnowszy SWIFT 3 :
W viewDidLoad wywołaj tę funkcję
Jednak,
działa całkowicie dobrze. Nie widzę żadnych punktów mainQueue ...
źródło
Wygląda na to, że nie ma bezpośredniego sposobu, aby to zrobić, aby wykryć, czy użytkownik kliknąłhome + power button
. W związku z tym było to możliwe wcześniej za pomocą powiadomienia Darwina, ale już nie działa. Ponieważ snapchat już to robi, przypuszczam, że sprawdzają album ze zdjęciami iPhone'a, aby wykryć, czy między tymi 10 sekundami dodano nowe zdjęcie, aw jakiś sposób porównują się z wyświetlanym obecnie obrazem. Być może dla tego porównania przeprowadzane jest przetwarzanie obrazu. Tylko myśl, prawdopodobnie możesz spróbować rozszerzyć to, aby działało. Sprawdź to, aby uzyskać więcej informacji .Edytować:
Wygląda na to, że mogą wykrywać zdarzenie anulowania UITouch (zrzut ekranu anuluje dotknięcia) i wyświetlać użytkownikowi ten komunikat o błędzie zgodnie z tym blogiem: Jak wykryć zrzuty ekranu w iOS (jak SnapChat)
W takim przypadku możesz użyć
– touchesCancelled:withEvent:
metody, aby wykryć anulowanie UITouch, aby to wykryć. Możesz usunąć obraz w tej metodzie delegata i pokazać użytkownikowi odpowiedni alert.źródło
Home + Lock
przycisków system operacyjny natychmiast zachowuje się tak, jakby żaden palec nie dotykał ekranu. Może dzieje się to beztouchesEnded:withEvent
wywołania zwrotnego (lub podobnego wywołania zwrotnego), jak zwykle, więc może mogą monitorować ten unikalny wzorzec zdarzeń? Być może jestem na złym tropie, ale to moja jedyna teoria w tej chwili.Swift 4+
korzystając z tego obserwatora możesz dowiedzieć się, kiedy użytkownik robi zrzut ekranu, ale nie możesz mu zapobiec.
źródło
Szybkie 4 przykłady
Przykład 1 z użyciem zamknięcia
Przykład nr 2 z selektorem
źródło