Skip to content

Commit f756576

Browse files
hongj-srcmeta-codesync[bot]
authored andcommitted
Provide breakdown to differentiate net new and modified new appendix
Summary: Add breakdown to differentiate net new 0 -> 1 event and modified event. - Change the usage of internal API AppendixProvider::getAppendix() input from bool to hex. Differential Revision: D91275289 fbshipit-source-id: 510ed68b5af4fd26adfba8471c860f0e92d30679
1 parent 27c3822 commit f756576

8 files changed

Lines changed: 222 additions & 126 deletions

File tree

php/capi-param-builder/src/ParamBuilder.php

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@ final class ParamBuilder
2121
private $domain_list;
2222

2323
// appendix info
24-
private $appendix_new;
25-
private $appendix_normal;
24+
private $appendix_net_new;
25+
private $appendix_modified_new;
26+
private $appendix_general_new;
27+
private $appendix_no_change;
2628

2729
// captured values
2830
private $fbc = null;
@@ -45,8 +47,14 @@ public function __construct(
4547
new FbcParamConfig(FBCLID, '', CLICK_ID_STRING)
4648
);
4749

48-
$this->appendix_new = AppendixProvider::getAppendix(true);
49-
$this->appendix_normal = AppendixProvider::getAppendix(false);
50+
$this->appendix_general_new =
51+
AppendixProvider::getAppendix(APPENDIX_GENERAL_NEW);
52+
$this->appendix_net_new =
53+
AppendixProvider::getAppendix(APPENDIX_NET_NEW);
54+
$this->appendix_modified_new =
55+
AppendixProvider::getAppendix(APPENDIX_MODIFIED_NEW);
56+
$this->appendix_no_change =
57+
AppendixProvider::getAppendix(APPENDIX_NO_CHANGE);
5058

5159
if ($params instanceof ETLDPlus1Resolver) {
5260
$this->etld_plus1_resolver = $params;
@@ -101,7 +109,7 @@ private function preProcess($cookie, $cookie_name, $host)
101109
$contains_extra_dot = empty($slices[MIN_PAYLOAD_SPLIT_LENGTH - 1]);
102110
$updated_cookie = $cookie_value
103111
. ($contains_extra_dot ? '' : '.')
104-
. $this->appendix_normal;
112+
. $this->appendix_no_change;
105113
}
106114

