在使用Flutter开发者,输入框是必不可少的功能,最近产品出了需要,要求输入框记住用户登录过的手机号,并在输入框输入时提示出来,这是个很基础的功能,但是在通过测试验收发布到应用市场时,被Vivo拒了,具体报错信息如下:
APP在运行时,SDK存在以下违规行为: 1、未见向用户告知且未经用户同意,f2prateek dart存在频繁采集“剪切板信息”的行为,非服务所必须且无合理应用场景,超出实现产品或服务的业务功能 所必须的最低频率
查看代码后发现就是一个很普通的tetFiled,没有其他特殊的,先做排除
- 是否跟焦点有关
- 是否需要在组件上做特殊设置
把组件主动获取焦点的 autoFocus 设置为false,提交到VIVO的做隐私合规检测,发现依然没有通过,还是这个问题。没办法去看源码(Flutter3.7.10),发现有一个函数:copySelection
/// Copy current selection to [Clipboard].@overridevoid copySelection(SelectionChangedCause cause) {final TextSelection selection = textEditingValue.selection;assert(selection != null);if (selection.isCollapsed || widget.obscureText) {return;}final String text = textEditingValue.text;Clipboard.setData(ClipboardData(text: selection.textInside(text)));if (cause == SelectionChangedCause.toolbar) {bringIntoView(textEditingValue.selection.extent);hideToolbar(false);switch (defaultTargetPlatform) {case TargetPlatform.iOS:case TargetPlatform.macOS:case TargetPlatform.linux:case TargetPlatform.windows:break;case TargetPlatform.android:case TargetPlatform.fuchsia:// Collapse the selection and hide the toolbar and handles.userUpdateTextEditingValue(TextEditingValue(text: textEditingValue.text,selection: TextSelection.collapsed(offset: textEditingValue.selection.end),),SelectionChangedCause.toolbar,);break;}}clipboardStatus?.update();}
源码的注释是将当前内容复制到剪贴板,clipboardStatus是检测剪贴板是否可以粘贴。因为检测结果是“频繁采集剪贴板” 将日志文件下载看了下,确实频率非常高,那是不是跟这个状态被更新有关呢? 抱着试试看的态度,将源码的最后一行注释掉,重新编译打包
//clipboardStatus?.update();
提交到VIVO隐私自检,果然不出所料:检测通过!
将此问题做个记录,可以帮到后面的同学们
注意:每个项目使用的版本可能不一致,建议优先找这个函数copySelection