トップ «前の日記(2018-10-01) 最新 次の日記(2018-10-15)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|

2018-10-10 [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の個々のサービスで扱い個人情報は、以下のとおり。

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で定義すると収集が完全に無効になる。そして収集を再び有効にするには、この定義を削除すればいいみたいだ


トップ «前の日記(2018-10-01) 最新 次の日記(2018-10-15)» 編集