107115
// Cookie exist, contains language token. Validate it
@@ -239,11 +247,14 @@ public function processRequest(
239247
if (ParamBuilder::shouldUpdateFbc($new_fbc_payload)) {
240248
$this->computeETLDPlus1ForHost($host);
241249
$drop_ts = round(microtime(true) * 1000);
250+
$is_net_new = empty($this->fbc);
242251
$this->fbc = FB_PREFIX .
243252
'.' . $this->sub_domain_index .
244253
'.' . $drop_ts .
245254
'.' . $new_fbc_payload .
246-
'.' . $this->appendix_new;
255+
'.' . ($is_net_new
256+
? $this->appendix_net_new
257+
: $this->appendix_modified_new);
247258
$this->cookies_to_set[FBC_NAME] = new CookieSettings(
248259
FBC_NAME,
249260
$this->fbc,
@@ -261,7 +272,7 @@ public function processRequest(
261272
'.' . $this->sub_domain_index .
262273
'.' . $drop_ts .
263274
'.' . $new_fbp_payload .
264-
'.' . $this->appendix_new;
275+
'.' . $this->appendix_net_new;
265276
$this->cookies_to_set[FBP_NAME] = new CookieSettings(
266277
FBP_NAME,
267278
$this->fbp,
@@ -549,6 +560,10 @@ private static function getClientIp(
549560
$client_ip_from_request
550561
);
551562

563+
$client_ip_appendix = $client_ip_from_request_is_public_ip
564+
? AppendixProvider::getAppendix(APPENDIX_MODIFIED_NEW)
565+
: AppendixProvider::getAppendix(APPENDIX_NET_NEW);
566+
552567
// Prioritize: IPv6 over IPv4, public over private,
553568
// and cookie-sourced IPs over request-sourced IPs.
554569
if (
@@ -559,13 +574,14 @@ private static function getClientIp(
559574
(
560575
$client_ip_language_token_from_cookie
561576
? $client_ip_language_token_from_cookie
562-
: AppendixProvider::getAppendix(true)
577+
: $client_ip_appendix
563578
);
564579
} else if (
565580
$client_ip_from_request_is_IPv6 &&
566581
$client_ip_from_request_is_public_ip
567582
) {
568-
$best_client_ip = $client_ip_from_request . '.' . AppendixProvider::getAppendix(false);
583+
$best_client_ip = $client_ip_from_request . '.' .
584+
AppendixProvider::getAppendix(APPENDIX_NO_CHANGE);
569585
} else if (
570586
$client_ip_from_cookie_is_IPv4 &&
571587
$client_ip_from_cookie_is_public_ip
@@ -574,13 +590,14 @@ private static function getClientIp(
574590
(
575591
$client_ip_language_token_from_cookie
576592
? $client_ip_language_token_from_cookie
577-
: AppendixProvider::getAppendix(true)
593+
: $client_ip_appendix
578594
);
579595
} else if (
580596
$client_ip_from_request_is_IPv4 &&
581597
$client_ip_from_request_is_public_ip
582598
) {
583-
$best_client_ip = $client_ip_from_request . '.' . AppendixProvider::getAppendix(false);
599+
$best_client_ip = $client_ip_from_request . '.' .
600+
AppendixProvider::getAppendix(APPENDIX_NO_CHANGE);
584601
}
585602

586603
return $best_client_ip;

php/capi-param-builder/src/model/Constants.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,7 @@ public static function values()
5555
define('FBCLID', 'fbclid');
5656
define('CLICK_ID_STRING', 'click_id');
5757
define('FB_PREFIX', 'fb');
58+
define('APPENDIX_GENERAL_NEW', 0x01);
59+
define('APPENDIX_NET_NEW', 0x02);
60+
define('APPENDIX_MODIFIED_NEW', 0x03);
61+
define('APPENDIX_NO_CHANGE', 0x00);

php/capi-param-builder/src/piiUtil/PIIUtils.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public static function getNormalizedAndHashedPII($piiValue, $dataType)
7474

7575
if (SharedUtils::looksLikeHashed(trim($piiValue))) {
7676
return mb_strtolower(trim($piiValue)) . '.' .
77-
AppendixProvider::getAppendix(false);
77+
AppendixProvider::getAppendix(APPENDIX_NO_CHANGE);
7878
} else if (
7979
PIIUtils::isAlreadyNormalizedAndHashedByParamBuilder(trim($piiValue))
8080
) {
@@ -85,7 +85,7 @@ public static function getNormalizedAndHashedPII($piiValue, $dataType)
8585
return null;
8686
}
8787
return hash('sha256', $normalizedPII) . '.' .
88-
AppendixProvider::getAppendix(true);
88+
AppendixProvider::getAppendix(APPENDIX_NET_NEW);
8989
}
9090
}
9191

php/capi-param-builder/src/util/AppendixProvider.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
require_once __DIR__ . '/../model/Constants.php';
1212

1313
class AppendixProvider {
14-
public static function getAppendix($is_new) {
14+
public static function getAppendix($appendix_type) {
1515
try {
1616
$sdk_version = VersionProvider::getVersion();
1717

@@ -26,7 +26,10 @@ public static function getAppendix($is_new) {
2626
$patch = intval($version_parts[2]);
2727

2828
// Create byte indicating if it's new (0x01) or not (0x00)
29-
$is_new_byte = $is_new ? 0x01 : 0x00;
29+
$is_new_byte = in_array(
30+
$appendix_type,
31+
[APPENDIX_NET_NEW, APPENDIX_GENERAL_NEW, APPENDIX_MODIFIED_NEW]
32+
) ? $appendix_type : 0x00;
3033

3134
// Create byte array:
3235
// [DEFAULT_FORMAT, LANGUAGE_TOKEN_INDEX, is_new_byte, major, minor,

php/capi-param-builder/tests/AppendixProviderTest.php

Lines changed: 58 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use FacebookAds\AppendixProvider;
1111

1212
require_once __DIR__ . '/../src/util/AppendixProvider.php';
13+
require_once __DIR__ . '/../src/model/Constants.php';
1314

1415
final class AppendixProviderTest extends TestCase
1516
{
@@ -61,22 +62,71 @@ private function removeComposerJson()
6162
public function testGetAppendixWithValidAppendix()
6263
{
6364
$this->mockSdkVersion('1.0.1');
64-
$this->assertEquals(AppendixProvider::getAppendix(true), "AQEBAQAB");
65-
$this->assertEquals(AppendixProvider::getAppendix(false), "AQEAAQAB");
65+
$this->assertEquals(
66+
"AQEBAQAB",
67+
AppendixProvider::getAppendix(APPENDIX_GENERAL_NEW)
68+
);
69+
$this->assertEquals(
70+
"AQECAQAB",
71+
AppendixProvider::getAppendix(APPENDIX_NET_NEW)
72+
);
73+
$this->assertEquals(
74+
"AQEDAQAB",
75+
AppendixProvider::getAppendix(APPENDIX_MODIFIED_NEW)
76+
);
77+
$this->assertEquals(
78+
"AQEAAQAB",
79+
AppendixProvider::getAppendix(APPENDIX_NO_CHANGE)
80+
);
81+
// Invalid appendix type
82+
$this->assertEquals(
83+
"AQEAAQAB",
84+
AppendixProvider::getAppendix(0x99)
85+
);
6686

6787
$this->mockSdkVersion('1.15.24');
68-
$this->assertEquals(AppendixProvider::getAppendix(true), "AQEBAQ8Y");
69-
$this->assertEquals(AppendixProvider::getAppendix(false), "AQEAAQ8Y");
88+
$this->assertEquals(
89+
"AQEBAQ8Y",
90+
AppendixProvider::getAppendix(APPENDIX_GENERAL_NEW)
91+
);
92+
$this->assertEquals(
93+
"AQECAQ8Y",
94+
AppendixProvider::getAppendix(APPENDIX_NET_NEW)
95+
);
96+
$this->assertEquals(
97+
"AQEDAQ8Y",
98+
AppendixProvider::getAppendix(APPENDIX_MODIFIED_NEW)
99+
);
100+
$this->assertEquals(
101+
"AQEAAQ8Y",
102+
AppendixProvider::getAppendix(APPENDIX_NO_CHANGE)
103+
);
104+
$this->assertEquals(
105+
"AQEAAQ8Y",
106+
AppendixProvider::getAppendix(0x99)
107+
);
70108
}
71109

72110
public function testGetAppendixWithInValidAppendix()
73111
{
74112
$this->mockSdkVersion('test123');
75-
$this->assertEquals(AppendixProvider::getAppendix(true), "AQ");
76-
$this->assertEquals(AppendixProvider::getAppendix(false), "AQ");
113+
$this->assertEquals(
114+
"AQ",
115+
AppendixProvider::getAppendix(APPENDIX_GENERAL_NEW)
116+
);
117+
$this->assertEquals(
118+
"AQ",
119+
AppendixProvider::getAppendix(APPENDIX_NO_CHANGE)
120+
);
77121

78122
$this->mockSdkVersion('!@#.%%.^%');
79-
$this->assertEquals(AppendixProvider::getAppendix(true), "AQ");
80-
$this->assertEquals(AppendixProvider::getAppendix(false), "AQ");
123+
$this->assertEquals(
124+
"AQ",
125+
AppendixProvider::getAppendix(APPENDIX_GENERAL_NEW)
126+
);
127+
$this->assertEquals(
128+
"AQ",
129+
AppendixProvider::getAppendix(APPENDIX_NO_CHANGE)
130+
);
81131
}
82132
}

0 commit comments

Comments
 (0)