web-dev-qa-db-fra.com

Empêcher la capture d'écran dans une application iOS

Je dois empêcher la capture d'écran par les utilisateurs de mon application pour des raisons de sécurité. Le contenu que j'affiche est confidentiel et ne doit pas être copié sur l'appareil. J'ai vu une réponse sur Stack Overflow, mais pour Android .

Est-il possible en quelque sorte dans iOS d'empêcher la capture d'écran? 

Bien que la capture de la capture d'écran dans la galerie en un clic sur quelques boutons soit une fonctionnalité très utile pour l'utilisateur, il existe également une exigence limitée pour l'empêcher. Des pointeurs?

18
zolio

L’autre problème est la capture d’écran dans Internet, car une personne capture l’écran avec un autre appareil, comme un appareil photo ou un autre téléphone. Même si vous l'empêchez dans l'application, il est impossible d'empêcher quelqu'un de prendre une photo de l'écran.

16
JimBobBennett

Il y a non moyen d'éviter de prendre des captures d'écran entièrement. Vous pouvez faire ce que Snapchat fait, c'est-à-dire que l'utilisateur doit toucher l'écran pour afficher les informations que vous affichez. En effet, l'événement de capture d'écran du système interrompt des contacts. Ce n'est pas une méthode parfaite et vous ne pouvez pas empêcher les utilisateurs de prendre des captures d'écran 100% du temps. 

Plus de détails: iOS Détection de capture d'écran?

14
Joshua Gross

Une solution possible est Yovo . Je viens de voir cette démo qui m'a époustouflé! 

http://vimeo.com/108244650

C'est un moyen extrêmement intelligent de masquer une capture d'écran et gère même partiellement le cas "wetware" évoqué par JimBobBennet.

Vous configurez un masque de flou au-dessus de l'image (le motif de clôture est utilisé dans l'application, mais n'importe quel motif le fera) et vous le déplacez rapidement. Si l'utilisateur prend une capture d'écran, il obtient l'image fixe d'une seule image, qui est masquée par elle-même.

Il utilise le fait que nos cerveaux peuvent reconstituer une image derrière un masque en mouvement - de la même manière que vous pouvez "voir à travers" les pales d'un ventilateur en mouvement. 

Pour capturer l'image, vous devez en enregistrer une vidéo, ce qui est assez fastidieux.

IP - Yovo prétend avoir 300+ brevets ...

14
Ismail Degani

Supprimez les informations sensibles des vues avant de passer au Contexte. Lorsqu'une application passe en arrière-plan, le fichier Le système prend un instantané de la fenêtre principale de l’application, qu’il puis présente brièvement lors de la transition de votre application vers le premier plan. Avant de revenir de votre applicationDidEnterBackground : méthode, vous devez masquer ou masquer les mots de passe et autres informations sensibles informations personnelles susceptibles d'être capturées dans le cadre de l'instantané.

Dans Swift 4, ajoutez ce code à votre délégué d'application.

Déclarer une variable dans un délégué d'application

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.
    }
4
Ourang-Zeb Khan

J'ai entendu dire que vous pouvez écouter un événement de capture d'écran à l'aide de 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];
                                              }];

et si vous pouviez immédiatement supprimer le fichier de capture d'écran quand il a été créé?

2
lxknvlk

Cela fait longtemps, mais je viens de tomber sur ScreenShieldKit , une technologie en attente de brevet utilisée par l'application de messagerie Confide. Cela permet à l'utilisateur de prendre des captures d'écran, mais le contenu est vide sur l'image finale. Ils ont récemment publié la version iOS.

2
Onur Çevik

Peut-être que vous pouvez détecter la capture d'écran nouvellement prise et la supprimer si l'application dispose de l'autorisation.

Toutefois, si vous souhaitez empêcher l'utilisateur de prendre une capture d'écran contenant des informations sensibles, vous devriez essayer de vous déplacer. Ce n'est pas une bonne pratique et ne peut empêcher l'utilisateur de le faire entièrement.

0
0xa6a