广告SDK合规指南
根据《个人信息保护法》、《数据安全法》、《网络安全法》等法律法规和监管部门规章要求,App 开发运营者(以下简称为"开发者")在提供网络产品服务时应尊重和保护最终用户的个人信息,不得违法违规收集使用个人信息,保证和承诺就个人信息处理行为获得最终用户的授权同意,遵循最小必要原则,且应当采取有效的技术措施和组织措施确保个人信息安全。为帮助开发者在使用广告SDK的过程中更好地落实用户个人信息保护相关要求,避免出现侵害最终用户个人信息权益的情形,特制定本合规使用说明,供开发者在接入使用广告SDK服务时参照自查和合理配置,不断提升个人信息保护水平。
APP合规仍为监管执法和各大应用市场的重要关注点。为避免App被下架,请务必做好两件事:
1、首先将SDK升级至满足监管要求的最新版本;
2、按下文合规解法进行配置。
针对广告SDK版本升级,参照以下步骤:
从官网下载最新版本(https://aligames.open.9game.cn/document/doc/detail/311)解压获取aar包(在 ngad-sdk-all-*.zip\04-依赖库\aar接入方式\ngad-sdk-release-*.aar 里),对比版本号,如果已经是最新版本 2.21.2+ 则无需替换;如果不是最新版本则需要替换更新aar包。
接入说明:开发者在App集成广告SDK后,广告SDK的正常运行会收集必要的最终用户信息用于展示内容及向最终用户推荐可能感兴趣的内容。请开发者根据集成广告SDK的实际情况,在您App的隐私政策中,对广告SDK名称、公司名称、处理个人信息种类及目的、采集方式、隐私政策链接等内容进行披露。建议:确认您所接入的广告SDK版本和功能模块;根据上述版本和模块,从隐私政策中确定与广告SDK交互的数据内容;在您App的隐私政策中,以文字或列表的方式向公众披露广告SDK的相关信息。
披露示例(仅供参考,请以实际合作情况为准):
SDK名称:九游广告SDK
运营方:广州爱九游信息技术有限公司
使用目的:为开发者提供帮助调整广告变现策略及数据分析的服务
使用场景:在开发者进行广告投放,需要进行广告变现策略调整及数据分析时进行使用
收集方式:SDK自行采集
收集个人信息类型:设备品牌、型号、操作系统及api版本信息、系统时区、系统语言、屏幕密度、屏幕分辨率、CPU信息、设备标识符(如AndroidID、IMEI、MAC地址、OAID、IMSI,具体字段因软硬件版本不同而存在差异)、网络状态(WiFi状态)、应用的名称、应用的包名、应用的版本号、应用安装列表、位置信息
隐私权政策链接:https://open.9game.cn/sdkprivacy
SDK名称:优量汇
运营方:深圳市腾讯计算机系统有限公司
使用目的:向用户展示广告,及广告监测归因、反作弊
收集个人信息类型:粗略位置信息(基站、附近的WIFI、连接的WIFI)、设备制造商、品牌、设备型号、操作系统版本、屏幕分辨率、屏幕方向、屏幕DPI、IP地址、网络类型、运营商、系统启动时间、时区、系统语言、磁盘空间、电量、充电状态、屏幕亮度、OAID、Android_ID、宿主应用的包名、版本号、宿主应用的进程名称、运行状态、应用列表、应用安装信息、产品交互数据、广告数据(如展示、点击、转化广告数据)、产品交互数据、广告数据(如展示、点击、转化广告数据)、崩溃数据、性能数据、加速度传感器、陀螺仪传感器、磁力传感器、重力传感器
隐私权政策链接:https://e.qq.com/dev/help_detail.html?cid=2005&pid=5983
SDK名称:穿山甲广告SDK
运营方:北京巨量引擎网络技术有限公司
使用目的:向用户展示广告,及广告监测归因、反作弊
收集个人信息类型:设备品牌、型号、软件系统版本、屏幕密度、屏幕分辨率、设备语言、设备时区、sim卡信息(mcc&mnc)、CPU信息、可用存储空间大小等基础信息、OAID、AndroidID、设备MAC地址、设备标识符(如IMEI、IMSI、ICCID、GAID(仅GMS服务)、MEID、硬件序列号build_serial,具体字段因软硬件版本不同而存在差异)、运营商信息、Wi-Fi状态、网络信号强度、IP地址、应用包名、运行中的进程信息、版本号、应用前后台状态、软件列表信息、线性加速度传感器、磁场传感器、旋转矢量传感器、加速度传感器、陀螺仪传感器、对广告的展示、点击及转化等交互数据、精确位置信息、粗略位置信息(WiFi列表、WLAN接入点(如SSID,BSSID)、基站)、崩溃数据、性能数据
隐私权政策链接:https://www.csjplatform.com/privacy
SDK名称:快手联盟SDK
运营方:北京快手广告有限公司
使用目的:广告投放、推送、统计分析以及提供可靠稳定的服务
收集个人信息类型:设备品牌、设备型号、软件系统版本、存储信息、运营商信息、设备时区、设备语言、网络信息、IP地址、可用存储空间大小、CPU信息、屏幕密度、屏幕分辨率、Android ID、OAID、设备标识符(IMEI、IMSI)、设备IP、精确位置信息(GPS)、粗略位置信息(WiFi信息、WLAN接入点(如SSID,BSSID)、基站信息)、MAC地址、应用安装列表、传感器信息、sim卡激活信息相关系统权限申请、读写存储权限
隐私权政策链接:https://u.kuaishou.com/home/help/detail/1337/1425
请务必在用户同意您App中的隐私政策后,再进行广告SDK的初始化。用户同意隐私政策之前,避免动态申请涉及用户个人信息的敏感设备权限;用户同意隐私政策前,您应避免私自采集和上报个人信息。当您的App未向用户提供服务时,例如App在后台运行时,请勿请求广告SDK的相关服务。
本方案支持九游广告SDK2.21.2及更高版本,强烈建议开发者将九游广告SDK升级到2.21.2版本。
初始化步骤:请确保在App安装后首次冷启动时按照如下方式进行初始化。
【1】 在 Applicaiton.onCreate 函数中调用预初始化函数
UMConfigure.preInit(),预初始化函数不会采集设备信息,也不会向后台上报数据。
public class XXXApplication extends Application {
protected static final String TAG = "DemoApp";
@Override
public void onCreate() {
super.onCreate();
// 同意隐私政策后调用初始化
initAdSdk();
}
protected void initAdSdk() {
initSdk(this, new NGASDK.InitCallback() {
@Override
public void success() {
// NGASDK init success, and can try to show splash ad.
Log.d(TAG, "广告SDK初始化成功");
}
@Override
public void fail(Throwable throwable) {
Log.e(TAG, "广告SDK初始化异常:" + Log.getStackTraceString(throwable));
}
});
}
protected void initSdk(Context context, final NGASDK.InitCallback initCallback) {
Log.d(TAG, MediaAdConfig.toStringFormat());
NGASDK ngasdk = NGASDKFactory.getNGASDK();
ngasdk.init(context, new AdConfig.Builder()
.setAppId(MediaAdConfig.appId)
.setDebug(true)
.showNotification(true)
.supportPersonalizedAd(true)
.build(), initCallback);
}
}
【2】 确保App首次冷启动时,在用户阅读您的《隐私政策》并取得用户授权之后,才调用正式初始化函数
NGASDKFactory.getNGASDK().init() 初始化广告SDK。反之,如果用户不同意《隐私政策》授权,则不能调用
NGASDKFactory.getNGASDK().init() 初始化函数。
【3】 一旦App获取到《隐私政策》的用户授权,后续的App冷启动,开发者应该保证在
Applicaiton.onCreate 函数中调用初始化函数 NGASDKFactory.getNGASDK().init()。
个性化推荐广告设置
为落实个人信息保护相关的规定,SDK为开发者提供退出个性化广告能力的接口,开发者可以调用接口,向用户提供退出个性化广告的能力。退出后,看到的广告数量不变,相关度会降低。开发者需遵守相关法律法规的要求,在开发者应用内为用户提供退出个性化广告的功能。
API说明:
开发者在初始化广告SDK成功后,可以通过开关进行设置:
cn.sirius.nga.shell.GlobalSetting.setPersonalizedState(int state)
| 参数 | 描述 | 值 |
|---|---|---|
| state | 是否屏蔽个性化广告 |
当用户选择拒绝个性化广告时上报传入:GlobalSetting.STATE_PERSONALIZED_UNSUPPORT
当用户同意时上报传入: GlobalSetting.STATE_PERSONALIZED_SUPPORT
|
相关信息的不收集会对其对应的功能造成影响,请开发者结合业务实际需要进行合理配置。
API说明(NGACustomController):
| 接口 | 描述 | 备注 |
|---|---|---|
allowUsePhoneState |
设备标识符(如:MAC地址、OAID、IMSI、IMEI,具体字段因软硬件版本不同而存在差异) | 是否允许SDK获取设备ID,用于广告投放、反作弊追踪 |
getOaid |
设备标识符-OAID | Android10+ 采用oaid追踪用户的广告行为;请传入原始oaid,无需使用md5加密,共享信息给SDK |
getImei |
设备标识符-IMEI | Android10- 采用imei追踪用户的广告行为;请传入原始的imei信息,sdk使用您传入的原始imei信息 |
getMacAddress |
设备标识符-MAC地址信息 | 共享mac地址给SDK |
allowUseAndroidId |
设备标识符-AndroidID | AndroidID,辅助用户行为分析 |
allowUseWifiState |
网络状态(WiFi状态) | 共享WiFi状态给SDK |
allowReadInstalledPackages |
应用安装列表 | 是否允许读取应用安装列表,用于判断用户已安装应用,优化广告投放、下载、安装逻辑 |
allowUseStoragePermission |
存储空间权限 | 是否允许使用存储空间权限 |
allowReadLocation |
位置信息 | 共享位置信息给SDK |
接入示例:在SDK初始化阶段(即在 NGASDKFactory.getNGASDK().init() 处)传入:
/**
* 用户信息采集配置
*/
NGACustomController ngaCustomController = new NGACustomController() {
@Override
public boolean allowReadLocation() {
return super.allowReadLocation();
}
@Override
public Location getLocation() {
return super.getLocation();
}
@Override
public boolean allowUsePhoneState() {
return super.allowUsePhoneState();
}
@Override
public String getImei() {
return super.getImei();
}
@Override
public String getOaid() {
return super.getOaid();
}
@Override
public boolean allowUseAndroidId() {
return super.allowUseAndroidId();
}
@Override
public String getMacAddress() {
return super.getMacAddress();
}
@Override
public boolean allowUseWifiState() {
return super.allowUseWifiState();
}
@Override
public boolean allowUseStoragePermission() {
return super.allowUseStoragePermission();
}
@Override
public boolean allowReadInstalledPackages() {
return super.allowReadInstalledPackages();
}
};
NGASDK ngasdk = NGASDKFactory.getNGASDK();
ngasdk.init(activity, new AdConfig.Builder()
.setAppId(MediaAdConfig.appId)
.setGameId("")
// 打Release包的时候,需要把DebugMode设置为false
.setDebug(true)
.showNotification(true)
.supportPersonalizedAd(true)
// 可选个人信息配置
.setCustomController(ngaCustomController)
.setFetchConfig(new AdConfig.FetchConfigBuilder()
.setSplashLimitTime(2500)
.setRewardVideoLimitTime(15000)
.setLimitTime(10000)
.build())
.build(), initCallback);
要求内容:《SDK合规使用说明》应详细说明SDK所需的系统权限与各业务功能间的关系,并说明权限申请时机。
接入说明:对于广告SDK可选申请的系统权限,您可以参考相关如下表格的内容,详细了解相关权限与各业务功能的关系及其申请时机,因相关权限的不申请将会对其对应的功能造成影响,您可以结合业务实际需要进行合理配置。
安卓操作系统应用权限列表:
| 权限 | 功能 | 用途和目的 | 申请时机 |
|---|---|---|---|
ACCESS_FINE_LOCATION |
【可选】访问精准定位 | 根据位置情况实现流量分组功能 | 开发者在调用需要该权限的SDK功能时进行调用。例如当开发者需要根据精确位置情况使用调整广告变现策略及数据分析服务时申请。 |
ACCESS_COARSE_LOCATION |
【可选】访问粗略位置 | 根据位置情况实现流量分组功能 | 开发者在调用需要该权限的SDK功能时进行调用。例如当开发者需要根据粗略位置情况使用调整广告变现策略及数据分析服务时申请。 |
READ_PHONE_STATE |
【可选】读取手机设备标识(设备IMSI/IMEI号)等信息 | 根据设备信息情况实现流量分组功能 | 开发者在调用需要该权限的SDK功能时进行调用。例如当开发者需要根据设备信息情况使用调整广告变现策略及数据分析服务时申请。 |
WRITE_EXTERNAL_STORAGE |
【可选】写入外置存储器 | 写入配置、文件等数据 | 开发者在调用需要该权限的SDK功能时进行调用。例如当开发者投放其他广告平台的广告时,其他广告平台进行广告投放时进行申请。 |
READ_EXTERNAL_STORAGE |
【可选】读取外置存储器 | 读取配置、文件等数据 | 开发者在调用需要该权限的SDK功能时进行调用。例如当开发者投放其他广告平台的广告时,其他广告平台进行广告投放时进行申请。 |
QUERY_ALL_PACKAGES |
【可选】获取应用软件列表 | 由其他广告平台调取,用于广告投放 | 开发者在调用需要该权限的SDK功能时进行调用。例如当开发者投放其他广告平台的广告,其他广告平台需要依据应用软件列表实现广告投放时进行申请。 |
接入说明:开发者在其App中集成广告SDK后,广告SDK的正常运行会收集必要的最终用户信息用于实现业务功能。开发者应根据相关法律法规为最终用户提供行使个人信息主体权利的路径或功能,需要广告SDK配合的,请与广告SDK及时进行联系,我们将与开发者协同妥善解决最终用户的诉求。