O aplicativo Snapchat , na App Store, é um aplicativo que permite compartilhar fotos com uma autodestruição. Você só pode ver as fotos por X segundos. Se você tentar fazer uma captura de tela enquanto a imagem estiver sendo exibida usando a combinação de teclas de energia doméstica, ele informará ao remetente que você tentou fazer uma captura de tela.
Qual parte do SDK permite detectar que o usuário está fazendo uma captura de tela? Eu não sabia que isso era possível.
ios
screenshot
me2
fonte
fonte
Respostas:
Eu encontrei a resposta !! A captura de tela interrompe todos os toques que estão na tela. É por isso que o snapchat exige que você segure para ver a foto. Referência: http://tumblr.jeremyjohnstone.com/post/38503925370/how-to-detect-screenshots-on-ios-like-snapchat
fonte
A partir do iOS 7, as outras respostas não são mais verdadeiras. A Apple fez com que
touchesCancelled:withEvent:
não seja mais chamada quando o usuário faz uma captura de tela.Isso efetivamente quebraria completamente o Snapchat, então foram adicionados alguns betas em uma nova solução. Agora, a solução é tão simples quanto usar o NSNotificationCenter para adicionar um observador ao UIApplicationUserDidTakeScreenshotNotification .
Aqui está um exemplo:
Objetivo C
Rápido
fonte
touchesCancelled:withEvent:
permita detectar uma captura de tela em todas as versões (recentes) do iOS.Aqui está como fazer em Swift com fechamentos:
Swift 4.2
Isso está incluído como uma função padrão em:
https://github.com/goktugyil/EZSwiftExtensions
Disclaimer: É o meu repo
fonte
SWIFT mais recente 3 :
Em viewDidLoad , chame esta função
Contudo,
funciona totalmente bem. Não vejo nenhum ponto do mainQueue ...
fonte
Parece que não há uma maneira direta de fazer isso para detectar se o usuário tocouhome + power button
. Conforme isso , foi possível anteriormente usando a notificação darwin, mas não funciona mais. Como o snapchat já está fazendo isso, meu palpite é que eles estão verificando o álbum de fotos do iPhone para detectar se há uma nova imagem adicionada entre esses 10 segundos e de alguma forma eles estão comparando com a imagem atual exibida. Pode ser que algum processamento de imagem seja feito para essa comparação. Apenas um pensamento, provavelmente você pode tentar expandir isso para fazê-lo funcionar. Verifique isso para mais detalhes .Editar:
Parece que eles podem estar detectando o evento de cancelamento do UITouch (a captura de tela cancela os toques) e mostrando esta mensagem de erro ao usuário de acordo com este blog: Como detectar capturas de tela no iOS (como SnapChat)
Nesse caso, você pode usar o
– touchesCancelled:withEvent:
método para detectar o cancelamento do UITouch para detectar isso. Você pode remover a imagem nesse método delegado e mostrar um alerta apropriado ao usuário.fonte
Home + Lock
botões, o sistema operacional age imediatamente como se nenhum dedo estivesse tocando a tela. Talvez isso aconteça sem umtouchesEnded:withEvent
(ou retorno de chamada semelhante) como faria normalmente, então talvez eles possam monitorar esse padrão único de eventos? Posso estar totalmente no caminho errado, mas essa é a minha única teoria neste momento.Swift 4+
usando esse observador, você pode descobrir quando o usuário faz uma captura de tela, mas não pode impedi-lo.
fonte
Swift 4 Exemplos
Exemplo # 1 usando fechamento
Exemplo # 2 com seletor
fonte