内容提要
开发者通过AI分析发现,百度网盘iOS版在用户禁用运动与健身权限后仍能触发摇一摇广告,原因是其广告框架包含NoShake变体,转而使用Core Location的CLHeading磁力计数据判断手机姿态变化。报告还指出存在零点击自动跳转问题:当特定参数满足时,等待约1秒后即使用户未点击也会自动执行广告点击。
延伸解读
权限限制为何失效:磁力计成为替代路径
iOS 27.2 新增的“运动与健身”权限本意是让用户控制应用能否获取陀螺仪和加速度计数据,但百度网盘广告框架中的 NoShake 变体绕开了 CoreMotion,转而调用 Core Location 的 CLHeading 获取磁力计数据。磁力计同样能反映手机姿态变化,因此禁用运动传感器权限并不能阻止摇一摇广告触发。这说明单一权限开关未必能覆盖所有传感器路径,用户需留意应用是否还有其他可用的姿态数据来源。
零点击跳转:比摇一摇更值得警惕的机制
分析报告还提到一种零点击分支:当特定参数组合满足时,SDK 等待约 1 秒后,即使用户没有点击也会自动执行广告点击流程。这比摇一摇更隐蔽,因为它不依赖用户动作。不过报告并未取得真实广告响应,因此无法确认线上广告实际使用了哪组参数。读者应将其视为一种值得关注的潜在机制,而非已证实的普遍行为。
版本时间线:无法断定 NoShake 是否为应对权限而新增
iOS 27.2 测试版于 9 月 23 日发布,而本次分析的百度网盘 iOS 版 13.36.0 于 10 月 22 日发布。时间上晚于测试版,但文章明确指出,仅凭这一点无法判断 NoShake 变体是不是百度网盘在测试版发布后专门为应对传感器权限限制而新增的。读者在理解这一发现时,应避免把时间先后直接等同于因果动机。
Q&A
为什么百度网盘在禁用运动与健身权限后还能触发摇一摇广告?
因为百度网盘广告框架中包含一个名为 NoShake 的变体,它不依赖陀螺仪和加速度计,而是通过苹果 Core Location 框架中的 CLHeading 获取磁力计数据,检测手机姿态变化,从而判断用户是否摇晃手机并触发广告跳转。
百度网盘使用的 NoShake 变体是如何检测手机摇晃的?
NoShake 变体没有使用常规的 CoreMotion 动作监听,而是调用 Core Location 框架中的 CLHeading 接口,获取设备相对于磁北方向的朝向和三轴磁场数据。当手机姿态变化时,磁力计数据也会变化,广告组件据此判断用户是否移动或转动了手机。
iOS 27.2 新增的运动与健身权限有什么作用?
该权限允许用户控制应用程序能否获取陀螺仪和加速度计参数。部分应用的开屏摇一摇广告正是通过检测这些传感器数据来实现跳转,因此禁用该权限理论上可以限制此类广告。
百度网盘存在零点击自动跳转广告的情况吗?
根据 AI 分析报告,存在一种零点击分支:当特定参数组合满足条件时,触发后会等待约 1 秒,如果用户没有点击,SDK 便会自动执行广告点击流程。其他参数组合也可能直接进入点击流程。但报告未取得真实广告响应,无法确定线上广告实际使用了哪组参数。
禁用陀螺仪和加速度计权限对所有应用都有效吗?
不一定。至少在百度网盘 iOS 版的案例中,禁用这些权限是无效的,因为它已经准备了磁力计作为备用检测方法。但可能并非所有应用程序都像百度网盘这样提前开发了替代框架。
AI 分析报告是如何发现百度网盘使用磁力计的?
开发者 @王晨杰 使用 AI 分析百度网盘 iOS 版 13.36.0 的开屏广告跳转逻辑,发现其广告框架中存在 NoShake 变体,该变体通过 Core Location 的 CLHeading 获取磁力计数据,从而识别手机姿态变化。