Skip to content

Commit 79af399

Browse files
Dan Cromermeta-codesync[bot]
authored andcommitted
Add touchpoint_id to AttributionData
Summary: # Problem AttributionData in the Java Business SDK does not include the touchpoint_id field, which is needed for advertisers to pass back the opaque TouchpointID received from Meta via CAPI AppendAttribution events. # Solution Add touchpoint_id as a string field to AttributionData with getter/setter/fluent builder, equals/hashCode/toString support, and test coverage. Reviewed By: HeyMultiverse Differential Revision: D96984230 fbshipit-source-id: 632ffeacb9ea1659c3a5aedc414ddcbb6b757258
1 parent 76c9c04 commit 79af399

3 files changed

Lines changed: 55 additions & 7 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file.
55

66
## Unreleased
77

8+
## v24.0.2
9+
### Added
10+
- Add touchpoint_id field to AttributionData
11+
812
## v24.0.1
913
### Added
1014
- Add additional AMM fields: attribution_method, decline_reason, auditing_token, linkage_key

src/main/java/com/facebook/ads/sdk/serverside/AttributionData.java

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ public class AttributionData {
6969
@SerializedName("linkage_key")
7070
private String linkageKey = null;
7171

72+
@SerializedName("touchpoint_id")
73+
private String touchpointId = null;
74+
7275
@SerializedName("attribution_setting")
7376
private AttributionSetting attributionSetting = null;
7477

@@ -97,12 +100,13 @@ public AttributionData() {
97100
* @param declineReason The decline reason for the attribution.
98101
* @param auditingToken The auditing token for the attribution.
99102
* @param linkageKey The linkage key for the attribution.
103+
* @param touchpointId Unique identifier for touchpoint events shared by Meta with advertisers.
100104
* @param attributionSetting The attribution setting with inactivity and reattribution window configuration.
101105
*/
102-
public AttributionData(String scope, Long visitTime, String adId, String adsetId, String campaignId,
106+
public AttributionData(String scope, Long visitTime, String adId, String adsetId, String campaignId,
103107
Float attributionShare, AttributionModelEnum attributionModel, Integer attributionWindow, Float attributionValue,
104108
String attributionSource, String touchpointType, Integer touchpointTs, AttributionMethodEnum attributionMethod,
105-
DeclineReasonEnum declineReason, String auditingToken, String linkageKey, AttributionSetting attributionSetting) {
109+
DeclineReasonEnum declineReason, String auditingToken, String linkageKey, String touchpointId, AttributionSetting attributionSetting) {
106110
this.scope = scope;
107111
this.visitTime = visitTime;
108112
this.adId = adId;
@@ -119,6 +123,7 @@ public AttributionData(String scope, Long visitTime, String adId, String adsetId
119123
this.declineReason = declineReason;
120124
this.auditingToken = auditingToken;
121125
this.linkageKey = linkageKey;
126+
this.touchpointId = touchpointId;
122127
this.attributionSetting = attributionSetting;
123128
}
124129

@@ -586,9 +591,38 @@ public void setLinkageKey(String linkageKey) {
586591
this.linkageKey = linkageKey;
587592
}
588593

594+
/**
595+
* Set touchpointId
596+
*
597+
* @param touchpointId Unique identifier for touchpoint events shared by Meta with advertisers.
598+
* @return AttributionData
599+
*/
600+
public AttributionData touchpointId(String touchpointId) {
601+
this.touchpointId = touchpointId;
602+
return this;
603+
}
604+
605+
/**
606+
* Get touchpointId
607+
*
608+
* @return touchpointId
609+
*/
610+
public String getTouchpointId() {
611+
return touchpointId;
612+
}
613+
614+
/**
615+
* Set touchpointId
616+
*
617+
* @param touchpointId Unique identifier for touchpoint events shared by Meta with advertisers.
618+
*/
619+
public void setTouchpointId(String touchpointId) {
620+
this.touchpointId = touchpointId;
621+
}
622+
589623
/**
590624
* Set attributionSetting
591-
*
625+
*
592626
* @param attributionSetting The attribution setting with inactivity and reattribution window configuration.
593627
* @return AttributionData
594628
*/
@@ -638,12 +672,13 @@ public boolean equals(Object o) {
638672
&& Objects.equals(this.declineReason, attributionData.declineReason)
639673
&& Objects.equals(this.auditingToken, attributionData.auditingToken)
640674
&& Objects.equals(this.linkageKey, attributionData.linkageKey)
675+
&& Objects.equals(this.touchpointId, attributionData.touchpointId)
641676
&& Objects.equals(this.attributionSetting, attributionData.attributionSetting);
642677
}
643678

644679
@Override
645680
public int hashCode() {
646-
return Objects.hash(scope, visitTime, adId, adsetId, campaignId, attributionShare, attributionModel, attributionWindow, attributionValue, attributionSource, touchpointType, touchpointTs, attributionMethod, declineReason, auditingToken, linkageKey, attributionSetting);
681+
return Objects.hash(scope, visitTime, adId, adsetId, campaignId, attributionShare, attributionModel, attributionWindow, attributionValue, attributionSource, touchpointType, touchpointTs, attributionMethod, declineReason, auditingToken, linkageKey, touchpointId, attributionSetting);
647682
}
648683

649684
@Override
@@ -666,6 +701,7 @@ public String toString() {
666701
sb.append(" declineReason: ").append(toIndentedString(declineReason)).append("\n");
667702
sb.append(" auditingToken: ").append(toIndentedString(auditingToken)).append("\n");
668703
sb.append(" linkageKey: ").append(toIndentedString(linkageKey)).append("\n");
704+
sb.append(" touchpointId: ").append(toIndentedString(touchpointId)).append("\n");
669705
sb.append(" attributionSetting: ").append(toIndentedString(attributionSetting)).append("\n");
670706
sb.append("}");
671707
return sb.toString();

src/test/java/com/facebook/ads/sdk/serverside/AttributionDataTest.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,9 @@ public void TestAttributionDataBuilderAndGetters() {
4242
DeclineReasonEnum declineReason = DeclineReasonEnum.LOOKBACK;
4343
String auditingToken = "token123";
4444
String linkageKey = "key123";
45+
String touchpointId = "tp_test_touchpoint_id_123";
4546
AttributionSetting attributionSetting = new AttributionSetting(24, 48);
46-
47+
4748
attributionData
4849
.scope(scope)
4950
.adId(adId)
@@ -61,6 +62,7 @@ public void TestAttributionDataBuilderAndGetters() {
6162
.declineReason(declineReason)
6263
.auditingToken(auditingToken)
6364
.linkageKey(linkageKey)
65+
.touchpointId(touchpointId)
6466
.attributionSetting(attributionSetting);
6567

6668
assertEquals(attributionData.getScope(), scope);
@@ -79,6 +81,7 @@ public void TestAttributionDataBuilderAndGetters() {
7981
assertEquals(attributionData.getDeclineReason(), declineReason);
8082
assertEquals(attributionData.getAuditingToken(), auditingToken);
8183
assertEquals(attributionData.getLinkageKey(), linkageKey);
84+
assertEquals(attributionData.getTouchpointId(), touchpointId);
8285
assertEquals(attributionData.getAttributionSetting(), attributionSetting);
8386
assertEquals((int)attributionData.getAttributionSetting().getInactivityWindowHours(), 24);
8487
assertEquals((int)attributionData.getAttributionSetting().getReattributionWindowHours(), 48);
@@ -104,8 +107,9 @@ public void TestWhenInstancesAreEqual() {
104107
DeclineReasonEnum declineReason = DeclineReasonEnum.LOOKBACK;
105108
String auditingToken = "token123";
106109
String linkageKey = "key123";
110+
String touchpointId = "tp_test_touchpoint_id_123";
107111
AttributionSetting attributionSetting = new AttributionSetting(24, 48);
108-
112+
109113
attributionData1
110114
.scope(scope)
111115
.adId(adId)
@@ -123,6 +127,7 @@ public void TestWhenInstancesAreEqual() {
123127
.declineReason(declineReason)
124128
.auditingToken(auditingToken)
125129
.linkageKey(linkageKey)
130+
.touchpointId(touchpointId)
126131
.attributionSetting(attributionSetting);
127132

128133
attributionData2
@@ -142,6 +147,7 @@ public void TestWhenInstancesAreEqual() {
142147
.declineReason(declineReason)
143148
.auditingToken(auditingToken)
144149
.linkageKey(linkageKey)
150+
.touchpointId(touchpointId)
145151
.attributionSetting(attributionSetting);
146152

147153
assertEquals(attributionData1, attributionData2);
@@ -170,7 +176,7 @@ public void TestWhenInstancesAreNotEqual() {
170176
AttributionSetting attributionSetting1 = new AttributionSetting(24, 48);
171177
AttributionSetting attributionSetting2 = new AttributionSetting(24, 48);
172178

173-
// set different attribution windown to test
179+
// set different attribution window to test
174180
attributionData1
175181
.scope(scope)
176182
.adId(adId)
@@ -188,6 +194,7 @@ public void TestWhenInstancesAreNotEqual() {
188194
.declineReason(declineReason)
189195
.auditingToken(auditingToken)
190196
.linkageKey(linkageKey)
197+
.touchpointId("tp_test_touchpoint_id_123")
191198
.attributionSetting(attributionSetting1);
192199

193200
attributionData2
@@ -207,6 +214,7 @@ public void TestWhenInstancesAreNotEqual() {
207214
.declineReason(declineReason)
208215
.auditingToken(auditingToken)
209216
.linkageKey(linkageKey)
217+
.touchpointId("tp_test_touchpoint_id_456")
210218
.attributionSetting(attributionSetting2);
211219

212220
assertNotEquals(attributionData1, attributionData2);

0 commit comments

Comments
 (0)