跳到主要内容

ID上报方式


广告系统跟踪ID

CLICK_ID

情况1:落地页 URL 上获取

推广 H5、小程序、小游戏是,在腾讯广告推广时,每次点击都会生成一个 click_id,在跳转到落地页时,会将 click_id 作为参数传入对应的 URL 中。

  • 非微信流量:URL 中的参数 qz_gdt 的值
  • 微信流量:URL 中的参数 gdt_vid 的值

情况2:监测链接获取

通过点击监测获取,监测链接提供宏字段给到客户,支持客户获取广告__CLICK_ID__



设备标识

Android 设备

OAID

移动安全联盟提出的安卓系统移动终端设备补充标识(OAID),保留原始值,不需要MD5编码。

MSA 网站获取 OAID 具体步骤
  1. 登录 MSA官网
  2. 注册成为网站会员;
  3. 进入移动智能设备标识公共服务平台模块;
  4. 拉至页面最下方,阅读开发者说明,并下载安装 SDK。

注意

返回值必须有『ret』,且参数值必须为0;否则视为不成功;返回值不能包含『302』,返回值中的『错误信息』如果是中文,必须使用 UTF-8 字符集,不能使用 GBK 等其他字符集。



HASH_OAID

移动安全联盟(简称MSA)制定的匿名设备标识符,原始值进行 MD5 编码。可用于 Android 系统的补充设备标示,通常 Android 10 以上的国内主流设备都可以获取。具体 OAID 介绍以及最新覆盖厂商范围请详见 MSA官网

原始数据获取

使用 MSA 官网提供的 SDK。


加密方式

OAID 原值做 MD5 加密



IMEI

描述

  • Android版本 < 6.0,只需要 READ_PHONE_STATE 静态权限(安装 App 时即可获取到该权限),即可通过系统 API TelephonyManager#getDeviceId API 获取准确值;
  • 6.0 ≤ Android版本 ≤ 9.0,READ_PHONE_STATE 升级为动态权限,安装 App 时不会获得该权限,需要在 App 运行时用户在弹窗确认授权后才可以获取;
  • Android 版本 ≥ 10.0,设备不可变 ID 的隐私保护得到进一步升级,一般 App 无法获取到 IMEI 。

原始数据获取

TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
deviceId = tm.getDeviceId();

需要注意,android 版本 ≥ 10不获取


加密方式

对 IMEI 设备号转成小写,再进行 md5 编码,再小写,32 位 md5(imei.toLowerCase()).toLowerCase()


测试用例

原始 IMEI 码:868049039501257

加密之后:8d3ebd3654fb46a2832296669cf1b536


加密代码示例

bool GenerateMuid(const std::string& uni_id, const int32_t app_type, std::string* muid) 
{
if (muid == NULL || uni_id.empty()) {
return false;
}
muid->clear();
std::string tmp;
if (app_type == kAppTypeAndoirdImei) {
LatinToLower(uni_id, &tmp);
}
else if (app_type == kAppTypeiOSIfa) {
LatinToUpper(uni_id, &tmp);
}
else {
return false;
}
md5sum32l(tmp, muid); // 32bit lower
return true;
}


Android_id(不推荐)

描述

  • Android版本 < 8.0,不需要任何权限即可使用系统API(Settings.System.getString(getContentResolver(), Settings.System.ANDROID_ID))获取准确值
  • Android版本 ≥ 8.0,应用签名、用户(即系统上的用户账号)和设备的每个组合都具有唯一的 ANDROID_ID值,即使系统升级也不变。

原始数据获取

Settings.System.getString(context.getApplicationContext().getContentResolver(); 
Settings.System.ANDROID_ID);

加密方式

对 android_id 进行 md5 编码,再小写md5(androidId).toLowerCase()


测试用例

原值:f40c5cf5100f9be3

加密后:1995c8f7cec20632797539b68555752f



iOS 设备

CAID

获取 CAID

