深入解析Google Referrer:如何获取与解密Facebook广告数据
Google Referrer与Facebook广告数据的关系
Google Referrer是Android平台上用于追踪广告效果的重要工具。它通过一个字符串在用户点击广告时发送到Google Play Store,包含了关键的归因信息。与iOS不同,Android的这一特性为广告主提供了独特的优势,尤其是在Facebook逐步淘汰其高级移动测量(AMM)计划后。
获取Google Referrer数据的步骤
1. 实现ContentProvider API
首先,需要通过ContentProvider API从Facebook和Instagram应用中获取推荐归因数据。建议在应用首次启动时获取这些数据。以下是实现该功能的代码示例:
```java
Cursor c = null;
try {
String[] projection = {"install_referrer", "is_ct", "actual_timestamp"};
Uri providerUri = null;
if (context.getPackageManager().resolveContentProvider("com.facebook.katana.provider.InstallReferrerProvider", 0) != null) {
providerUri = Uri.parse("content://com.facebook.katana.provider.InstallReferrerProvider/" + FB_APP_ID);
} else if (context.getPackageManager().resolveContentProvider("com.instagram.contentprovider.InstallReferrerProvider", 0) != null) {
providerUri = Uri.parse("content://com.instagram.contentprovider.InstallReferrerProvider/" + FB_APP_ID);
} else if (context.getPackageManager().resolveContentProvider("com.facebook.lite.provider.InstallReferrerProvider", 0) != null) {
providerUri = Uri.parse("content://com.facebook.lite.provider.InstallReferrerProvider/" + FB_APP_ID);
} else {
return null;
}
c = context.getContentResolver().query(providerUri, projection, null, null, null);
if (c == null || !c.moveToFirst()) {
return null;
}
int installReferrerIndex = c.getColumnIndex("install_referrer");
int timestampIndex = c.getColumnIndex("actual_timestamp");
int isCTIndex = c.getColumnIndex("is_ct");
String installReferrer = c.getString(installReferrerIndex);
long actualTimestamp = c.getLong(timestampIndex);
int isCT = c.getInt(isCTIndex);
} catch (Exception e) {
return null;
} finally {
if (c != null) {
c.close();
}
}
```
2. 获取解密密钥
在应用的仪表板中,找到“基本设置”下的“Android”部分,复制“安装引荐来源解密密钥”,用于后续的解密步骤。
3. 解密数据
获取到的数据是经过AES-GCM 256位对称密钥加密的,使用LibSodium标准开源加密框架进行解密。以下是一个PHP示例:
```php
$key = "2575590594a9cd809e5bfacf397f8c1ac730dbc38a3e137ecd1ab66591c8c3c9";
$cipher = "afe56cf6228c6ea8c79da49186e718e92a579824596ae1d0d4d20d7793dca797bd4034ccf467bfae5c79a3981e7a2968c41949237e2b2db678c1c3d39c9ae564c5cafd52f2b77a3dc77bf1bae063114d0283b97417487207735da31ddc1531d5645a9c3e602c195a0ebf69c272aa5fda3a2d781cb47e117310164715a54c7a5a032740584e2789a7b4e596034c16425139a77e507c492b629c848573c714a03a2e7d25b9459b95842332b460f3682d19c35dbc7d53e3a51e0497ff6a6cbb367e760debc4194ae097498108df7b95eac2fa9bac4320077b510be3b7b823248bfe02ae501d9fe4ba179c7de6733c92bf89d523df9e31238ef497b9db719484cbab7531dbf6c5ea5a8087f95d59f5e4f89050e0f1dc03e464168ad76a64cca64b79";
$nonce = "b7203c6a6fb633d16e9cf5c1";
$result = PHP\sodium_crypto_aead_aes256gcm_decrypt(PHP\sodium_hex2bin($cipher), '', PHP\sodium_hex2bin($nonce), PHP\sodium_hex2bin($key));
echo $result;
```
解密后的数据结构
解密后的数据包含以下关键信息:
-
ad_id
:广告ID -
adgroup_id
:广告组ID -
adgroup_name
:广告组名称 -
campaign_id
:广告系列ID -
campaign_name
:广告系列名称 -
campaign_group_id
:广告系列组ID -
campaign_group_name
:广告系列组名称 -
account_id
:账户ID -
ad_objective_name
:广告目标名称
结论
通过Google Referrer API获取和解密Facebook广告数据,广告主可以更准确地追踪广告效果,优化广告策略。尽管Facebook逐步淘汰了AMM计划,但Google Referrer提供了一个有效的替代方案,帮助广告主继续获取关键的归因数据。