- 确定隐私设置
- 更新您的应用以使用隐私设置
- 跟踪隐私设置的变化
确定隐私设置
如需收集和存储隐私设置,您需要具备:提示用户进行隐私设置的界面以及存储这些设置的方式。
创建隐私设置界面
隐私设置界面的格式由您自行决定。在构建界面时,需要考虑以下几点:
了解您所收集的数据
花一些时间为您的应用存储或处理的用户数据编撰一个目录。请务必将您的应用直接收集的数据和您的应用所使用的服务收集的数据均纳入其中。对于 Firebase 服务,您不妨参阅由 Firebase 处理的最终用户数据的示例。
合理设计界面以提高用户体验
尝试以简明的人性化词汇描述您所收集的数据类型,包括收集的数据对您的应用有何帮助或其使用方式。
如果您的应用需要某些数据才能正常运行,您可以通过以下方式来避免出错:除非用户选择了您的应用正常运行所需的选项,否则停用“提交”按钮。思考一下,如果用户启用了某些类型的数据收集,而未启用其他类型,您的应用的工作流程应该是怎样的。
在用户同意接受隐私权政策之前,“提交”按钮处于停用状态
存储隐私设置
您存储用户的隐私设置的位置和方式也由您自行决定。您可以使用任何可将用户与他们在您的隐私设置界面中做出的选择相关联的可靠标识符。
一种常见的方法是使用标识符作为键,以将偏好设置存储在您的应用所用的数据存储区中。例如,您可以在 Realtime Database 实例中将 Firebase Auth UID 用作键,或使用 Firebase 实例 ID 来整理 Firestore 文档的集合。
示例:使用 Auth UID 和 Realtime Database 来存储用户偏好设置
假设有一个使用 Firebase Auth UID 和 Firebase Realtime Database 存储用户的偏好设置的社交媒体应用。
为了确保用户数据的安全和私密性,应用会将用户的偏好设置单独保存至数据库中的某个部分,并设立只允许该用户读取或写入的限制性安全规则。应用还会验证预期的值是否仅为布尔值,以确保拒绝不符合预期的值:
"privacy": {
"$uid": {
".write": "auth.uid === $uid",
".read": "auth.uid === $uid",
"data_processing": {
".validate": "newData.isBoolean()"
},
"content": {
".validate": "newData.isBoolean()"
},
"social": {
".validate": "newData.isBoolean()"
},
"$other": {
".validate": "false"
}
}
}
更新您的应用以使用隐私设置
当您在自己的应用中为用户提供隐私设置之后,就可以为启用了特定设置的用户开启特定功能了。请让您的应用先检查这些设置,然后再加载会收集数据或使用已收集的数据的功能。您不妨考虑一下如果没有某种功能,最佳体验应该是怎样的。例如,如果应用是一个微博平台,而用户已禁止应用存储其博文,那么最佳用户体验可能是移除用于创建博文的选项。
跟踪隐私设置的变化
用户可能会在授予应用收集数据的权限之后改变主意。 请添加一个指向个人资料或设置页面的按钮或链接,以便用户可以更新其隐私设置。
用户点击“隐私设置”链接后,设置对话框即会显示,供用户更新其设置
您还可以决定当用户决定停用数据收集功能时应用该如何应对。例如,您可以为用户提供用于删除已收集的数据的选项,或让应用自动执行删除操作。建议使用 Cloud Functions for Firebase 来删除数据,因为此操作有可能需要几分钟时间才能完成,具体时间取决于需要删除的数据量。如需了解相关详情,请参阅移除和导出用户数据指南。
单独存储一份有关用户隐私设置的审核日志
一些应用开发者可能希望记录隐私设置的变更情况。您可以使用 Realtime Database 或 Firestore 实现这一目的,方法是在数据库中创建一个新的部分来用作隐私变更的审核日志(按用户的唯一标识符来组织数据结构),并在其中包括新隐私设置和时间戳信息。 当用户更新其隐私设置时,应用执行两次写入操作,一次是写入用户的隐私设置,另一次写入审核日志。请务必将此部分单独划分出来,以便您创建更为严格的安全规则。对于 Firestore 用户,使用粒度规则强制规定审核日志中的文档不可修改:
match /audit_log/{uid} {
allow create: if uid = request.auth.uid;
allow update: if false;
allow delete: if false;
}
了解您的数据、收集偏好设置、存储偏好设置和跟踪变化 - 只需完成这四步,即可轻松确保您的应用尊重用户的隐私。