第一步:获取 CAID
方式一:通过腾讯广告 SDK 获取

备注:SDK 版本号 ≥ 2.0.11才支持该功能。

(1)在需要调用 SDK 方法获取CAID的文件中导入 SDK 头文件。

#import 'GDTAction.h'

(2)调用 SDK 方法获取 CAID 。

NSDictionary *caidDic = [GDTAction getCaid];
/*
* 以下内容为caidDic对应数据格式,里面的data值为设备的CAID:
* {
* "data": [
* { "value": "5ad74747f0e7eaadf159f4b9424e752f", "version": "20220111" },
* { "value": "3b4eedfb7e74c4517c95078d705dc2de", "version": "20230330" }
* ],
* "code": 0,
* "message": "OK"
* }
*/


方式二:通过中广协获取
  1. 登录中广协互联网广告技术实验室平台,填写对应的公司名称等相关信息,签署SDK/API服务协议协议并上传,完成初审;同步邮寄纸质版合同完成双方签署;
  2. 初审通过后可自行在控制台下载技术文档,完成付款后,广协会将密钥将发送至申请邮箱中。

热线电话:010-65924090/65924115

对于历史已经接入但是未付费的公司,广协已逐步暂停服务,如还希望接入 CAID,请尽快联系广协。


第二步:和腾讯广告侧联通,确认 CAID 一致性

进入<工具箱>-<效果分析>-<转化归因>,在【新建应用转化】旁进入【查看使用引导】弹框,点击右下角【校验CAID】。

user_id_01


联调页面需要客户填写原值的 IDFA,以及自己生成的设备的 CAID 原值,选择腾讯新闻客户端最新版本,点击信息流中的广告,并将点击广告的时间填入联调点击时间中。

user_id_02

点击校验后,等待约 10 分钟,给出联调结果。联调成功会有对应的显示,联调失败请点击右下角【反馈工单】。


第三步:获取 IDFV,并和 CAID 一起上报

IDFV 用于深度转化行为的归因和激活数据的去重,请按照以下方式获取 IDFV :

+(NSString *) idfv
{
return [[[UIDevice currentDevice] identifierForVendor] UUIDString];
}

第四步:在点击转发中配置互联网广告标识 CAID

情况1:使用<工具>-<转化归因>

请您在配置点击监测链接时,配置 CAID,目前该ID以宏的形式__CAID__ 来支持点击转发。

例如:

https://www.example.com/click/?click_id=__CLICK_ID__&click_time=__CLICK_TIME__&campaign_id=_CAMPAIGN_ID__&adgroup_id=__ADGROUP_ID__&ad_id=__AD_ID__&muid=__MUID__&ip=__IP__&user_agent=__USER_AGENT__&account_id=__ACCOUNT_ID__&promoted_object_type=__PROMOTED_OBJECT_TYPE__&device_os_type=__DEVICE_OS_TYPE__&callback=__CALLBACK__&qaid_caa=__CAID__

情况2:使用<工具>-<点击监测>

中广协 ID 对应的可选字段为“caid_caa(中广协QAID)”

user_id_03


