Evite la captura de pantalla en una aplicación de iOS

Necesito evitar la captura de pantalla por parte de los usuarios de mi aplicación, por razones de seguridad. Los contenidos que muestro son confidenciales y no deberían copiarse en el dispositivo. Vi una respuesta en Stack Overflow, pero para Android .

¿Es posible de alguna manera en iOS evitar la captura de pantalla?

Si bien capturar la captura de pantalla en la galería con solo hacer clic en algunos botones es una característica muy útil para el usuario, también existe un requisito limitado para evitarla. ¿Alguna sugerencia?

El otro problema es la captura de pantalla en wetware, ya que una persona captura la pantalla con otro dispositivo como una cámara u otro teléfono. Incluso si lo previene en la aplicación, es imposible evitar que alguien tome una foto de la pantalla.

No hay forma de evitar tomar capturas de pantalla por completo. Puede hacer lo que Snapchat hace, que es requiriendo que el usuario toque la pantalla para ver la información que está mostrando. Esto se debe a que el evento de captura de pantalla del sistema interrumpe. No es un método perfecto y no puede evitar que los usuarios tomen capturas de pantalla el 100% del tiempo.

Más detalles: ¿ Detección de pantalla de iOS?

Una solución posible es Yovo . ¡Acabo de ver esta demo que me dejó boquiabierto!

http://vimeo.com/108244650

Es una forma extremadamente ingeniosa de ocultar la captura de pantalla, e incluso maneja parcialmente el caso de “wetware” planteado por JimBobBennet.

Configura una máscara de desenfoque en la parte superior de la imagen (el patrón de cercado se usa en la aplicación, pero cualquier patrón funcionará) y lo mueve como una velocidad rápida. Si el usuario toma una captura de pantalla, obtiene la imagen fija de un solo cuadro, que en sí mismo está oscurecido.

Utiliza el hecho de que nuestros cerebros pueden unir una imagen detrás de una máscara en movimiento, similar a cómo se puede “ver” a través de las hojas de un ventilador en movimiento.

Para capturar la imagen, necesitarías grabar un video de la misma, lo cual es bastante complicado.

El único problema aquí podría ser IP: Yovo afirma tener más de 300 patentes …

He oído que puedes escuchar un evento de captura de pantalla usando UIApplicationUserDidTakeScreenshotNotification

NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationUserDidTakeScreenshotNotification object:nil queue:mainQueue usingBlock:^(NSNotification *note) { // executes after screenshot NSLog(@"Screenshot Detection : %@", note); UIAlertView *screenshotAlert = [[UIAlertView alloc] initWithTitle:@"Screenshot Detected" message:@"Oh Oh no screenshot bruhh" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [screenshotAlert show]; }]; 

¿Qué pasaría si pudieras borrar inmediatamente el archivo de captura de pantalla cuando se creó?

Ha pasado un tiempo, pero me encontré con ScreenShieldKit , que es una tecnología pendiente de patente utilizada por la aplicación de mensajería Confide. Lo que hace es que permite al usuario tomar capturas de pantalla, pero el contenido está en blanco en la imagen final. Recientemente lanzaron la versión de iOS.

Elimine la información confidencial de las vistas antes de pasar al fondo. Cuando una aplicación pasa al segundo plano, el sistema toma una instantánea de la ventana principal de la aplicación, que luego presenta brevemente al hacer la transición de su aplicación al primer plano. Antes de regresar de su aplicaciónDidEnterBackground : método, debe ocultar u ocultar las contraseñas y otra información personal confidencial que pueda capturarse como parte de la instantánea.

En swift 4 agrega este código al delegado de tu aplicación.

Declarar una variable en el delegado de la aplicación

 var imageview : UIImageView? func applicationWillResignActive(_ application: UIApplication) { imageview = UIImageView.init(image: UIImage.init(named: "bg_splash")) self.window?.addSubview(imageview!) // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. } func applicationDidBecomeActive(_ application: UIApplication) { if (imageview != nil){ imageview?.removeFromSuperview() imageview = nil } // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. } 

Tal vez pueda detectar la captura de pantalla recién tomada y eliminarla si la aplicación tiene la autorización.

Sin embargo, si quiere evitar que el usuario tome una captura de pantalla que contenga información confidencial, debería intentar un recorrido. No es una buena práctica y no puede evitar que el usuario lo haga por completo.