PAYATHON 2026

Android 支付宝登录时 APP支付客户端SDK何时收集MAC地址

支付阿杰

明确结论

从调用堆栈可以看出,MAC 地址读取发生在用户点击支付宝登录并执行 OpenAuthTask.execute() 时。执行该方法后,支付宝 SDK 会初始化系统信息和统计模块,随后调用 WifiInfo.getMacAddress() 获取 WLAN 接口的 MAC 地址。

触发条件不是“支付成功”或“登录成功”,而是应用进入支付宝授权流程并调用了 OpenAuthTask.execute()。从类名和调用链推测,这次读取可能用于设备环境识别、SDK 运行统计或风控参数组装。不过,仅凭堆栈无法确定数据是否上传、如何保存以及保存多久,具体情况需要支付宝结合 SDK 版本说明。

日志中的 02:00:00:00:00:00 通常是 Android 限制读取真实 MAC 地址后返回的占位值,不能据此认定 SDK 获取了设备的真实硬件 MAC。

具体触发链路

堆栈中的业务代码与支付宝 SDK 调用关系如下:

用户点击支付宝登录
  → DealUtils.openAuthSchene()
  → OpenAuthTask.execute()
  → com.alipay.sdk.sys.a.<init>()
  → com.alipay.sdk.app.statistic.b.<init>()
  → com.alipay.sdk.util.a.<init>()
  → WifiInfo.getMacAddress()

读取行为发生在开放授权任务启动阶段。com.alipay.sdk.sys.a、com.alipay.sdk.app.statistic.b 和 com.alipay.sdk.util.a 都是 SDK 的内部实现。应用虽然没有直接调用 WifiInfo.getMacAddress(),但执行 OpenAuthTask.execute() 后间接触发了该方法。

常见触发条件包括:

  • 用户点击支付宝登录、授权或绑定入口;
  • 应用创建并执行 OpenAuthTask;
  • SDK 初始化设备环境信息或统计信息;
  • 当前接入的 SDK 版本仍包含 MAC 地址读取逻辑。

是否每次执行授权都会读取,取决于 SDK 版本、内部缓存状态和运行环境。一次检测记录不足以判断具体读取频率。

为什么读取到的是 02:00:00:00:00:00

Android 6.0 以后逐步限制应用读取设备的真实 MAC 地址。通过部分旧接口调用:

wifiInfo.getMacAddress();

通常只能得到:

02:00:00:00:00:00

这条记录可以证明 SDK 调用了 MAC 地址相关 API,但无法证明它成功取得了真实 MAC 地址。

不同隐私检测平台对“调用敏感 API”和“成功采集有效信息”的判定标准并不相同。有些平台只要监测到 getMacAddress() 被调用,就会记录为获取行为,即使返回的只是系统占位值。

如何确认调用目的和处理方式

堆栈中出现了 app.statistic 模块,因此可以推测该值可能被用于 SDK 统计参数、设备环境描述或风控信息。这只是根据调用链作出的技术判断,不能代替支付宝的官方说明。

需要向支付宝技术支持确认:

  1. 当前使用的 APP 支付客户端 SDK 准确版本号;
  2. OpenAuthTask.execute() 是否会固定调用 WifiInfo.getMacAddress();
  3. 该字段用于统计、风控还是设备标识;
  4. 获取的原始值是否会上传;
  5. 上传前是否进行哈希、加密、脱敏或过滤;
  6. 数据的保存期限、共享范围及删除机制;
  7. 哪个 SDK 版本已经移除或调整该调用;
  8. 是否存在关闭设备信息采集的配置项。

进行隐私合规审计时,不能只根据类名判断用途。应保留支付宝提供的版本说明、隐私政策或书面答复,作为审计依据。

建议的解决步骤

1. 确认实际集成版本

先检查 Gradle 依赖和最终 APK/AAB 中实际打包的支付宝 SDK 版本,不要只看依赖声明。旧版本可能由本地 AAR、传递依赖或历史组件引入。

dependencies {
    implementation("com.alipay.sdk:alipaysdk-android:实际版本号")
}

不要盲目替换版本号,应使用支付宝当前提供且兼容开放授权功能的版本。

2. 对比新版 SDK 的行为

升级前后,在相同设备上按照同一操作路径重新检测,重点观察以下调用是否仍然出现:

