任务架构

Android 条码载荷复核:区分解码、信任与用户授权

只讨论条码解码表示、有限结构解析和后续动作授权;不把二维码外观等同 GS1,也不声称 Cove 已接入扫描器。

审核状态: 内容已校验;中文稿供用户审核 · 2026-10-08 · Fact IDs: BARCODE-PAYLOAD-BOUNDARY-2026-10, ANDROID-DEEP-LINK-ENTRY-2026-10, ANDROID-PRIVACY-01

直接回答

扫描条码会得到待复核的数据;识别成功不是身份认证、访问许可,也不是用户执行编码操作的决定。扫描 SDK 可能返回几种相关但不同的表示:条码符号格式、原始字节、可用时解码出的原始字符串、面向显示的字符串、内容类型分类,以及可选解析字段。数据模型应分别保存这些值。原始表示适合忠实检查,显示表示适合用户预览,解析对象是便利的解释结果。它们都不能证明代码由谁生成、内容是否最新、URL 是否可信,也不能说明用户想让应用打开、保存、拨号、连接或导入。 ML Kit Android Barcode Scanning 官方 API 将 rawValue 描述为按条码编码的值,并说明只有 UTF-8 内容才能通过该字段取得;无法确定 rawValue 或内容不是 UTF-8 时,应使用 rawBytes。displayValue 是面向用户的易读表示,可能省略编码信息。Barcode.getValueType 返回识别出的内容类别;结构不能解析时可能归类为文本,SDK 版本不认识的结构可能返回 unknown。内置解析器只识别部分常见格式。因此要保留 nullable 字段和确切 SDK 版本。不能因为有格式化文本就丢弃原始字节,不能把 null 不加记录地转换为空字符串,也不能假设每个识别到的二维码都有解析对象。 QR Code 是一种符号制式名称,不是通用载荷 schema。二维码可以编码普通文本、Web URI、Wi-Fi 设置文本、联系人或其他数据。GS1 Digital Link 是独立 URI 语法,用于表达 GS1 标识符和相关数据;它不等于每个二维码,外观类似该语法的 URI 也仍需按相关标准和应用规则校验。反过来,GS1 数据也可以由不止一种数据载体承载。应同时记录扫描格式与领域解释,不能把所有 QR 都称为商品标识,也不能把每个 URL 都称为 GS1 resolver 链接。 把解码和动作拆成不同阶段。先记录稳定的扫描结果:帧或夹具 ID、识别格式、可空原始字节/字符串、显示值、内容类型、解析字段是否存在、扫描器依赖或模型交付模式,以及有用时的本地时间戳。随后显示明确标注为不可信数据的预览。URL 应先通过 URI 解析、允许的 scheme 与 host 策略,再由用户确认后外部打开。Wi-Fi 载荷应先在复核页面展示,不能自动连接。联系人或日历字段应先预览,用户选择后再保存。看似付款、应用链接或命令的字符串,不能因为扫描器分类而自动获得权限。 不要把扫描载荷摘要用作发行者身份的证明。哈希能检测字节序列相对另一个独立可信参考值是否变化,但无法说明参考值由谁发布或内容是否安全。签名或认证注册表需要真实信任根、密钥生命周期、规范化规则和撤销策略;条码扫描器不提供这些机制。产品没有经过验证的发行方机制时,应把数据称为用户提供或摄像头观察到的内容,而不是官方内容。避免把原始码上传到分析或普通日志:Wi-Fi 二维码可能包含凭据,联系人字段含个人资料,URL 可能带跟踪标识或账号 token。 应有意识地选择扫描器的交付模式。ML Kit Android 指南记录了 bundled 与 unbundled 方案,后者可能需要下载模型,两者在应用体积和可用性方面各有依赖。bundled 依赖可以随应用包提供扫描器代码;unbundled 路径具有模型交付与就绪依赖。但这两种描述本身都不能证明完整工作流、相机链路或某台设备上的全部格式能断网工作。固定依赖版本并记录交付模式。描述离线扫描前,要验证确切格式配置与模型就绪状态。不能把一个 SDK 版本、Play services 状态、手机或样例图片推广成 Cove 支持或普遍准确率结论。 用合成字节夹具测试 payload parser,并用受控图像单独测试识别。覆盖受支持范围内的 UTF-8 与非 UTF-8 原始数据、rawValue 为空、displayValue 省略字符、多行内容、普通文本和 URL 二维码、GS1 Digital Link 语法、损坏 URI、未识别的结构值以及同帧多码。断言扫描输出在记录用户动作之前始终不触发操作。对每种预览验证秘密字段遮蔽和普通诊断日志不含载荷。图像夹具能验证 parser 与产品策略,但不能证明相机检测质量、设备支持、发行方真实性,或其他消费应用会以相同方式处理数据。本文描述 Android 工程方法,不声称 Cove 当前集成了条码扫描器。

同一画面里的两个二维码包含不同载荷

Android 相机的一帧中有两个独立二维码:一个编码网址,另一个编码 Wi-Fi 配置。扫描器返回两条检测结果,但应用尚未验证发行方,也未取得用户对任一动作的确认。

决策

保留两条独立扫描记录和原始字节,分别预览;窄策略校验网址并展示 Wi-Fi 详情供复核,不自动导航或连接。

预期结果

每个二维码都能追溯到自己的解码表示,并且只有用户分别选择后才执行相应操作。

需要收集的证据