__QAID_CAA__ 将填充 URLEncode 后的 JSON 数组,示例:URLEncode("[{\"qaid\":\"12345\",\"hash_qaid\":\"123456789012345\",\"version\":1005},{\"qaid\":\"67890\",\"hash_qaid\":\"6789523654780214556\",\"version\":1006 }]"。其中 qaid 即为中广协 ID,hash_qaid 为 CAID 原值 MD5 加密后的结果,version 即为腾讯版本号,支持两个版本同时下发,即最新版本和上一版本,如 1006 为最近版本,1005 为上一版本,这种情况下 1004 版本号将不再下发。

目前中广协版本,和腾讯版本号的映射关系如下。若自身仍在低于 1006 版本号进行归因的广告主,需要尽快升级到最新 1006 版本

监测方式腾讯版本号中广协版本号状态
中广协ID(CAA)100320201230不支持
中广协ID(CAA)100420211207不支持
中广协ID(CAA)100520220111支持
中广协ID(CAA)100620230330支持,最新版


第五步:使用 CAID 或者加密后的 CAID 进行归因

可以像使用 IDFA 一样,将从腾讯获取的 CAID 和所有转化数据进行匹配,得到腾讯媒体归因结果。在归因时注意,由于 CAID 有多个版本,所以每个版本的 CAID 均需要进行一次归因。同时,如还能获取到 IDFA,也建议您使用 IDFA 进行归因,归因优先级如下: CAID(新版本:__CAID__ )> CAID(旧版本:__QAID_CAA__)> IDFA > IP+UA


第六步:把 iOS 转化数据上报

需要您在现有 API 协议的 user_id 结构中,新增如下上报协议:

需要上报的设备信息字段名称类型说明用处是否必填
CAIDcaidstring作为唯一ID关联点击---
CAID 版本caid_versioninteger腾讯版本号:0-255 是保留字段用于版本升级、第三方算法支持在 CAID 填写时必填
IDFVidfvstring客户侧可获取的 idfv 原值用于激活次留去重和付费等深度行为的激活归因在 CAID 填写时选填

注:以上字段不限制只在激活时上报,iOS 内部所有转化行为均需要上报以上字段


注意

iOS16 以上通过 UIDevice 获取设备名称时,默认会返回 iPhone 而不再是“xx的iPhone”。广协侧已评估过此影响,不需要因此额外去申请权限获取真实的设备名称。这里接入方按照现有的接入方式使用即可,请勿额外申请权限,不影响 CAID 的设备识别度。如果自身业务需求要获取“ xx 的 iPhone”真实设备名,那在请求广协接口时,iOS16 设备也请替换为“iPhone”保持统一,后续我们会通过升级算法版本来优化。


上报代码示例

curl -X POST
-H "Authorization: Bearer "
-H "Content-Type: application/json;charset=utf8"
-d '{
"account_id" : 12235,
"actions" : [
{
"action_time" : 1481279071,
"user_id" : {
"gdt_openid" : "asdfghjkl",
"idfv" : "277D4B90-6699-424F-AFA8-9E7B12FA7CD6", // 本次新增: 客户侧获取的idfv
"caid_version" : 1004, // 本次新增: 如caid=1004为广协版本
"caid" : "a424aafe3c44b7e3618a95c0d55a56de" // 本次新增: caid内容
},
"action_type" : "ACTIVE",
"trace" : {
"click_id" : "asudor7tofuas9dfgr89ghejg"
}
},
]
}'


IDFA

描述

IDFA 是目前 iOS 系统主流的广告获取设备标识符方式,用户可开启、关闭,每次切换会改变为新的取值。 10 以下的版本关闭时也能取到唯一值 ≥ 10的 iOS 版本关闭时取到的值为00000000000 ;系统大版本升级(如11 到 12) 时,IDFA 也会发生变化。


原始数据获取

idfa = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];

加密方式

IDFA 设备号保持大写,进行 md5 编码,再小写,32位;md5(idfa.toUpperCase()).toLowerCase()


测试用例

原始 IDFA 码:1E2DFA89-496A-47FD-9941-DF1FC4E6484A

加密之后:40c7084b4845eebce9d07b8a18a055fc


加密代码示例

bool GenerateMuid(const std::string& uni_id, const int32_t app_type, std::string* muid) 
{
if (muid == NULL || uni_id.empty()) {
return false;
}
muid->clear();
std::string tmp;
if (app_type == kAppTypeAndoirdImei) {
LatinToLower(uni_id, &tmp);
}
else if (app_type == kAppTypeiOSIfa) {
LatinToUpper(uni_id, &tmp);
}
else {
return false;
}
md5sum32l(tmp, muid); // 32bit lower
return true;
}



该内容是否有帮助?