iOS 11에서 화면 캡쳐 감지하기
2018.01.13
by Abhimuralidharan, translated by pilgwon
우리는 유료 비디오 컨텐츠를 제공하는 iOS 앱을 만드는 작업을 하고 있습니다. 그래서 iOS 11 화면 기록을 사용해서 비디오가 녹화될 가능성을 체크하는 기능이 필요해졌습니다. 이 글에서는 화면 기록을 하고 있는지 체크하는 기능을 구현하는 방법에 대해 적어두었습니다. 알고계세요! 저는 예전의 프로젝트에서 계속해서 작업 중이기 때문에 Objective-C 로 코드를 짰습니다. 원한다면 쉽게 Swift 버전으로 변경할 수 있을 것입니다.
저에게 필요했던 것은 화면 기록 기능을 사용할 수 있는 사람은 오직 값을 지불한 사용자들만 가능하도록 제한하는 것이었습니다. 화면 기록을 제한하는 것은 제 앱이 활성화돼 있을 때만 하도록 생각했습니다. 저는 우리의 앱 혼자서 화면 기록이나 스크린샷을 예방하는 방법을 찾지 못했습니다. 이것은 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 저장소에서 전체 프로젝트 코드를 확인하실 수 있습니다.
iOS 11에서 화면 캡쳐 감지하기
작동하는 앱의 캡쳐를 gif로 만들어보았습니다.
끝입니다.!
좋은 하루 되세요!!
이 게시글이 좋으셨다면, 원본 글로 가셔서 많은 박수 눌러주세요 👏👏👏👏👏 !!!!