vivo隐私合规:Flutter存在频繁收集剪切板信息的问题
1 |
|
1. 问题描述
在vivo应用市场的自动化隐私检测中,APP被检测出“SDK存在超频次收集”的问题。具体表现为:
APP在运行时,SDK存在以下违规行为:
1、未向用户告知且未经用户同意,flutter存在频繁采集“剪切板信息”的行为,非服务所必须且无合理应用场景,超出实现产品或服务的业务功能所必须的最低频率。
2. 问题原因
- 当
TextField尝试显示工具栏(长按菜单)或处理选择状态时,它使用的默认MaterialTextSelectionControls会调用canPaste方法。 - 默认的
canPaste方法内部会调用Clipboard.getData(Clipboard.kTextPlain)来检查系统剪切板中是否有文本内容。 - 这样做是为了决定是否在菜单中显示“粘贴”按钮(如果剪切板为空,按钮可能会隐藏或禁用)。
- 关键点:这种自动检查行为在某些厂商(如vivo)的严格隐私检测中,会被判定为“在用户未主动操作粘贴的情况下,APP自动读取了剪切板”,从而属于违规的频繁/无感收集行为。
3. 解决方案
通过自定义 TextSelectionControls 并重写 canPaste 方法来规避此问题。
我们将 canPaste 修改为直接返回 true(总是认为可以粘贴),从而跳过 Clipboard.getData 的调用。
效果:
- 修改前:点击输入框 -> 读取剪切板 -> 显示菜单(含粘贴)。(触发隐私检测报警)
- 修改后:点击输入框 -> 直接显示菜单(含粘贴) -> 用户点击“粘贴” -> 读取剪切板。(合规,属用户主动触发)
3.1 实施步骤
第一步:新增工具类 PrivacyTextSelectionControls
在项目中创建一个新的工具类文件,例如 lib/utils/privacy_text_selection_controls.dart:
1 | import 'package:flutter/material.dart'; |
第二步:在 TextField 中应用
找到项目中被检测出问题的输入框页面(如登录页),在 TextField 组件中设置 selectionControls 属性:
1 | // 1. 引入头文件 |