只有将以下证据与同一模型文件和测试运行关联起来,结论才可复核:

  • BARCODE-PAYLOAD-BOUNDARY-2026-10:ML Kit 条码字段是解码与解析结果,不构成发行方认证或用户授权。
  • ANDROID-DEEP-LINK-ENTRY-2026-10:URI 或入站内容不能替代调用者身份、资源访问权和用户确认。
  • ML Kit Barcode API 区分 rawBytes、rawValue、displayValue、format 与 valueType,Android API 23 是该扫描 API 的最低版本;GS1 Digital Link 是定义 GS1 标识 URI 语法的独立标准。

任务质量需要有版本记录的语料和验收规则;流畅的单条样例不等于准确度结果。

实施流程

  1. 分别记录扫描器的各类表示. 分别保存 format、rawBytes、可空 rawValue、displayValue、valueType、解析字段是否存在、SDK 版本和交付模式。即使有易读格式值,也不要丢弃原始数据。
  2. 识别语法但不赋予信任. 区分普通 QR 文本或 URL 与经过验证的 GS1 Digital Link 或其他领域 schema。未知、损坏和未解析的载荷仍是待复核数据,不是继续执行的许可。
  3. 以安全方式预览敏感字段. 提供足够内容让用户识别拟议操作,同时默认遮蔽密码、token、联系人信息等秘密。原始载荷不进入分析系统或普通日志。
  4. 让每项动作遵守独立策略. 解析 URI、仅允许预期 scheme 与 host,并在导航前确认。Wi-Fi、联系人、日历、付款相关和导入载荷都需要独立复核与动作合同。
  5. 分别测试 parser 与识别器. 用合成原始字节覆盖可空字段和不完整字段,另用受控图像测试检测。记录 SDK、依赖交付模式、设备/API 与格式配置,不把一次成功推广为普遍离线支持或准确率。

让每个阶段的状态都可观察。失败信息应指出阶段、模型、运行时和恢复动作,同时避免记录用户私密内容。

验收标准

  • 原始字节、解码 rawValue、displayValue、format、valueType 和可选解析对象保持区分,并保留 null 或不支持状态。
  • 网址、Wi-Fi 设置、联系人、日历或付款相关载荷不会仅因扫描器识别或分类而自动执行。
  • URI 校验、秘密遮蔽、用户确认、持久化及诊断日志均有明确且分别测试的策略。
  • 不混淆 QR 符号制式与 GS1 Digital Link 语义;记录 SDK 版本和 bundled/unbundled 模式,不声称普遍离线就绪。
  • 文章不声称 Cove 已集成条码、验证发行方、支持特定设备或取得识别准确率数据。

决策对照表

维度选择或证据解读方式
rawBytes 或 rawValue作为最接近编码内容的表示保留,并记录 null 或编码限制。有利于忠实解析,但不能认证发行方或授权动作。
displayValue用于用户易读预览,并注明它是展示结果。可能省略编码内容,不应替代原始数据做核验。
SDK 解析字段作为类型化便利结果使用,再按应用策略校验每个字段。内置结构有限;解析成功不证明可信或得到用户同意。
GS1 Digital Link URI按领域特定解释,校验语法及 GS1 应用规则。这是用于 GS1 标识符的标准 URI 语法,不是任意二维码载荷的同义词。

需要避免的失败模式

  • 用可能省略信息的 displayValue 覆盖原始字节或 rawValue。
  • 把 QR 码一概解释为 GS1、可信 URL、付款指令或 Wi-Fi 连接请求。
  • 把结构解析成功、摘要匹配或 bundled SDK 当作发行方认证、用户同意或端到端离线证明。

还要避免静默回退、版本未固定、缺少取消处理,以及把不同配置的结果混在一起下结论。失败运行也应与成功记录一并保存。

最小复现记录

层级记录内容
设备厂商、型号、芯片、内存档位、操作系统版本
软件应用版本和 Git 提交号
模型系列、变体、版本、格式、文件长度、摘要、量化方式
运行时名称、版本、请求后端及实际后端证据
工作负载样例版本、输入摘要、提示词摘要、输出策略
结果完成、失败、取消、回退及保护隐私的诊断信息

发布检查表

  • ☐ 主要搜索问题已回答,且没有未经支持的数字。
  • ☐ 所有模型文件和运行时版本均已固定。
  • ☐ 代表性任务和失败处理策略均有说明。
  • ☐ 生命周期、取消、清理和回退均已测试。
  • ☐ 用户内容与网络边界均有说明。
  • ☐ 结论只适用于被记录的配置。
  • ☐ 新增测试结果时链接到原始方法或证据。

来源与相关证据

中文部署与排错专题见。奇连 AI 端侧专题。

常见问题

displayValue 会显示条码编码的全部信息吗?

不一定。Android ML Kit API 说明 displayValue 是面向用户的格式化内容,并可能省略编码信息。保留可用的 rawValue;无法用 UTF-8 表示时保留 rawBytes,并明确记录字段为空的状态。

网址二维码能证明网站或发行方可信吗?

不能。扫描器只报告解码内容和可能解析出的 URL 字段。应执行 scheme 与 host 校验、展示目标,并要求适当用户操作;发行者身份需要独立信任机制。

每个二维码都是 GS1 Digital Link 吗?

不是。QR 是可承载多类载荷的条码符号制式。GS1 Digital Link 则为 GS1 标识符和数据定义独立 URI 语法。应依据适用 GS1 规则验证,而不是凭外观猜测。

使用 bundled 扫描器能证明相机扫描可离线工作吗?

不能。bundled 与 unbundled 会改变 SDK 交付依赖,但本身不能证明相机集成、模型就绪、格式配置支持或某台设备的端到端断网行为。应测试并报告确切版本和路径。