国内隐私规范
了解更多,请查看隐私合规指南
一、国内个性化推荐广告开关
为遵循《个人信息保护法》相关法规,提供关闭个性化推荐广告API。
目前个性化开关设置支持的广告平台:穿山甲,优量汇,快手,百度,华为,Mintegral,Sigmob ,TapTap 默认情况是全部开启广告个性化推荐,如果手动设置关闭之后则全部广告平台关闭个性化推荐
1.1 关闭个性化推荐广告
平台 | 方法 | 说明 |
---|---|---|
Android | TradPlusSdk.setOpenPersonalizedAd((boolean openPersonalizedAd) | (1)默认是开启状态 true。 (2)不会保存个性化推荐广告状态。每次启动后SDK都会重置为开启状态。开发者需自行管理保存用户设置的个性化推荐广告状态,并在 请求广告前 调用方法重新设置。 (3) 重新设置后不会清除已缓存广告,重设后的状态将在下次广告加载时生效。 |
Unity3d | TradPlus.SetOpenPersonalizedAd(bool openPersonalizedAd) | 同上。 |
1.2 判断个性化广告开关是否开启
平台 | 方法 | 说明 |
---|---|---|
Android | TradPlusSdk.isOpenPersonalizedAd() | 返回true为开启,false为关闭。 |
Unity3d | TradPlus.IsOpenPersonalizedAd() | 同上。 |
1.3 确认开启状态
- V7.7.0.1 及以上版本支持
- 开发者可通过调用API后,LogCat过滤“PersonalizeEnable”可确认开启状态。,如下示例代码,可知Baidu个性化广告属于开启状态。
2022-03-30 11:14:19.129 7653-7653 I/PersonalizeEnable: Baidu openPersonalizedAd 个性化开关: true
二、设置隐私信息控制开关
-
为了保证您的 App 顺利通过检测,结合当前监管关注重点,我们可以将 TradPlus SDK 的初始化放在用户同意隐私政策之后。
-
如果有更高需求,可以使用TradPlus统一隐私设置开关进行控制,限制用户设备数据上报可能会对广告填充造成影响,请斟酌使用。
(1)TradPlus SDK 默认会收集用户的以下数据:
-
公共收集数据:系统版本名、系统版本号、操作系统及 api 版本信息、系统内核版本、应用包名、应用版本名、应用版本号、应用安装时间、应用安装列表、设备生产商、 设备型号、设备品牌、屏幕分辨率、屏幕密度、宽高、屏幕方向、移动网络代码、移动国家代码、语言、时区、网络类型、加速度传感器、存储空间、设备剩余磁盘大小、网络质量数据、IP 地址
-
中国区 SDK 额外收集数据:OAID、CPU 型号信息、系统启动标识、系统更新标识、Google Ad ID、内存大小、User Agent
-
非中国区 SDK 额外收集数据:Google Ad ID、 亚马逊 ID、User Agent
(2)TradPlus SDK 提供了 API 给开发者去限制这些隐私数据的上报,当开发者选择限制上报某些设备数据时,可能会影响到TradPlus提供的一些功能的正常使用,如流量分组、交叉推广、TradPlus Adx 等功能,请在充分了解功能依赖和数据使用方式的基础上谨慎设置 。
2.1 TradPlus 统一隐私开关设置
开发者可以更方便的通过tradplus提供的开关统一控制所有三方的收集情况,如果使用tradplus的开关来设置,就不需要再调用三方的了,其中Mac地址、IMEI、IMSI三个权限默认关闭,如果有特殊情况需要收集,请联系我们
//初始化SDK之前调用此代码限制设备隐私数据的上报,传入的信息将被限制上报
//地理位置信息、隐私控制权限、meid
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.LOCATION);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.PRIVACY_USERAGREE);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.MEID);
//iccid、AndroidId、设备信息、使用ACCESS_WIFI_STATE权限
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.ICCID);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.ANDROID_ID);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.DEVICED_ID);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.WIFI_STATE);
//使用WRITE_EXTERNAL_STORAGE权限、获取运行中的APP权限、获取运行中的APP权限、蓝牙信息、录音权限
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.STORAGE);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.RUNNING_APP);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.UPDATE_APP);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.BLUETOOTH);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.RECORD_AUDIO);
//MTG通用信息、MTG设备序列号、MTG时区信息,电量信息,设备内存信息
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.MTG_GENERAL_DATA);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.MTG_SERIAL_ID);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.MTG_OTHE);
//屏幕分辨率、屏幕密度、系统启动标识、应用包名、应用版本号
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.DEVICE_SCREEN_SIZE);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.DEVICE_SCREEN_DENSITY);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.ELAPSEDREAL_TIME);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.APP_PACKAGE_NAME);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.APP_VERSION_CODE);
//应用版本名、应用安装时间、应用安装列表、加速度传感器、设备生产商
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.APP_VERSION_NAME);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.APP_INSTALL_TIME);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.APP_INSTALL_LIST);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.ACCELEROMTER_SENSOR);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.BRAND);
//GAID、AMAZON_ID、语言、移动网络代码、移动国家代码
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.GAID);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.AMAZON_ID);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.LANGUAGE);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.MCC);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.MNC);
//设备型号、屏幕方向、系统版本号、系统版本名、时区
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.MODEL);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.ORIENTATION);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.OS_VERSION_CODE);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.OS_VERSION_NAME);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.TIMEZONE);
//UA、网络类型、OAID、内存大小
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.USER_AGENT);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.NETWORK_TYPE);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.DEVICE_OAID);
PrivacyDataInfo.getInstance().setPrivacyDeviceInfo(PrivacyDataInfo.RAM);
注意事项
- 国内MTG Waterfall 和 Vivo 获取不到Mac地址、IMEI、IMSI会影响一些填充。集成这两个平台且不想影响填充可以在初始化后,创建广告位对象前调用如下API:
PrivacyDataInfo.getInstance().canUsePhoneState(true);
2.2 三方 SDK 隐私开关设置
如果您需要单独控制某个三方SDK的隐私权限设置,请参考以下各三方SDK隐私权限文档说明进行设置。
穿山甲
- SDK 可控制 7 个权限:地理位置信息,应用安装列表,IMEI,WIFI,AndroidID,录音权限、STORAGE
- 文档地址:https://www.csjplatform.com/supportcenter/5397#18mipxczvs740
ToutiaoInitManager.getInstance().setTTCustomController(new TTCustomController() {
/**
* 是否允许穿山甲SDK主动使用地理位置信息
*
* @return true可以获取,false禁止获取。默认为true
*/
@Override
public boolean isCanUseLocation() {
return super.isCanUseLocation();
}
/**
* 当isCanUseLocation=false时,可传入地理位置信息,穿山甲sdk使用您传入的地理位置信息
*
* @return 地理位置参数
*/
@Override
public LocationProvider getTTLocation() {
return super.getTTLocation();
}
/**
* 是否允许穿山甲SDK主动获取设备上应用安装列表的采集权限
*
* @return true可以使用,false禁止使用。默认为true
*/
@Override
public boolean alist() {
return super.alist();
}
/**
* 是否允许穿山甲SDK主动使用手机硬件参数,如:imei
*
* @return true可以使用,false禁止使用。默认为true
*/
@Override
public boolean isCanUsePhoneState() {
return super.isCanUsePhoneState();
}
/**
* 当isCanUsePhoneState=false时,可传入imei信息,穿山甲sdk使用您传入的imei信息
*
* @return imei信息
*/
@Override
public String getDevImei() {
return super.getDevImei();
}
/**
* 是否允许穿山甲SDK主动使用ACCESS_WIFI_STATE权限
*
* @return true可以使用,false禁止使用。默认为true
*/
@Override
public boolean isCanUseWifiState() {
return super.isCanUseWifiState();
}
/**
* 可传入Mac信息,穿山甲sdk使用您传入的Mac信息
*
* @return Mac信息
*/
@Override
public String getMacAddress() {
return super.getMacAddress();
}
/**
* 是否允许穿山甲SDK主动使用WRITE_EXTERNAL_STORAGE权限
*
* @return true可以使用,false禁止使用。默认为true
*/
@Override
public boolean isCanUseWriteExternal() {
return super.isCanUseWriteExternal();
}
/**
* 开发者可以传入oaid
* 信通院OAID的相关采集——如何获取OAID:
1. 移动安全联盟官网http://www.msa-alliance.cn/
2. 信通院统一SDK下载http://msa-alliance.cn/col.jsp?id=120
* @return oaid
*/
@Override
public String getDevOaid() {
return super.getDevOaid();
}
/**
* 是否能获取android ID
* @return true可以使用,false禁止使用。默认为true
*/
@Override
public boolean isCanUseAndroidId() {
return super.isCanUseAndroidId();
}
/**
* 开发者可以传入android ID
*
* @return Mac信息
*/
@Override
public String getAndroidId() {
return super.getAndroidId();
}
/**
* 是否允许SDK在申明和授权了的情况下使用录音权限
* @return true可以,false禁止使用。默认为true
*/
@Override
public boolean isCanUsePermissionRecordAudio() {
return super.isCanUsePermissionRecordAudio();
}
});
优量汇
- SDK 可以控制 5 个权限:隐私信息MAC,AndroidID,DeviceID,应用安装列表
- 文档地址:
//隐私信息
GlobalSetting.setAgreePrivacyStrategy(false);
try {
HashMap<String, Boolean> params = new HashMap();
// mac
params.put("mac_address", false);
// android_id
params.put("android_id", false);
// device_id
params.put("device_id", false);
GlobalSetting.setAgreeReadPrivacyInfo(params);
//应用安装列表
GlobalSetting.setEnableCollectAppInstallStatus(false);
} catch (Throwable throwable) {
throwable.printStackTrace();
}
快手
- SDK 可控 7 个权限:地理位置信息,设备信息(imei, android_id, meid, imsi, iccid)、OAID,WIFI,应用安装列表,MAC,使用存储权限
- 文档地址:https://u.kuaishou.com/access/sdk-docs?client=ANDROID&docType=readme
KuaishouInitManager.getInstance().setKsCustomController(new KsCustomController() {
/**
* 是否允许SDK主动使⽤地理位置信息
*
* @return true可以获取,false禁⽌获取。默认为true
*/
@Override
public boolean canReadLocation() {
return super.canReadLocation();
}
/**
* 当canReadLocation=false时,可传⼊地理位置信息,sdk使⽤您传⼊的地理位置信息
*
* @return 地理位置参数
*/
@Override
public Location getLocation() {
return super.getLocation();
}
/**
* 是否允许SDK主动使⽤⼿机硬件参数,如:imei, android_id, meid, imsi, iccid
*
* @return true可以使⽤,false禁⽌使⽤。默认为true
*/
@Override
public boolean canUsePhoneState() {
return super.canUsePhoneState();
}
/**
* 当canUsePhoneState=false时,可传⼊原始的imei信息,sdk使⽤您传⼊的原始imei信息。
* 注意:请传⼊原始imei值,⽆需使⽤md5加密,sdk整体信息加密传输已满⾜合规需要
*/
@Override
public String getImei() {
return super.getImei();
}
/**
* 当canUsePhoneState=false时,可传⼊原始的imei信息,sdk使⽤您传⼊的原始imei信息。
传⼊的是数组,imei个数和⼿机卡个数相同
* 注意:请传⼊原始imei值,⽆需使⽤md5加密,sdk整体信息加密传输已满⾜合规需要
*/
@Override
public String[] getImeis() {
return super.getImeis();
}
/**
* 当canUsePhoneState=false时,可传⼊android_id信息,sdk使⽤您传⼊的android_id
*/
@Override
public String getAndroidId() {
return super.getAndroidId();
}
/**
* 是否允许SDK主动使⽤oaid
*
* @return true可以使⽤,false禁⽌使⽤。默认为true
*/
@Override
public boolean canUseOaid() {
return super.canUseOaid();
}
/**
* 当canUseOaid=false时,可传⼊oaid信息,sdk使⽤您传⼊的oaid信息
* 注意:请传⼊原始oaid,⽆需使⽤md5加密,sdk整体信息加密传输已满⾜合规需要
*/
@Override
public String getOaid() {
return super.getOaid();
}
/**
* 是否允许SDK主动使⽤mac_address
*
* @return true可以使⽤,false禁⽌使⽤。默认为true
*/
@Override
public boolean canUseMacAddress() {
return super.canUseMacAddress();
}
/**
* 当canUseMacAddress=false时,可传⼊mac地址信息,sdk使⽤您传⼊的mac地址信息
*/
@Override
public String getMacAddress() {
return super.getMacAddress();
}
/**
* 是否允许SDK主动使⽤ACCESS_NETWORK_STATE权限
*
* @return true可以使⽤,false禁⽌使⽤。默认为true
*/
@Override
public boolean canUseNetworkState() {
return super.canUseNetworkState();
}
/**
* 是否允许SDK主动使⽤存储权限
*
* @return true可以使⽤,false禁⽌使⽤。默认为true
*/
@Override
public boolean canUseStoragePermission() {
return super.canUseStoragePermission();
}
/**
* 是否允许SDK主动读取app安装列表
*
* @return true可以使⽤,false禁⽌使⽤。默认为true
*/
@Override
public boolean canReadInstalledPackages() {
return super.canReadInstalledPackages();
}
/**
* 当canReadInstalledPackages=false时,可传⼊package list信息,sdk使⽤您传⼊的
package list
*/
@Override
public List<String> getInstalledPackages() {
return super.getInstalledPackages();
}
});
TapTap
- SDK 可控 6 个权限:地理位置信息,手机硬件参数,WIFI,应用安装列表,AndroidID,内存
- 文档地址:https://developer.taptap.cn/docs/sdk/tap-adn/tds-tapad/
TapTapInitManager.getInstance().setTTCustomController(new TapAdCustomController() {
// 是否允许 SDK 主动使用地理位置信息
@Override
public boolean isCanUseLocation() {
return super.isCanUseLocation();
}
// 当 isCanUseLocation=false 时,可传入地理位置信息,TapAd 使用您传入的地理位置信息
@Override
public TapAdLocation getTapAdLocation() {
return super.getTapAdLocation();
}
// 是否允许 SDK 主动使用手机硬件参数,如 imei
@Override
public boolean isCanUsePhoneState() {
return super.isCanUsePhoneState();
}
// 当 isCanUsePhoneState=false 时,可传入 imei 信息,TapAd 使用您传入的 imei 信息
@Override
public String getDevImei() {
return super.getDevImei();
}
// 是否允许 SDK 主动使用 ACCESS_WIFI_STATE 权限
@Override
public boolean isCanUseWifiState() {
return super.isCanUseWifiState();
}
// 是否允许 SDK 主动使用 WRITE_EXTERNAL_STORAGE 权限
@Override
public boolean isCanUseWriteExternal() {
return super.isCanUseWriteExternal();
}
// 开发者可以传入 oaid
// 信通院 OAID 的相关采集——如何获取 OAID:
// 1. 移动安全联盟官网 http://www.msa-alliance.cn/
// 2. 信通院统一 SDK 下载 http://msa-alliance.cn/col.jsp?id=120
@Override
public String getDevOaid() {
return super.getDevOaid();
}
// 是否允许 SDK 主动获取设备上应用安装列表的采集权限
@Override
public boolean alist() {
return super.alist();
}
// 是否允许 SDK 主动获取 ANDROID_ID
@Override
public boolean isCanUseAndroidId() {
return super.isCanUseAndroidId();
}
@Override
public CustomUser provideCustomUser() {
return new CustomUser.Builder()
.withRealAge(age) // 年龄
.withRealSex(sex) // 性别 0:男 1:女
.withAvatarSex(avatarSex) // 角色性别 0:男 1:女
.withAvatarLevel(avatarLevel) // 角色等级
.withNewUserStatus(status) // 是否新玩家 0:否;1:是
.withPayedUserStatus(status) // 是否付费用户 0:否;1:是
.withBeginMissionFinished(finished) // 是否通过新手教程 0:否 1: 是
.withAvatarPayedToolCnt(cnt) // 角色当前付费道具数量
.build();
}
});
百度
-
SDK 可控 8 个权限:DeviceID,使用内存权限,OAID,地理位置信息,应用安装列表,使用设备信息,获取 APP 更新权限,获取运行中的 APP 权限
// 设置SDK可以使用的权限,包含:设备信息、定位、存储等
// 在发起请求前设置一次即可,不同的进程需要单独设置,SDK默认无权限
// 设置允许读取设备id的权限,包含imei
MobadsPermissionSettings.setPermissionReadDeviceID(true);
// 允许百度SDK可以使用定位权限
MobadsPermissionSettings.setPermissionLocation(true);
// 允许百度SDK可以使用存储空间
MobadsPermissionSettings.setPermissionStorage(true);
//允许百度SDK可以使用获取应用安装列表权限
MobadsPermissionSettings.setPermissionAppList(true);
//允许百度SDK可以使用OAID
MobadsPermissionSettings.setPermissionOAID(true);
//允许百度SDK可以使用设备信息
MobadsPermissionSettings.setPermissionDeviceInfo(true);
//设置百度SDK是否允许获取APP更新权限
MobadsPermissionSettings.setPermissionAppUpdate(true);
//设置百度SDK是否允许获取运行中的APP权限
MobadsPermissionSettings.setPermissionRunningApp(true);
章鱼移动
- SDK 可控制 2 个权限:IMEI,OAID
- 文 档地址:https://doc.adintl.cn/#/zh-cn/android/章鱼广告SDK-Android接入文档
public abstract class OctopusAdSdkController {
public OctopusAdSdkController() {
}
// 是否允许SDK主动使用手机硬件参数,如 :imei
public boolean isCanUsePhoneState() {
return true;
}
public String getImei() {
return "";
}
public String getOaid() {
return "";
}
}
Sigmob
- SDK 可以控制 4 个权限:地理位置信息,设备ID(IMEI、OAID),AndroidID,应用列表
- 文档地址:https://doc.sigmob.com/Sigmob%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/Android/%E9%AB%98%E7%BA%A7%E8%AE%BE%E7%BD%AE/%E9%9A%90%E7%A7%81%E8%AE%BE%E7%BD%AE/
SigmobInitManager.getInstance().setTTCustomController(new WindCustomController() {
@Override
public boolean isCanUseLocation() {
return super.isCanUseLocation();
}
@Override
public Location getLocation() {
return super.getLocation();
}
@Override
public boolean isCanUsePhoneState() {
return super.isCanUsePhoneState();
}
@Override
public String getDevImei() {
return super.getDevImei();
}
@Override
public String getDevOaid() {
return super.getDevOaid();
}
@Override
public boolean isCanUseAndroidId() {
return super.isCanUseAndroidId();
}
@Override
public String getAndroidId() {
return super.getAndroidId();
}
@Override
public boolean isCanUseAppList() {
return super.isCanUseAppList();
}
@Override
public List<PackageInfo> getInstallPackageInfoList() {
return super.getInstallPackageInfoList();
}
});
Mintegral
- SDK 可以控制 23 个权限:设备信息(IMEI,IMSI,GAID,OAID,AndroidID,Mac),通用信息(device mode, brand, cache, battery, screen size,network, user-agent,ip address,os version, language, timezone),设备ID(谷歌广告 ID,OAID),设备序列号,时区信息,电量信息,设备内存信息
- 文档地址:https://dev.mintegral.com/doc/index.html?file=sdk-m_sdk-android&lang=cn
//根据指定类型状态开启
void setUserPrivateInfoType(Context context,String authorityInfoKey,int status);
//是否允许SDK获取ids [包含 IMEI/IMSI/GAID/OAID/android_id/mac] (允许:True)
void setAllowAcquireIds(boolean allow);
@param authorityInfoKey包括:
// 总开关
public static final String AUTHORITY_ALL_INFO="authority_all_info";
// 通用信息,包括device mode, brand, cache, battery, screen size,network, user-agent,ip address,os version, language, timezone
public static final String AUTHORITY_GENERAL_DATA="authority_general_data";
//谷歌广告id,oaid
public static final String AUTHORITY_DEVICE_ID="authority_device_id";
// 设备序列号
public static final String AUTHORITY_SERIAL_ID="authority_serial_id";
// 时区信息,电量信息,设备内存信息
public static final String AUTHORITY_OTHER="authority_other";
Huawei
- SDK 可以控制4个权限:位置采集,Wi-Fi,蓝牙,Android ID
- 文档地址:https://developer.huawei.com/consumer/cn/doc/HMSCore-Guides/whale-hong-kinetic-sdk-compliance-user-guide-0000001658442922#section16625161416020
HuaweiInitManager.getInstance().setCustomController(new CustomController() {
@Override
public boolean getPermissionLocation() {
return super.getPermissionLocation();
}
@Override
public boolean isCanUseWifiState() {
return super.isCanUseWifiState();
}
@Override
public boolean getAndroidId() {
return super.getAndroidId();
}
@Override
public boolean getBlueTooth() {
return super.getBlueTooth();
}
});
倍孜
- Sdk 可 以控制 6 个权限:地理位置信息,WIFI,OAID,GAID,IMEI,应用安装列表
- 文档地址:http://sdkdoc.beizi.biz/#/zh-cn/android/4xx/Configuration/SDK
BeiziInitManager.getInstance().setBeiZiCustomController(new BeiZiCustomController() {
@Override
public boolean isCanUseLocation() {
return super.isCanUseLocation();
}
@Override
public boolean isCanUseWifiState() {
return super.isCanUseWifiState();
}
@Override
public boolean isCanUsePhoneState() {
return super.isCanUsePhoneState();
}
@Override
public boolean isCanUseOaid() {
return super.isCanUseOaid();
}
@Override
public boolean isCanUseGaid() {
return super.isCanUseGaid();
}
@Override
public String getDevOaid() {
return super.getDevOaid();
}
@Override
public String getOaidVersion() {
return super.getOaidVersion();
}
@Override
public boolean isCanUseAppList() {
return super.isCanUseAppList();
}
});
TanX
- SDK 可控制 2 个权限:OAID,IMEI
- 文档地址:https://tanxsdk.yuque.com/staff-vdu2kd/wk7mhx/yvri39?singleDoc#FvTtu
TaxInitManager.getInstance().setCustomController(new CustomController() {
@Override
public boolean getPermissionReadDeviceID() {
return super.getPermissionReadDeviceID();
}
@Override
public boolean getPermissionOAID() {
return super.getPermissionOAID();
}
});
Vivo
- SDK 可控制 10 个权限:地理位置信息,OAID,IP,AndroidId,Mac地址,应用安装列表,Imsi,个性化,读写权限,IMEI,
VivoInitManager.getInstance().setCustomController(new VCustomController() {
@Override
public boolean isCanUseLocation() {
return super.isCanUseLocation();
}
@Override
public String getOaid() {
return super.getOaid();
}
@Override
public boolean isCanUseIp() {
return super.isCanUseIp();
}
@Override
public boolean isCanUseAndroidId() {
return super.isCanUseAndroidId();
}
@Override
public boolean isCanUseMac() {
return super.isCanUseMac();
}
@Override
public boolean isCanUseApplist() {
return super.isCanUseApplist();
}
@Override
public boolean isCanUseImsi() {
return super.isCanUseImsi();
}
@Override
public boolean isCanPersonalRecommend() {
return super.isCanPersonalRecommend();
}
@Override
public boolean isCanUseWriteExternal() {
return super.isCanUseWriteExternal();
}
@Override
public String getImei() {
return super.getImei();
}
@Override
public boolean isCanUsePhoneState() {
return super.isCanUsePhoneState();
}
@Override
public VLocation getLocation() {
return super.getLocation();
}
});
Oppo
- SDK 可控制 6 个权限:地理位置信息,AndroidId,Mac地址,应用安装列表,IMEI,读写权限
OppoInitManager.getInstance().setMobCustomController(new MobCustomController() {
@Override
public String getDevImei() {
return super.getDevImei();
}
@Override
public boolean alist() {
return super.alist();
}
@Override
public boolean isCanUseWriteExternal() {
return super.isCanUseWriteExternal();
}
@Override
public String getMacAddress() {
return super.getMacAddress();
}
@Override
public boolean isCanUseWifiState() {
return super.isCanUseWifiState();
}
@Override
public String getAndroidId() {
return super.getAndroidId();
}
@Override
public boolean isCanUseAndroidId() {
return super.isCanUseAndroidId();
}
@Override
public boolean isCanUsePhoneState() {
return super.isCanUsePhoneState();
}
@Override
public LocationProvider getLocation() {
return super.getLocation();
}
@Override
public boolean isCanUseLocation() {
return super.isCanUseLocation();
}
});
}
2.2 设置隐私信息控制
平台 | 方法 | 说明 |
---|---|---|
Android | TradPlusSdk.setPrivacyUserAgree(boolean privacyUserAgree) | (1)默认开启状态 true,关闭传false。 (2)初始化TP SDK后,请求广告前调用。 (3)仅在应用第一次设置时候生效,如需更改需要重启应用重新设置。 |
Unity3d | TradPlus.SetPrivacyUserAgree(bool privacyUserAgree) | 同上。 |
2.3 判断隐私信息控制是否开启
平台 | 方法 | 说明 |
---|---|---|
Android | TradPlusSdk.isPrivacyUserAgree() | 返回true为开启,false为关闭。 |
Unity3d | TradPlus.IsPrivacyUserAgree() | 同上。 |
三、国内下载类广告二次弹窗确认
在合规的场景,下载类广告需要在下载前提示用户,用户确认后才可以开始下载。
在广告播放中,点击触发广告下载时,开发者需要将获取应用名称、版本等相关信息进行弹窗提示用户是否确认进行下载。
适用广告类型:所有广告类型
适用广告平台有:优量汇、穿山甲、快手(需要联系快手开通功能)、Mintegral国内(需要联系Mintegral开通功能)、Sigmob(需要联系Sigmob开通功能)、游可赢(下载类广告会自动弹窗,如果要关闭功能,需要联系三方关闭)
优量汇
可以联系优量汇申请,或者自行通过代码设置(仅原生接入方式支持)。
(1)申请二次弹窗权限确认
工信部下载弹窗权限 :点击广告会展示下载二次确认框,并显示工信部要求的应用四要素信息 需要复制下面的表格,发送邮件到优量汇官方邮箱:ADNET@tencent.com进行申请。 优量汇会在一个工作日内受理。 工信部弹窗申请模板: https://docs.qq.com/sheet/DWFNCSUtPc0VaY0FT 权限开通以后,该媒体下所有广告位点击下载类广告都会有提示框。
(2)代码设置弹窗逻辑(仅TP原生支持调用)
- 若开发者申请二次弹窗权限确认成功后,无需代码设置。
- 使用代码设置需要开发者自己绘制弹窗并提示用户是否确认进行下载
- 所有类型广告都需要调用
tpObject.setNetworkExtObj(new DownloadConfirmListener())
。 - DownloadConfirmListener相关了解见腾讯应用下载弹窗确认
- 广告位对象创建后,请求广告前调用。以下代码示例以Banner广告举例
//初始化广告位
TPBanner tpBanner = new TPBanner(activity);
//设置TP其他监听
.....
//设置三方发生应用下载时的回调,传入DownloadConfirmListener监听
tpBanner.setNetworkExtObj(new DownloadConfirmListener() {
@Override
public void onDownloadConfirm(Activity context, int scenes, String infoUrl, DownloadConfirmCallBack callBack) {
//scenes 下载发生的场景
//infoUrl 将要下载的应用信息的url地址
//callBack 开发者通过这个callBack通知sdk是继续下载还是取消下载
}
});
//请求广告
tpBanner.loadAd("AdUnitId");
穿山甲
- 广告请求前调用,只需要调用一次即可,对穿山甲所有类型都生效
- V7.0.0.X 新增API,支持TP后台设置来控制是否开启“下载弹窗确认”。
- 穿山甲二次确认弹窗如果直接下载广告,需要 提交应用ID给穿山甲方,让他们进行相关配置。
平台 | 方法 |
---|---|
Android接入 | ToutiaoInitManager.isConfirmDownload(true); |
Unity接入 | TradPlus.SetToutiaoIsConfirmDownload(true); |
四、国内下载类广告下载类6要素
针对国内平台原生自渲染下载类广告返回六要素
V11.9.0.1+ 优化
- 使用前需要判断【下载类广告六要素信息对象】是否为空,不为空则把六要素信息渲染到布局上。
- 注意:不是所有平台都提供完整的六要素,所以在渲染时需要判断要素返回是否为空,不为空再进行渲染
- 开发者继承TPNativeAdRender,重写renderAdView方法,通过TPNativeAdView获取三方返回的五要素
代码示例
TPCustomNativeAd nativeAd = tpNative.getNativeAd();
if (nativeAd != null) {
nativeAd.showAd(adContainer, new TPNativeAdRender() {
@Override
public ViewGroup createAdLayoutView() {
LayoutInflater inflater = (LayoutInflater) NativeActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
return (ViewGroup) inflater.inflate(R.layout.tp_native_ad_list_item, null);
}
@Override
public ViewGroup renderAdView(TPNativeAdView tpNativeAdView) {
ViewGroup viewGroup = createAdLayoutView();
TPNativeAdView nativeAdView = nativeAd.getNativeAdView();
if (nativeAdView != null) {
TPNativeAdView.AppNativeInfo appNativeInfo = nativeAdView.getAppNativeInfo();
// 六要素
View sixNativeInfoView = viewGroup.findViewById(R.id.six_native_info);
if (appNativeInfo != null) {
sixNativeInfoView.setVisibility(View.VISIBLE);
// 应用名称
TextView app_name_text = viewGroup.findViewById(R.id.app_name_text);
// 应用功能介绍
TextView app_detail_text = viewGroup.findViewById(R.id.app_detail_text);
// 应用版本号
TextView app_version_text = viewGroup.findViewById(R.id.app_version_text);
// 权限列表Url
TextView app_permission_text = viewGroup.findViewById(R.id.app_permission_text);
// 隐私协议Url
TextView app_privacy_text = viewGroup.findViewById(R.id.app_privacy_text);
// 应用开发者名称
TextView app_author_text = viewGroup.findViewById(R.id.app_author_text);
String appName = appNativeInfo.getAppName();
if (!TextUtils.isEmpty(appName)) {
app_name_text.setText(appName);
}
String appDetailUrl = appNativeInfo.getAppDetailUrl();
if (!TextUtils.isEmpty(appDetailUrl)) {
app_detail_text.setText(appDetailUrl);
}
String appVrsion = appNativeInfo.getAppVrsion();
if (!TextUtils.isEmpty(appVrsion)) {
app_version_text.setText(appVrsion);
}
String appPermissionUrl = appNativeInfo.getAppPermissionUrl();
if (!TextUtils.isEmpty(appPermissionUrl)) {
app_permission_text.setText(appPermissionUrl);
}
String authorName = appNativeInfo.getAuthorName();
if (!TextUtils.isEmpty(authorName)) {
app_author_text.setText(authorName);
}
String appPrivacyUrl = appNativeInfo.getAppPrivacyUrl();
if (!TextUtils.isEmpty(appPrivacyUrl)) {
app_privacy_text.setText(appPrivacyUrl);
}
}else {
sixNativeInfoView.setVisibility(View.GONE);
}
}
return viewGroup;
}
}, "adSceneId");
TPNativeAdView.AppNativeInfo 说明
方法 | 说明 | 支持平台 |
---|---|---|
getAppName() | 应用的名称 | 优量汇、百度、快手、穿山甲、Mintegral、米盟、Taptap、Sigmob、Vivo 、Oppo |
getAppDetailUrl() | 应用功能介绍 | 优量汇、百度、穿山甲、Sigmob、Taptap、Vivo |
getAppVrsion() | 应用版本号 | 优量汇、百度、快手、穿山甲、Mintegral、游可赢、米盟、Taptap、Sigmob、Vivo 、Oppo |
getAppPermissionUrl() | 权限列表Url | 优量汇、百度、快手、穿山甲、米盟、Sigmob、Taptap、Vivo |
getAuthorName() | 应用开发者名称 | 优量汇、百度、快手、穿山甲、Mintegral、游可赢、米盟、Taptap、Sigmob、Vivo 、Oppo |
getAppPrivacyUrl() | 隐私协议Url | 优量汇、百度、快手、穿山甲、Mintegral、游可赢、米盟、Sigmob、Taptap、Vivo |
五、优量汇断点续安装或激活弹窗提示
- 必须先初始化腾讯广告SDK(建议在Application中进行初始化),且初始化使用的 APP ID必须与TP后台配置的腾讯广告源的APPID一致,否则会导致腾讯广告的所有广告都加载失败
- 详细实现代码请参考:断点续安装或激活弹窗提示
GDTAdSdk.getGDTAdManger().showOpenOrInstallAppDialog(new GDTAppDialogClickListener() {
@Override
public void onButtonClick(int buttonType) {
}
});
六、优量汇进入应用下载任务列表
- 必须先初始化腾讯广告SDK(建议在Application中进行初始化),且初始化使用的 APP ID必须与TP后台配置的腾讯广告源的APPID一致,否则会导致腾讯广告的所有广告都加载失败
- 详细实现代码请参考:进入应用下载任务列表
DownloadService.enterAPPDownloadListPage(activity);