2 votes

Empêcher le système de prendre un instantané "Utiliser sur le CV" de l'application

J'ai des données sensibles affichées à mon utilisateur dans l'application, et lorsque l'utilisateur clique sur le bouton de la maison et revient dans l'application, Apple a une fonctionnalité de capture d'écran qui affiche une image de la dernière écran sur l'appareil avant que le bouton de la maison ne soit pressé.

Y a-t-il un moyen de désactiver cet effet entièrement? J'ai vu des moyens ici pour afficher une image lors de l'activation en arrière-plan qui se superpose à la vue et est affiché en premier à la place de la capture d'écran lorsque l'utilisateur retourne dans l'application, mais j'aimerais que cette fonctionnalité disparaisse complètement et ne pas avoir à enregistrer de captures d'écran ou toute autre capture d'écran lorsque l'utilisateur revient dans l'application. Quelqu'un peut-il suggérer un moyen de le faire?

Notez que je ne parle pas de prendre une capture d'écran avec le bouton home + le bouton de sommeil.

2voto

qegal Points 6399

Dans la méthode applicationWillResignActive: de votre délégué d'application, vous pouvez faire apparaître une UIImageView de quelque chose d'inconspicuous. Par exemple, imaginons que votre application conserve les mots de passe d'un utilisateur. Quelqu'un marche derrière l'utilisateur et l'utilisateur appuie sur le bouton d'accueil. Cela appelle la méthode applicationWillResignActive:, qui affiche peut-être une vue cartographique, de sorte que lorsque le marcheur est parti et que l'utilisateur rouvre l'application, elle s'ouvre directement sur une vue cartographique au lieu d'un bref instantané des mots de passe des utilisateurs. Voici comment vous pourriez le mettre en œuvre :

//AppDelegate.m
- (void)applicationWillResignActive:(UIApplication *)application {

    UIImageView *image = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"picOfMap.png"]];
    image.frame = self.view.frame;
    image.contentMode = UIViewContentModeCenter;
    [self.window.rootViewController.view addSubview: image];
}

Et voici une description de quand applicationWillResignActive: est appelée :

Cette méthode est appelée pour informer votre application qu'elle est sur le point de passer de l'état actif à l'état inactif. Cela peut se produire pour certains types d'interruptions temporaires (comme un appel téléphonique entrant ou un message SMS) ou lorsque l'utilisateur quitte l'application et qu'elle commence la transition vers l'état d'arrière-plan. Une application dans l'état inactif continue de s'exécuter mais ne transmet pas les événements entrants aux répondants. (Référence de l'UIApplicationDelegate)

Il peut y avoir quelques bugs dans le code car je ne suis pas familier avec le travail dans l'App Delegate, mais voilà l'essentiel de ce que vous devriez faire.

0voto

piobyz Points 1779

Voici une question-réponse technique d'Apple sur ce sujet : https://developer.apple.com/library/archive/qa/qa1838/_index.html

En bref, les extraits de code en Swift sont les suivants :

func applicationDidEnterBackground(_ application: UIApplication) {
    let someVCToShowInAppSwitcher = ...
    window?.rootViewController?.present(someVCToShowInAppSwitcher, animated: false)
}

et

func applicationWillEnterForeground(_ application: UIApplication) {
    // Assurez-vous que nous allons fermer un VC attendu, par exemple :
    if window?.rootViewController?.presentedViewController?.view.accessibilityIdentifier == "someVCToShowInAppSwitcher" {
        window?.rootViewController?.dismiss(sender: self)
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X