GDPR 대상국의 iOS 어플리케이션에 대한 판정 고려
개시하다
배경.
2018년 5월 25일부터 EEA 가맹국를 대상으로 개인정보 보호 관련 규칙GDPR-EU 일반 데이터 보호 규칙이 시행됐다.많은 사람들이 각종 응용 프로그램에서 온 알림을 알고 있을 것이다.(최근 개인 프라이버시 정책 수정 등에 많은 연락이 왔다.)
본 보호규칙을 시행할 때 서버 측, DB 측 등 각 층이 대응해야 하며, 본 보도는 iOS 애플리케이션에서 보호대상국이 현재 잘 진행되고 있는지 어떻게 판단하는지를 살펴본다.
전제 조건
사용 환경
다음 환경을 사용합니다.
목표를 달성하다
다음은 본 보도의 목표 달성이다.
GDPR 대상국(EEA 가맹국 31개국)에서 앱을 사용할 때 체류 여부를 판정한다.응용 프로그램을 사용할 때는 GDPR의 규칙에 다음과 같은 내용이 기재되어 있기 때문입니다.
GDPR의 대상 개인데이터는 EU 가맹국 등 31개국의 유럽경제분야(EEA) 권역 내 개인 관련 개인데이터(GDPR 제2조)다.국적과 거주지를 불문하고 EEA 구역 내에서 단기 체류하는 출장자와 여행자의 정보도 대상이다.
이에 따라 일본 국적을 가진 사용자라도 EEA 가맹국을 여행하면 여행 기간 정보가 GDPR 대상이 될 수 있다.
방법1 TimeZone 사용
이것은 애플리케이션 TimeZone을 사용하여 판정하는 방법입니다.iOS 설정 앱에서 특정 국가가 아닌 자동 설정이 되면 현재 소재지에서 적절한 TimeZone을 확보할 수 있어 지연 없이 판정할 수 있다.문제는 사용자가 TimeZone을 고정할 때 현재 위치에 있는 정보가 제대로 반영되지 않는다는 점입니다.
현재 TimeZone은 다음과 같은 방법으로 사용할 수 있습니다.
let currentTimeZone = TimeZone.current.identifier
앞으로 목표국을 추가·감축하겠다는 점을 고려하면 목표국 명단은 앱 내부에만 있는 게 아니라 외부에서 추가·삭제하는 게 낫지 않겠나.예를 들어 Firebase의 RemoteConfig를 통해 대상국의 TimeZone 목록을 만들고 응용 프로그램을 통해 현재의 TimeZone이 이 TimeZone에 포함되었는지 판단하는 것이 좋지 않겠는가.예를 들어 다음과 같은 방법을 만들면 판정할 수 있다.
// RemoteConfigから対象国のTimeZoneのStringを取得し、配列化します
// 例えば、該当国のTimeZoneを ','区切りで設定していた場合
// なおRemoteConfigからの値取得処理は割愛します、参考文献をご参照ください
let targetCountryTineZones = targetCountryTineZonesString.components(separatedBy: ",")
if isGDPRTargetCountry(targetCountryTimeZones: targetCountryTineZones) {
// GDPR対象国用の処理
}
func isGDPRTargetCountry(targetCountryTimeZones: [String]) -> Bool {
let currentTimeZone = TimeZone.current.identifier
return targetCountryTimeZones.contains(currentTimeZone)
}
또한, iOS에서 정한 TimeZone 일람표는 다음과 같은 방법으로 얻을 수 있다고 덧붙였다.TimeZone.knownTimeZoneIdentifiers
메서드2 GeoCoder 사용
이것은 응용 프로그램에서 위도와 경도를 얻을 때 사용할 수 있는 방법이다.
위도 및 경도를 가져올 수 있는 경우 iOS의 CLGeoCoder를 사용하여 다음 국가 코드를 가져올 수 있습니다.
※ 시료에서 획득한 코드는 2자리 국가 코드입니다.(예: 일본 - JS)
그러나 국가 코드를 얻는 것은 비동기적이기 때문에 얻는 시기와 방법을 논의할 필요가 있다.
예를 들어 프로그램이 시작될 때 국가 코드를 가져와서 UserDefaults에 저장하고 판정할 때 UserDefaults로 정보를 저장하는 방법이 더 좋지 않겠습니까?
final class GeoCoderWrapper {
static private var countryCode: String? {
get { return UserDefaults.standard.string(forKey: #function) }
set { UserDefaults.standard.set(newValue, forKey: #function) }
}
// 緯度・経度情報からCountryコードを取得し、UserDefaultsに保存
// locationはCLLocationManagerで取得済みとする
static func updateCountryCode(location: CLLocation) {
let geoCoder = CLGeocoder()
geoCoder.reverseGeocodeLocation(location) { (placeMarks, error) in
// placeMarkは複数返却されるため、1番目を取得
GeoCoderWrapper.lastISOCountryCode = placeMarks?.first?.isoCountryCode
}
}
}
이전 TimeZone과 마찬가지로 Firebase와 서버 측은 대상국 코드를 대상국에 포함할지 여부를 판정하기 위해 대상국 목록을 미리 생성했다.func isGDPRTargetCountry(targetCountryCodes: [String]) -> Bool {
guard let currentCountryCode = GeoCoderWrapper.countryCode else { return true }
return targetCountryCodes.contains(currentCountryCode)
}
또 대상국 31개국의 국가 코드 목록은 다음과 같다.
LI,IS,NO,AT,BE,BG,HR,CY,CZ,DK,EE,FI,FR,DE,GR,HU,IE,IT,LV,LT,LU,MT,NL,PL,PT,RO,SK,SI,ES,SE,GB
외국 편
Firebase 조건(지역, 언어)
Firebase의 RemoteConfig을 설정할 때 해당 속성에 대한 조건을 설정하여 반환 값을 조건별로 나눌 수 있습니다.다만, Firebase의 해당 속성은 애플리케이션이 설정된 지역과 언어에 따라 결정됩니다.사용자가 영역과 언어 설정을 명확하게 변경하지 않으면 변경되지 않습니다.이 때문에 일본에서 EU권으로 이동해도 지역·언어가 달라지지 않아 GDPR 대응 대상을 식별할 수 없어 요건을 충족할 수 없다.
Firebase 콘솔에서 직감적으로 대상을 끌어당기기 때문에 생각해 봤지만 이 방법은 사용할 수 없을 것 같다.
최후
GDPR사는 벌칙 규정이 연 매출의 4% 또는 2천만 유로 중 한 명이 높은 것으로 보고 있으며, 유로존을 대상으로 서비스를 제공하는 앱에 대해서는 그에 상응하는 대응이 필요하다고 주장한다.이 정보가 누구에게 도움이 된다면 다행입니다.이런 방법이 있나요? 이런 메시지가 있으면 메시지를 남겨주세요.
참고 자료
iOS
GeoCoder 정보
iPhone
국가 코드
GDPR
Reference
이 문제에 관하여(GDPR 대상국의 iOS 어플리케이션에 대한 판정 고려), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/iganin/items/11318a0f021e0204e41f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)