OpenAuthTask.execute()
→ WifiInfo.getMacAddress()

升级可能会改变 SDK 的内部实现,但在完成测试或取得官方确认之前,不能直接认定新版已经停止读取 MAC 地址。

3. 在用户同意隐私政策后再启动授权

不要在应用启动、登录页面初始化或用户尚未明确选择时预先执行支付宝授权。应由用户主动点击,并在完成必要的隐私告知后调用 SDK。

public void startAlipayAuth(Activity activity) {
    if (!privacyConsentManager.hasUserConsented()) {
        showPrivacyConsentDialog(activity, () -> startAlipayAuth(activity));
        return;
    }

    OpenAuthTask task = new OpenAuthTask(activity);
    task.execute(
        "业务自定义场景值",
        OpenAuthTask.BizType.AccountAuth,
        buildAuthParams(),
        result -> handleAuthResult(result),
        true
    );
}

这段代码只用于说明调用时机。构造参数、回调类型和 execute() 签名应以项目当前使用的支付宝 SDK API 为准,不能直接套用到其他版本。

4. 避免提前创建 SDK 对象

如果对象的构造过程本身会初始化系统信息或统计模块,就不要在页面加载时提前创建对象。应等到用户真正发起授权后再创建。

loginButton.setOnClickListener(view -> {
    if (!privacyConsentManager.hasUserConsented()) {
        showPrivacyConsentDialog();
        return;
    }

    startAlipayAuth(this);
});

延迟业务调用不能消除 SDK 内部的读取行为,但可以避免在用户尚未发起支付宝登录时触发读取。

5. 无法关闭时联系支付宝处理

调用发生在 com.alipay.sdk.* 内部,业务代码通常无法安全拦截或修改。不要通过反射、修改 AAR 字节码或 Hook 系统 API 等方式强行绕过,否则可能影响签名校验、风控逻辑或后续版本兼容性。

如果最新版仍然读取,应要求支付宝至少提供以下一种处理方案:

  • 移除 MAC 地址读取;
  • 增加可关闭的配置项;
  • 将相关模块调整为用户授权后再初始化;
  • 明确说明占位值的过滤和上传规则;
  • 提供符合当前隐私要求的替代版本。

权限处理注意事项

WifiInfo.getMacAddress() 与 ACCESS_WIFI_STATE 有关联,但简单删除权限不一定能解决检测问题:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

检测平台可能记录 API 调用本身,而不只是判断是否取得有效值。同时,该权限也可能被其他网络功能使用。删除前应检查合并后的 AndroidManifest.xml,并确认应用中哪些网络状态功能依赖该权限。

如果业务和其他 SDK 都不需要该权限,可以在清单合并阶段移除:

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <uses-permission
        android:name="android.permission.ACCESS_WIFI_STATE"
        tools:node="remove" />

</manifest>

移除后需要进行完整的回归测试。即使权限已经移除,也要再次通过隐私检测确认 getMacAddress() 是否仍被调用。

隐私说明应如何表述

在取得支付宝的准确说明之前,不宜直接写成“支付宝会收集并保存真实 MAC 地址”。更严谨的表述是:

用户主动发起支付宝登录或授权时,支付宝客户端 SDK 可能读取设备网络标识相关信息,用于授权服务运行、设备环境识别、风险控制或统计分析。受 Android 系统限制,相关接口可能仅返回系统占位值。实际处理范围以所接入 SDK 版本及支付宝提供的说明为准。

隐私政策中列明的信息类型、用途、处理方式和第三方名称,应与实际检测结果及支付宝提供的材料一致。

最终判断

本次记录的直接触发点是 OpenAuthTask.execute(),调用时机是用户点击支付宝登录并进入开放授权流程之后。MAC 地址 API 由支付宝 SDK 的系统信息或统计模块间接调用,业务代码没有直接读取。

日志值 02:00:00:00:00:00 说明系统很可能没有向 SDK 提供真实 MAC 地址,但隐私检测工具仍可能将 API 调用判定为采集行为。仅凭该堆栈无法判断数据是否上传,也无法确定其具体用于风控还是统计。后续应结合准确的 SDK 版本向支付宝确认,并通过升级 SDK、延迟调用、核查权限和重新检测完成处理。

备注:内容仅供参考。