見出し画像

[cocoa][swift]プライバシーとセキュリティ(リモート通知のデバイストークンの扱いなど)

GDPRで話題になる頻度が上がったプライバシーとセキュリティ。対応は個々でだと思うが、サーバを利用しない方が難しい今のスマートフォン・アプリケーション開発者にとって、システム提供側によって、何らかの対応が必要になる可能性がある。そこで、今回の発表では、iOSアプリケーション開発に関係がありそうな項目について取り上げてみた。

GDPRとは

対象は個人情報。内容は、思いっきり端折ると、利用目的など、同意を得ないといけないのと、EEAで得られた情報を第三國へ移転するのは禁止だ。

Appleは

Data and Privacy(https://privacy.apple.com/)というページが用意されているが、これはApple製品向けで、サードパーティの開発者向けの情報でない。

iOS 11.3 で、GDPR相当のプライバシー保護機能を搭載したので、各アプリ/サービスは、個々で判断して対応しろということだろう。

Googleは

GoogleはFirebaseサービスを利用した開発者向けに、Firebase のプライバシーとセキュリティ(https://firebase.google.com/support/privacy/?hl=ja)というページを用意している。

このページでは、Googleの対応内容と開発向けについて説明がある。我々アプリケーション開発者が関係する後者について、ざっと抜き出してみる。

Firebaseの個々のサービスで扱い個人情報は、以下のとおり。

# Cloud Functions for Firebase
- IP addresses
# Firebase Authentication
- Passwords
- Email addresses
- Phone numbers
- User agents
- IP addresses
# Firebase Cloud Messaging
- Instance IDs
# Firebase Crash Reporting
- Instance IDs
- Crash traces
# Firebase Crashlytics

# Firebase Dynamic Links
- Device specs (iOS)
# Firebase Hosting
- IP addresses
# Firebase Invites
- Device specs (iOS)
- Locally-stored contacts
# Firebase Performance Monitoring
- Instance IDs
- IP addresses
# Firebase Predictions
- Instance IDs
# Firebase Realtime Database
- IP addresses
- User agents
# Firebase Remote Config
- Instance IDs
# Google Analytics for Firebase
- Mobile ad IDs
- IDFVs/Android IDs
- Instance IDs
- Analytics App Instance IDs
# ML Kit for Firebase
- Uploaded Images

以下について、開発者の対応方法が説明されている。

# Cloud Messaging
自動初期化を禁止する(Android)または自動初期化を禁止する(iOS)
https://firebase.google.com/docs/cloud-messaging/android/client?hl=ja#prevent-auto-init
https://firebase.google.com/docs/cloud-messaging/ios/client?hl=ja#prevent-auto-init
# Crashlytics
オプトイン レポートを有効にする
https://firebase.google.com/docs/crashlytics/customize-crash-reports?hl=ja#enable_opt_in_reporting
# Crash Reporting
オプトイン レポートを有効にする
https://firebase.google.com/docs/crash/disable-sdk?hl=ja
# Performance Monitoring
オプトイン モニタリングを有効にする
https://firebase.google.com/docs/perf-mon/disable-sdk?hl=ja
# アナリティクス
アナリティクスの収集を無効にする
https://firebase.google.com/support/guides/disable-analytics?hl=ja

この中から、iOSと関係が深いと考えたものについて、もう少し深く調べてみる。

Firebase Cloud Message (FCM) は、iOSのリモート通知に似た位置付けのサービスだ。FCMはインスタンスIDを生成し、それを登録トークンとして利用する。このインスタンスIDが、iOSリモート通知のデバイス・トークンに相当する。このインスタンスIDはアプリケーションをインストールした後にアプリケーションを起動すると自動で生成される。

この良かれと考えて用意した機能が仇になったのか、自動初期化を禁止する方法が用意された。AndroidManifest.xmlに以下の設定を行うと、自動初期化は禁止となる。

<?xml version="1.0" encoding="utf-8"?>
<application>
 <meta-data android:name="firebase_messaging_auto_init_enabled"
            android:value="false" />
</application>

例えば、ユーザにクラウド・メッセージの利用を確認してOKとなった場合、以下のコードで自動初期化は有効となる。

FirebaseMessaging.getInstance().setAutoInitEnabled(true);

この有効/無効の設定はシステムによって保持されるので、例えば、ユーザへの確認結果を記録する方法として利用できると考えられる。

ちなみに、現在のインスタンスIDは以下のコードで取得することができる。

FirebaseInstanceId.getInstance().getToken()

これについて、動作確認をして分かったことがあるのだが、正しいのか自信がないため、発表資料では説明しないので、興味がある方は、勉強会で質問してほしい。

上記は、Firebase Cloud Messageの場合だが、iOSのリモート通知のデバイス・トークンも個人情報として、同様な考えて扱うべきだと考えられるので、Firebaseの情報は参考になると思う。

Firebaseはクロスプラットフォームなサービスなので、iOSアプリケーションでも利用している場合があると思うが、今回の件で気をつけないといけないことがある。

Firebaseのアナリティックスは明示的に利用するコードを書かなくても、アナリティックスの収取を行なっている。また、広告IDの収集も行なっている。

Androidで収集を完全に無効にする場合は、AndroidManifest.xmlに以下の設定を行う。

<meta-data android:name="firebase_analytics_collection_deactivated" android:value="true" />

Androidで広告IDの収集を無効にする場合は、AndroidManifest.xmlに以下の設定を行う。

<meta-data android:name="google_analytics_adid_collection_enabled" android:value="false" />

iOSの場合、Info.plistにFIREBASE_ANALYTICS_COLLECTION_DEACTIVATEDをYESで定義すると収集が完全に無効になる。そして収集を再び有効にするには、この定義を削除すればいいみたいだ。

【関連情報】
Cocoa.swift 2018-10
Cocoa.swift
Cocoa勉強会 関東
Cocoa練習帳
Qiita

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