Tenho tentado encontrar algumas informações sobre o novo switcher multitarefa no iOS 7 e especialmente a captura de tela que o sistema operacional faz quando o aplicativo está entrando em hibernação.
Existe alguma maneira de desligar completamente esse recurso ou captura de tela? Ou posso ocultar o aplicativo completamente do switcher? O aplicativo precisa ser executado em segundo plano, mas não queremos mostrar nenhuma captura de tela do aplicativo.
A captura de tela é potencialmente um risco de segurança, pense nas linhas dos aplicativos bancários em que o número do seu cartão ou o resumo da conta estarão disponíveis para qualquer pessoa que clicar duas vezes no botão home do dispositivo.
Alguém com alguma ideia sobre isso? Obrigado.
Respostas:
Ao preparar sua IU para execução em segundo plano , a Apple diz:
Consulte Perguntas e respostas técnicas QA1838: Como evitar que informações confidenciais apareçam no alternador de tarefas
Além de ocultar / substituir informações confidenciais, você também pode pedir ao iOS 7 para não tirar o instantâneo da tela por meio de
ignoreSnapshotOnNextApplicationLaunch
, cuja documentação diz:Dito isso, parece que o instantâneo da tela ainda foi tirado e, portanto, apresentei um relatório de bug. Mas você deve testar mais e ver se o uso dessa configuração ajuda.
Se este era um aplicativo corporativo, você também pode querer olhar para a configuração apropriada
allowScreenShot
descrita na seção Restrictions Payload da Configuration Profile Reference.Aqui está uma implementação que atinge o que eu precisava. Você pode apresentar o seu próprio
UIImageView
ou pode usar um padrão de protocolo de delegado para ocultar as informações confidenciais:Em seguida, dei ao meu delegado de aplicativo uma propriedade para isso:
Meu controlador de visualização define:
O controlador de visualização obviamente implementa esse protocolo:
E, finalmente, o delegado do meu aplicativo se vale deste protocolo e propriedade:
Observe, estou usando
applicationWillResignActive
em vez do recomendadoapplicationDidEnterBackground
, porque, como outros apontaram, este último não é chamado ao tocar duas vezes no botão home enquanto o aplicativo está em execução.Eu gostaria de poder usar notificações para lidar com tudo isso, em vez do padrão de protocolo de delegado, mas em meus testes limitados, as notificações não são tratadas em tempo hábil o suficiente, mas o padrão acima funciona bem.
fonte
ignoreSnapshotOnNextApplicationLaunch
método é ignorado se não for invocado durante a restauração do estado, conforme descrito aqui .ignoreSnapshotOnNextApplicationLaunch
está incorreta, que, como todos observamos, um instantâneo foi realmente tirado, mas simplesmente não será usado no próximo lançamento.Esta é a solução com a qual trabalhei para meu aplicativo:
Como disse Tommy: Você pode usar o applicationWillResignActive. O que fiz foi criar um UIImageView com meu SplashImage e adicioná-lo como subvisualização à minha janela principal-
Usei esse método em vez de applicationDidEnterBackground porque applicationDidEnterBackground não será acionado se você tocar duas vezes no botão home, e applicationWillResignActive será. Eu ouvi pessoas dizerem que pode ser acionado em outros casos também, então ainda estou testando para ver se dá problema, mas nenhum até agora! ;)
Aqui para remover a visualização da imagem:
Espero que isto ajude!
Sidenote: Eu testei isso tanto no simulador quanto em um dispositivo real: ele não vai mostrar no simulador, mas aparece em um dispositivo real!
fonte
Este método rápido e fácil produzirá um instantâneo preto acima do ícone do seu aplicativo no iOS7 ou posterior alternador de aplicativos.
Primeiro, pegue a janela principal de seu aplicativo (normalmente configurada em AppDelegate.m em application: didFinishLaunchingWithOptions) e oculte-a quando seu aplicativo estiver prestes a passar para o segundo plano:
Em seguida, revele a janela principal do seu aplicativo quando ele se tornar ativo novamente:
Neste ponto, verifique o alternador de aplicativos e verifique se você vê um instantâneo preto acima do ícone do seu aplicativo. Percebi que se você iniciar o alternador de aplicativos imediatamente após mover seu aplicativo para o segundo plano, pode haver um atraso de cerca de 5 segundos onde você verá um instantâneo do seu aplicativo (aquele que você deseja ocultar!), Após que faz a transição para um instantâneo totalmente preto. Não tenho certeza do que está acontecendo com o atraso; se alguém tiver alguma sugestão, por favor, entre em contato.
Se quiser uma cor diferente de preto no switcher, você pode fazer algo assim adicionando uma subvisualização com qualquer cor de fundo de sua preferência:
Em seguida, remova esta subvisão de cor quando seu aplicativo ficar ativo novamente:
fonte
Usei a seguinte solução: quando o aplicativo vai encerrar, pego o instantâneo do appWindow como uma Visualização e adiciono desfoque a ele. Então, adiciono esta visualização à janela do aplicativo
como fazer isso:
em appDelegate antes da linha de adição de implementação:
adicione estes métodos:
faça com que sua implementação appDelegate seja a seguinte:
Criei projectos exemplo na Swift e Objectivo C . Ambos os projetos realizam as seguintes ações em:
-application: didResignActive - o instantâneo é criado, desfocado e adicionado à janela do aplicativo
-application: a visualização de desfoque willBecomeActive está sendo removida da janela.
Como usar:
Objecitve C
Adicione
AppDelegate+NVSBlurAppScreen
arquivos .h e .m ao seu projetoem seu método -applicationWillResignActive: adicione a seguinte linha:
em seu método -applicationDidEnterBackground: adicione a seguinte linha:
Rápido
adicione o arquivo AppDelegateExtention.swift ao seu projeto
na função applicationWillResignActive, adicione a seguinte linha:
na função applicationDidBecomeActive, adicione a seguinte linha:
fonte
se for usado apenas
[self.window addSubview:imageView];
emapplicationWillResignActive
função, este imageView não cobrirá UIAlertView, UIActionSheet ou MFMailComposeViewController ...Melhor solução é
fonte
Fornecendo minha própria solução como "respostas", embora essa solução não seja muito confiável. Às vezes recebo uma tela preta como a captura de tela, às vezes o XIB e às vezes uma captura de tela do próprio aplicativo. Dependendo do dispositivo e / ou se eu executar isso no simulador.
Observe que não posso fornecer nenhum código para esta solução, pois contém muitos detalhes específicos do aplicativo. Mas isso deve explicar a essência da minha solução.
fonte
Você pode usar o ativador para configurar o clique duplo do botão home para iniciar a multitarefa e desabilitar o clique duplo padrão do botão home e iniciar a janela multitarefa. Este método pode ser usado para alterar as capturas de tela para a imagem padrão do aplicativo. Isso se aplica a aplicativos com recurso de proteção por senha padrão.
fonte
Xamarin.iOS
Adaptado de https://stackoverflow.com/a/20040270/7561
Em vez de apenas mostrar uma cor, eu queria mostrar minha tela de inicialização.
fonte