GDPR、CCPAの対象地域判定を、端末の地域(LocaleのRegion)とタイムゾーン(Timezone)で判定するためにやったこと

自分のアプリの利用者が、GDPR(General Data Protection Regulation)、CCPA(California Consumer Privacy Act)などのプライバシー規則関連の対象地域内にいるのか?
これをネットワークを介さず端末から取得できる情報のみで判別しようと思っている人に役立ちそうな情報を調べてみたのでまとめておきます。

ミスや間違いがあるかもしれませんので、ご心配な方はご自身で調べた上で、答え合わせ的な目的でご覧いただければと思います。(間違い等ありましたらご指摘大歓迎です!)

1、判定方法
基本的には対象となる国コードが端末で設定している国コードと一致しているかによって判定します。しかし、端末から得られる国情報は、端末が場所を移動したとしても自動的には切り替わらないと思います。なので、これにタイムゾーンでの判定を加えることで、より精度を高める方法をとります。タームゾーンは単純な時差情報だけでなく、地域情報を含んだIDが存在します。なのでこれを使うこととします。

2、国コードとタイムゾーンIDの取得方法
iOS、Androidでの各情報の取得方法は、簡単に書くと以下の通りです。

//国コード(LocaleのRegion)

//iOS(Objective-c)
[[NSLocale currentLocale] objectForKey: NSLocaleCountryCode];

//Android(Java)
context.getResources().getConfiguration().locale.getCountry();
//タイムゾーンID(Timezone)

//iOS(Objective-c)
[[NSTimeZone localTimeZone] name];

//Android(Java)
TimeZone.getDefault().getID();

3、対象となる国コードとタイムゾーンID

GDPR
EEA(European Economic Area):EU27カ国+3カ国の合計30カ国
オーストリア(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),リヒテンシュタイン(LI),アイスランド(IS),ノルウェー(NO)

これに、EU脱退したイギリス(GB)と、アドネットワークによってはスイス(CH)も対象にしていたりするところもあるみたいなので、便宜的に全32カ国とします。

まとめると、
{"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","LI","IS","NO","GB","CH"}

そして、これに該当するタイムゾーンは以下の通りです。
なお、キプロス、ポルトガル、スペインは、複数のタイムゾーンIDがあります

オーストリア(Europe/Vienna),ベルギー(Europe/Brussels),ブルガリア(Europe/Sofia),クロアチア(Europe/Zagreb),キプロス(Asia/Famagusta, Asia/Nicosia),チェコ(Europe/Prague),デンマーク(Europe/Copenhagen),エストニア(Europe/Tallinn),フィンランド(Europe/Helsinki),フランス(Europe/Paris),ドイツ(Europe/Berlin),ギリシャ(Europe/Athens),ハンガリー(Europe/Budapest),アイルランド(Europe/Dublin),イタリア(Europe/Rome),ラトビア(Europe/Riga),リトアニア(Europe/Vilnius),ルクセンブルク(Europe/Luxembourg),マルタ(Europe/Malta),オランダ(Europe/Amsterdam),ポーランド(Europe/Warsaw),ポルトガル(Europe/Lisbon, Atlantic/Azores, Atlantic/Madeira),ルーマニア(Europe/Bucharest),スロバキア(Europe/Bratislava),スロベニア(Europe/Ljubljana),スペイン(Europe/Madrid, Atlantic/Canary, Africa/Ceuta),スウェーデン(Europe/Stockholm),リヒテンシュタイン(Europe/Vaduz),アイスランド(Atlantic/Reykjavik),ノルウェー(Europe/Oslo)、イギリス(Europe/London)、スイス(Europe/Zurich)

まとめると{"Europe/Vienna","Europe/Brussels","Europe/Sofia","Europe/Zagreb","Asia/Famagusta","Asia/Nicosia","Europe/Prague","Europe/Copenhagen","Europe/Tallinn","Europe/Helsinki","Europe/Paris","Europe/Berlin","Europe/Athens","Europe/Budapest","Europe/Dublin","Europe/Rome","Europe/Riga","Europe/Vilnius","Europe/Luxembourg","Europe/Malta","Europe/Amsterdam","Europe/Warsaw","Europe/Lisbon","Atlantic/Azores","Atlantic/Madeira","Europe/Bucharest","Europe/Bratislava","Europe/Ljubljana","Europe/Madrid","Atlantic/Canary","Africa/Ceuta","Europe/Stockholm","Europe/Vaduz","Atlantic/Reykjavik","Europe/Oslo","Europe/London","Europe/Zurich"};

CCPA
国コードは、アメリカ(US)です。
カリフォルニア州のみに対応するタイムゾーン はありませんが
America/Los_Angeles と US/Pacific
(2021/03/28 : US/Pacificに設定される可能性もあったため追記しました)
で絞れば、カリフォルニア州、ネバダ州、オレゴン州、ワシントン州まで絞れると思います。

以上です。国コードの一覧はすぐに調べることができますが、タイムゾーンIDの一覧をまとめているサイトを見つけることができなかったので、需要があるかもしれないと思いまとめてみました。

役に立ったと思ったら、是非スキやコメントを残して行ってください!
また、私の公開しているアプリ(ゲーム)も良かったらダウンロードして遊んでみて下さいな〜


この記事が気に入ったらサポートをしてみませんか?