J'ai essayé de trouver des informations concernant le nouveau sélecteur multitâche dans iOS 7 et en particulier la capture d'écran que le système d'exploitation prend lorsque l'application est en veille prolongée.
Existe-t-il un moyen de désactiver complètement cette fonctionnalité ou cette capture d'écran? Ou puis-je masquer complètement l'application du mélangeur? L'application doit s'exécuter en arrière-plan, mais nous ne souhaitons afficher aucune capture d'écran de l'application.
La capture d'écran est potentiellement un risque pour la sécurité, pensez aux applications bancaires où votre numéro de carte ou le résumé de votre compte sera disponible pour quiconque double-clique sur le bouton d'accueil de l'appareil.
Quelqu'un avec un aperçu de cela? Merci.
Réponses:
En préparant votre interface utilisateur pour qu'elle s'exécute en arrière-plan , Apple déclare:
Voir Questions et réponses techniques QA1838: Empêcher les informations sensibles d'apparaître dans le sélecteur de tâches
En plus de masquer / remplacer les informations sensibles, vous pouvez également demander à iOS 7 de ne pas prendre l'instantané d'écran via
ignoreSnapshotOnNextApplicationLaunch
, dont la documentation dit:Cela dit, il semble que la capture d'écran soit toujours prise et j'ai donc déposé un rapport de bogue. Mais vous devriez tester plus loin et voir si l'utilisation de ce paramètre aide.
S'il s'agissait d'une application d'entreprise, vous souhaiterez peut-être également examiner le paramètre approprié de
allowScreenShot
décrit dans la section Charge utile des restrictions de la référence du profil de configuration.Voici une mise en œuvre qui réalise ce dont j'avais besoin. Vous pouvez présenter le vôtre
UIImageView
ou utiliser un modèle de protocole de délégué pour masquer les informations confidentielles:J'ai ensuite donné à mon délégué d'application une propriété pour cela:
Mon contrôleur de vue le définit:
Le contrôleur de vue implémente évidemment ce protocole:
Et, enfin, mon délégué d'application utilise ce protocole et cette propriété:
Notez que j'utilise
applicationWillResignActive
plutôt que le conseilléapplicationDidEnterBackground
, car, comme d'autres l'ont souligné, ce dernier n'est pas appelé lorsque vous appuyez deux fois sur le bouton d'accueil pendant que l'application est en cours d'exécution.J'aimerais pouvoir utiliser les notifications pour gérer tout cela, plutôt que le modèle de protocole de délégué, mais dans mes tests limités, les notifications ne sont pas gérées assez rapidement, mais le modèle ci-dessus fonctionne bien.
la source
ignoreSnapshotOnNextApplicationLaunch
méthode est ignorée si elle n'est pas invoquée lors de la restauration de l'état, comme décrit ici .ignoreSnapshotOnNextApplicationLaunch
est incorrecte, que, comme nous l'avons tous observé, un instantané est réellement pris, mais ne sera tout simplement pas utilisé au prochain lancement.Voici la solution avec laquelle j'ai travaillé pour mon application:
Comme l'a dit Tommy: vous pouvez utiliser l'applicationWillResignActive. Ce que j'ai fait, c'est de créer une UIImageView avec mon SplashImage et de l'ajouter en tant que sous-vue à ma fenêtre principale.
J'ai utilisé cette méthode au lieu de applicationDidEnterBackground car applicationDidEnterBackground ne sera pas déclenché si vous appuyez deux fois sur le bouton d'accueil, et applicationWillResignActive le sera. J'ai entendu des gens dire que cela pouvait être déclenché dans d'autres cas également, donc je suis toujours en train de tester pour voir si cela pose problème, mais aucun pour l'instant! ;)
Ici pour supprimer l'imageview:
J'espère que cela t'aides!
Note de bas de page: J'ai testé cela à la fois sur le simulateur et sur un appareil réel: il ne s'affichera pas sur le simulateur, mais c'est le cas sur un vrai appareil!
la source
Cette méthode rapide et facile donnera un instantané noir au-dessus de l'icône de votre application dans le sélecteur d'application iOS7 ou version ultérieure.
Tout d'abord, prenez la fenêtre clé de votre application (généralement configurée dans AppDelegate.m dans l'application: didFinishLaunchingWithOptions) et cachez-la lorsque votre application est sur le point de passer en arrière-plan:
Ensuite, désactivez la fenêtre principale de votre application lorsque celle-ci redevient active:
À ce stade, consultez le sélecteur d'application et vérifiez que vous voyez un instantané noir au-dessus de l'icône de votre application. J'ai remarqué que si vous lancez le sélecteur d'application immédiatement après avoir déplacé votre application en arrière-plan, il peut y avoir un délai d'environ 5 secondes pendant lequel vous verrez un instantané de votre application (celle que vous souhaitez masquer!), Après qu'il transforme en un instantané entièrement noir. Je ne sais pas ce qui se passe avec le retard; si quelqu'un a des suggestions, merci de le signaler.
Si vous voulez une couleur autre que le noir dans le sélecteur, vous pouvez faire quelque chose comme ceci en ajoutant une sous-vue avec la couleur d'arrière-plan de votre choix:
Ensuite, supprimez cette sous-vue de couleur lorsque votre application redevient active:
la source
J'ai utilisé la solution suivante: lorsque l'application va démissionner, j'obtiens un instantané appWindow en tant que vue et y ajoute du flou. Ensuite, j'ajoute cette vue à la fenêtre de l'application
comment faire ceci:
dans appDelegate juste avant l'implémentation, ajoutez la ligne:
ajoutez ces méthodes:
faites en sorte que votre implémentation appDelegate soit la suivante:
J'ai créé des exemples de projets dans Swift et Objective C . Les deux projets réalisent les actions suivantes dans:
-application: didResignActive - l'instantané est créé, flouté et ajouté à la fenêtre de l'application
-application: willBecomeActive blur view est en cours de suppression de la fenêtre.
Comment utiliser:
Objecitf C
Ajoutez des
AppDelegate+NVSBlurAppScreen
fichiers .h et .m à votre projetdans votre méthode -applicationWillResignActive: ajoutez la ligne suivante:
dans votre méthode -applicationDidEnterBackground: ajoutez la ligne suivante:
Rapide
ajoutez le fichier AppDelegateExtention.swift à votre projet
dans votre fonction applicationWillResignActive ajoutez la ligne suivante:
dans votre fonction applicationDidBecomeActive, ajoutez la ligne suivante:
la source
si seulement utilisé
[self.window addSubview:imageView];
dans laapplicationWillResignActive
fonction, cette imageView ne couvrira pas UIAlertView, UIActionSheet ou MFMailComposeViewController ...La meilleure solution est
la source
Fournir ma propre solution en tant que «réponses», bien que cette solution soit très peu fiable. Parfois, j'obtiens un écran noir comme capture d'écran, parfois le XIB et parfois une capture d'écran de l'application elle-même. Selon l'appareil et / ou si je l'exécute dans le simulateur.
Veuillez noter que je ne peux pas fournir de code pour cette solution car il contient beaucoup de détails spécifiques à l'application. Mais cela devrait expliquer l'essentiel de ma solution.
la source
Vous pouvez utiliser l'activateur pour configurer le double-clic du bouton d'accueil pour lancer le multitâche et désactiver le double-clic par défaut du bouton d'accueil et le lancement de la fenêtre multitâche. Cette méthode peut être utilisée pour remplacer les captures d'écran par l'image par défaut de l'application. Cela s'applique aux applications avec la fonction de protection par mot de passe par défaut.
la source
Xamarin.iOS
Adapté de https://stackoverflow.com/a/20040270/7561
Au lieu d'afficher simplement une couleur, je voulais montrer mon écran de lancement.
la source