He estado tratando de encontrar información sobre el nuevo conmutador multitarea en iOS 7 y especialmente la captura de pantalla que toma el sistema operativo cuando la aplicación entra en hibernación.
¿Hay alguna forma de desactivar por completo esta función o captura de pantalla? ¿O puedo ocultar la aplicación por completo del conmutador? La aplicación debe ejecutarse en segundo plano, pero no queremos mostrar ninguna captura de pantalla de la aplicación.
La captura de pantalla es potencialmente un riesgo de seguridad, piense en las líneas de aplicaciones bancarias donde su número de tarjeta o resumen de cuenta estará disponible para cualquiera que haga doble clic en el botón de inicio en el dispositivo.
¿Alguien con alguna idea de esto? Gracias.
Respuestas:
Al preparar su interfaz de usuario para ejecutarse en segundo plano , Apple dice:
Consulte las preguntas y respuestas técnicas QA1838: Cómo evitar que aparezca información confidencial en el selector de tareas
Además de ocultar / reemplazar información confidencial, es posible que también desee decirle a iOS 7 que no tome la instantánea de la pantalla a través de
ignoreSnapshotOnNextApplicationLaunch
, cuya documentación dice:Dicho esto, parece que la instantánea de la pantalla todavía se está tomando y, por lo tanto, he presentado un informe de error. Pero debe probar más y ver si usar esta configuración ayuda.
Si se trataba de una aplicación empresarial, es posible que también desee consultar la configuración adecuada que se
allowScreenShot
describe en la sección Carga útil de restricciones de la Referencia del perfil de configuración.Aquí hay una implementación que logra lo que necesitaba. Puede presentar el suyo propio
UIImageView
o puede utilizar un patrón de protocolo de delegado para ocultar la información confidencial:Luego le di a mi delegado de aplicación una propiedad para eso:
Mi controlador de vista lo configura:
El controlador de vista, obviamente, implementa ese protocolo:
Y, finalmente, el delegado de mi aplicación se sirve de este protocolo y propiedad:
Tenga en cuenta que estoy usando en
applicationWillResignActive
lugar de lo recomendadoapplicationDidEnterBackground
, porque, como han señalado otros, este último no se llama al tocar dos veces el botón de inicio mientras la aplicación se está ejecutando.Me gustaría poder usar notificaciones para manejar todo esto, en lugar del patrón de protocolo de delegado, pero en mis pruebas limitadas, las notificaciones no se manejan de manera lo suficientemente oportuna, pero el patrón anterior funciona bien.
fuente
ignoreSnapshotOnNextApplicationLaunch
método se ignora si no se invoca durante la restauración del estado, como se describe aquí .ignoreSnapshotOnNextApplicationLaunch
es incorrecta, que, como todos observamos, en realidad se toma una instantánea, pero simplemente no se usará en el próximo lanzamiento.Esta es la solución con la que trabajé para mi aplicación:
Como dijo Tommy: puede usar la aplicaciónWillResignActive. Lo que hice fue hacer un UIImageView con mi SplashImage y agregarlo como subvista a mi ventana principal-
Utilicé este método en lugar de applicationDidEnterBackground porque applicationDidEnterBackground no se activará si presiona dos veces el botón de inicio, y applicationWillResignActive lo hará. Escuché a gente decir, aunque también se puede activar en otros casos, así que todavía estoy probando para ver si da problemas, ¡pero ninguno hasta ahora! ;)
Aquí para eliminar la vista de imagen:
¡Espero que esto ayude!
Nota al margen: probé esto tanto en el simulador como en un dispositivo real: no se mostrará en el simulador, ¡pero sí en un dispositivo real!
fuente
Este método rápido y fácil producirá una instantánea negra sobre el icono de su aplicación en el conmutador de aplicaciones iOS7 o posterior.
Primero, tome la ventana clave de su aplicación (generalmente configurada en AppDelegate.m en la aplicación: didFinishLaunchingWithOptions) y ocúltela cuando su aplicación esté a punto de pasar al fondo:
Luego, muestre la ventana clave de su aplicación cuando su aplicación se active nuevamente:
En este punto, revise el selector de aplicaciones y verifique que vea una instantánea negra sobre el ícono de su aplicación. Me he dado cuenta de que si inicia el conmutador de aplicaciones inmediatamente después de mover su aplicación en segundo plano, puede haber una demora de ~ 5 segundos en la que verá una instantánea de su aplicación (¡la que desea ocultar!), Después que cambia a una instantánea completamente negra. No estoy seguro de qué pasa con el retraso; Si alguien tiene alguna sugerencia, por favor intervenga.
Si desea un color diferente al negro en el conmutador, puede hacer algo como esto agregando una subvista con cualquier color de fondo que desee:
Luego, elimine esta subvista de color cuando su aplicación se active nuevamente:
fuente
Usé la siguiente solución: cuando la aplicación va a renunciar, obtengo una instantánea de appWindow como Vista y le agrego desenfoque. Luego agrego esta vista a la ventana de la aplicación
como hacer esto:
en appDelegate justo antes de la implementación, agregue la línea:
agregue estos métodos:
haga que su implementación de appDelegate sea la siguiente:
Creé ejemplos de proyectos en Swift y Objective C . Ambos proyectos realizan las siguientes acciones en:
-application: didResignActive : la instantánea se crea, se difumina y se agrega a la ventana de la aplicación
-aplicación: la vista borrosa willBecomeActive se está eliminando de la ventana.
Cómo utilizar:
Objeto C
Agregue
AppDelegate+NVSBlurAppScreen
archivos .hy .m a su proyectoen su método -applicationWillResignActive: agregue la siguiente línea:
en su método -applicationDidEnterBackground: agregue la siguiente línea:
Rápido
agregue el archivo AppDelegateExtention.swift a su proyecto
en su función applicationWillResignActive agregue la siguiente línea:
en su función applicationDidBecomeActive agregue la siguiente línea:
fuente
si solo se usa
[self.window addSubview:imageView];
en laapplicationWillResignActive
función, este imageView no cubrirá UIAlertView, UIActionSheet o MFMailComposeViewController ...La mejor solución es
fuente
Proporcionar mi propia solución como "respuestas", aunque esta solución es muy poco confiable. A veces obtengo una pantalla negra como captura de pantalla, a veces el XIB y, a veces, una captura de pantalla de la propia aplicación. Dependiendo del dispositivo y / o si ejecuto esto en el simulador.
Tenga en cuenta que no puedo proporcionar ningún código para esta solución ya que contiene muchos detalles específicos de la aplicación. Pero esto debería explicar la esencia básica de mi solución.
fuente
Puede usar el activador para configurar el doble clic del botón de inicio para iniciar la multitarea y deshabilitar el doble clic predeterminado del botón de inicio y el inicio de la ventana de multitarea. Este método se puede utilizar para cambiar las capturas de pantalla a la imagen predeterminada de la aplicación. Esto es aplicable a aplicaciones con la función de protección de contraseña predeterminada.
fuente
Xamarin.iOS
Adaptado de https://stackoverflow.com/a/20040270/7561
En lugar de solo mostrar un color, quería mostrar mi pantalla de inicio.
fuente