아요에서 화면 녹화/캡처를 감지해보자

nero_luv03·2022년 8월 6일
0
post-thumbnail

가끔 넷플릭스나 웨이브같은 OTT들을 보다가 너무 마음에 드는 장면이 나올 때 캡처를 하거나 화면녹화를 하게 되면 영상이 보이지 않고 검은 화면이 나오는데 왜 이런 것일까?
(실제로 이러진 않음.! 순전히 예를 든 것이다 ..)

이외에도 네이버 웹툰이라던지 저작권/보안정책 때문에 화면 녹화/캡처가 되지 않는 앱들이 여러 존재하는데 어떻게 화면 녹화/캡처를 감지하는 것일까?

알아보러 가봅시다.




❗️참고 해야할 점

화면 녹화나 캡처 기능은 OS 자체에서 제공되기 때문에 개발자가 기능자체를 막을 수는 없습니다. 대신에 녹화/캡처를 감지해서 경고창을 띄운다던가 뷰를 안보이게 만드는 것과 같이 대처 할 수 있게 만드는 것이 이 포스트의 목표입니다.




화면 녹화/캡처를 감지하는 방법은 여러 방법이 있습니다.

1. NotificationCenter를 이용

가장 흔히 사용하는 방법이 아닐까 생각이 드는데

  • 캡처 감지 : UIApplication.userDidTakeScreenshotNotification
  • 녹화 감지 : UIScreen.capturedDidChangeNotification (iOS 11.0+)

간단히 말하자면 NotificationCenter에 요 두 개를 등록해서 이벤트가 생길 때 처리를 해주는 방법이다

NotificationCenter
            .default
            .addObserver(
            	self, 
                selector: #selector(didCapturedScreenshot), 
                name: UIApplication.userDidTakeScreenshotNotification, 
                object: nil
            )
}
NotificationCenter
            .default
            .addObserver(
            	self, 
                selector: #selector(didCapturedRecording), 
                name: UIScreen.capturedDidChangeNotification, 
                object: nil
            )
}

이 코드에서 화면 녹화/캡처에 대한 이벤트가 전달됐을 때 didCapturedScreenshot나 didCapturedRecording 여기서 각자 원하는 처리를 해주면 된다.

예시)

  • 경고 Alert 띄우기
  • 앱 강제종료 시키기
  • 캡처되려는 뷰말고 다른 뷰로 갈아끼우기
  • 등..

✚ 더하자면
녹화 상태를 키고 들어오면 NotificationCenter가 감지를 못해서 계속 녹화가 이루어지는데 이 경우에는

if UIScreen.main.isCaptured { //이벤트 처리 } 

요 한 줄을 추가하면 해결할 수 있다!

2. ScreenShieldKit(상용기술)

https://screenshieldkit.com

ScreenSheieldKit은 상용 라이브러리로 알려져있고 꽤나 비싸다고 알려져있다

  • Screenshot
  • Screen recording
  • QuickTime recording
  • Screen mirroring
  • Xcode screenshot
  • App switcher

다 제어가 가능하다고 하네요,, 호덜덜

번외 : 애플의 스트리밍 서비스(FairPlay Streaming)

애플의 스트리밍 서비스인 FairPlay에서는 영상 캡처가 방지되어있다고 합니다. 대부분의 OTT 서비스들에서는 FairPlay에서 적용되는 캡처 방지 기술을 사용하고 있을 것 같네요!




마무리

아무래도 NotificationCenter로 해결하는 방법이 간단하게 처리할 수 있을 것 같네요.! 스트리밍 서비스를 개발 중이라면 FairPlay에서 제공 중인 거 그대로 써도 괜찮을 것 같습니다 :)

만약 프로덕트가 보안에 아주아주 민감하다면 ScreenShieldKit 사용도 고려해볼 수도 있을 것 같기도 합니다.(회사-by-회사)

출처

profile
iOS developer

0개의 댓글