본문 링크 (Original Link)

iOS 11에서 화면 캡쳐 감지하기

2018.01.13

#

by Abhimuralidharan, translated by pilgwon

우리는 유료 비디오 컨텐츠를 제공하는 iOS 앱을 만드는 작업을 하고 있습니다. 그래서 iOS 11 화면 기록을 사용해서 비디오가 녹화될 가능성을 체크하는 기능이 필요해졌습니다. 이 글에서는 화면 기록을 하고 있는지 체크하는 기능을 구현하는 방법에 대해 적어두었습니다. 알고계세요! 저는 예전의 프로젝트에서 계속해서 작업 중이기 때문에 Objective-C 로 코드를 짰습니다. 원한다면 쉽게 Swift 버전으로 변경할 수 있을 것입니다.

image1

저에게 필요했던 것은 화면 기록 기능을 사용할 수 있는 사람은 오직 값을 지불한 사용자들만 가능하도록 제한하는 것이었습니다. 화면 기록을 제한하는 것은 제 앱이 활성화돼 있을 때만 하도록 생각했습니다. 저는 우리의 앱 혼자서 화면 기록이나 스크린샷을 예방하는 방법을 찾지 못했습니다. 이것은 OS 단계의 기능이고 override할 수 없었습니다. (저는 해결책을 찾을 수 없었습니다. 여기에 대해 잘 알고 계신다면 저에게 알려주시면 감사하겠습니다.)

그래서 하나 남은 방법은 만약 화면 기록이 작동중이면 플레이어를 멈추는 것이었습니다. 운좋게도 iOS는 이에 대한 해결책을 제공합니다. iOS 11에서 captured 라는 인스턴스 속성이 UIScreen 에 있습니다. (Swift에서는 isCaptured 입니다.) 이는 Boolean 값이고 화면이 다른 곳에 복사되고 있는지에 대해 알려줍니다.

//Obj-C
@property(nonatomic, readonly, getter=isCaptured) BOOL captured;

// swift
var isCaptured: Bool { get }

또한 저는 화면이 외부 화면에 미러링되고 있는지 여부를 알려주는 mirroredScreen 속성을 사용했습니다.

그래서, 아이디어는 이 bool 값을 확인하고 만약 그 값이 true 라면 플레이어를 멈추는 것입니다.

저는 이 bool 값이 true 로 바뀔 때 알림을 보내는 노티피케이션을 만드는 코드를 작성했습니다. 코드는 Objective-C로 작성돼 있고 이해하기 꽤 쉽습니다.

여러분은 그저 kScreenRecordingDetectorRecordingStatusChangedNotification 을 옵저빙하고 isRecording 메소드가 true 를 반환하는지 false 를 반환하는지만 체크하면 됩니다.

GitHub 저장소에서 전체 프로젝트 코드를 확인하실 수 있습니다.

image2 iOS 11에서 화면 캡쳐 감지하기

작동하는 앱의 캡쳐를 gif로 만들어보았습니다.

끝입니다.!

좋은 하루 되세요!!

이 게시글이 좋으셨다면, 원본 글로 가셔서 많은 박수 눌러주세요 👏👏👏👏👏 !!!!