一、广告与营销合规:个性化广告开关、兴趣标签管理、ATT适配

广告变现是很多App的生命线,但隐私合规这把剑悬在头顶。我个人习惯把广告合规分成三块:用户控制权、数据透明度、平台适配。说白了,就是让用户知道你在用他的数据打广告,并且给他关掉的权利。

1.1 个性化广告开关:不只是加个按钮

很多开发者以为,加个「关闭个性化广告」的开关就完事了。嗯,这里要注意——开关只是表象,真正的合规在于开关背后的数据流切断

我曾经见过一个项目,UI上做了开关,但底层SDK还在继续上报设备信息。结果被监管点名,理由是「开关无效」。所以,开关必须做到:
  • 开关关闭后,停止向广告SDK传递设备标识符(OAID、GAID、IMEI等)
  • 停止兴趣标签的收集与更新
  • 广告请求中标记为非个性化(non-personalized)

代码层面,我建议这样处理开关逻辑:

// 伪代码示例:个性化广告开关
public class AdPrivacyManager {
    private static boolean isPersonalizedAdEnabled = true;

    public static void setPersonalizedAdEnabled(boolean enabled) {
        isPersonalizedAdEnabled = enabled;
        // 关键:同步通知所有广告SDK
        AdSdkManager.updateConsent(enabled);
        // 同时停止兴趣标签收集
        InterestTagManager.setCollectionEnabled(enabled);
    }

    public static boolean isPersonalizedAdEnabled() {
        return isPersonalizedAdEnabled;
    }
}

你想想看,如果只是存一个SharedPreferences值,SDK那边根本没收到通知,那这个开关就是摆设。我在项目中遇到过,某大厂SDK要求调用一个专门的setUserConsent()方法,否则默认视为同意。所以适配时一定要看各家SDK的文档。

1.2 兴趣标签管理:别偷偷给用户贴标签

兴趣标签,说白了就是给用户分类——「游戏爱好者」「母婴用户」「汽车潜在买家」。这些标签从哪里来?从用户的浏览行为、搜索记录、甚至地理位置推断出来。

GDPR和《个人信息保护法》都要求:用户有权查看、导出、删除这些标签。我建议在App内提供一个「兴趣标签管理」页面,展示当前给用户打了哪些标签,并提供删除功能。

合规要点:
  • 标签来源必须透明:在隐私政策中说明「我们通过XX数据推断您的兴趣」
  • 标签存储期限:建议不超过12个月,定期清理
  • 标签删除:用户删除标签后,广告SDK应同步更新

举个例子,用户打开兴趣管理页面,看到自己被标记为「金融理财」「汽车」,但用户实际上只是帮朋友查过一次车险。这时候用户有权一键删除这两个标签。我曾经在金融类App里做过这个功能,用户反馈很好——虽然删标签会影响广告精准度,但合规风险降低了。

1.3 ATT框架适配:iOS的IDFA授权

ATT(App Tracking Transparency)是iOS 14.5引入的框架。虽然我们是Android课程,但很多App是双端开发,而且Android端也在参考类似思路。ATT的核心逻辑是:应用必须弹窗询问用户,是否允许追踪

Android端虽然没有强制ATT,但Google Play的广告政策越来越严。我个人习惯在Android端也做一个类似的「广告追踪授权」弹窗,虽然技术上不是必须,但能体现对用户隐私的尊重。

小技巧:ATT弹窗的时机很重要。不要在用户刚打开App就弹,建议在用户首次看到个性化广告时弹。我习惯在用户点击「开启个性化广告」按钮时触发授权流程。

ATT适配的代码逻辑大致如下:

// Android端模拟ATT授权(非强制,但推荐)
public class TrackingConsentManager {
    public static void requestTrackingAuthorization(Activity activity) {
        AlertDialog dialog = new AlertDialog.Builder(activity)
            .setTitle("允许广告追踪?")
            .setMessage("开启后,我们将为您展示更相关的广告。您随时可以在设置中关闭。")
            .setPositiveButton("允许", (d, w) -> {
                // 开启个性化广告
                AdPrivacyManager.setPersonalizedAdEnabled(true);
            })
            .setNegativeButton("拒绝", (d, w) -> {
                // 关闭个性化广告
                AdPrivacyManager.setPersonalizedAdEnabled(false);
            })
            .create();
        dialog.show();
    }
}

这里要注意:弹窗文案必须清晰,不能诱导用户点击「允许」。我曾经见过一个App,弹窗上「允许」按钮是蓝色高亮,「拒绝」是灰色小字——这种设计在合规审查中会被判定为「暗黑模式」。

1.4 知识体系总览

下面这张图概括了广告合规的核心流程。我习惯用这种图来跟产品经理对齐需求,一目了然。

广告与营销合规知识体系 个性化广告开关 兴趣标签管理 ATT框架适配 开关状态 → 数据流切断 SDK同步更新 标签查看/导出/删除 存储期限 ≤ 12个月 弹窗时机与文案 Android端模拟授权 核心原则:用户控制权 + 数据透明度 + 平台适配 ⚠ 开关无效 = 虚假合规,面临监管处罚

1.5 避坑指南与实战建议

做广告合规,有几个坑我踩过,分享给你:

  • 坑一:开关只存本地,不通知SDK。 解决方案:在开关变化时,主动调用SDK的setConsent()updatePrivacy()方法。
  • 坑二:兴趣标签没有过期机制。 我曾经发现一个App,用户两年前的标签还在用。建议加一个定时任务,每月清理超过12个月的标签。
  • 坑三:ATT弹窗文案诱导。 比如「允许后获得更好体验」这种模糊表述。合规的文案应该明确说明「用于个性化广告推荐」。
我的个人习惯:每次上线广告相关功能前,我会做三件事:
  1. 检查开关是否真的能切断数据流(用抓包工具验证)
  2. 检查兴趣标签管理页面是否展示完整
  3. 检查弹窗文案是否清晰无诱导

广告合规不是一次性工作。监管政策在变,SDK版本在更新,用户期望在提高。我建议每季度做一次广告合规自查,把开关、标签、授权流程都过一遍。这样即使被抽查,也能从容应对。