Skip to content

Commit b273b65

Browse files
Changes for release v19_1. (#827)
1 parent 8717589 commit b273b65

146 files changed

Lines changed: 30174 additions & 3497 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
36.1.0 - 2025-04-16
2+
-------------------
3+
- Add support and examples for Google Ads API v19.1.
4+
- Update to version 3.45.1 of `google-cloud-shared-dependencies`.
5+
- Updated remarketing/UploadEnhancedConversionForLeads to show how to handle
6+
session attributes
7+
18
36.0.0 - 2025-02-27
29
-------------------
310
- Add support and examples for Google Ads API v19.

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ This project hosts the Java client library for the Google Ads API.
1818
<dependency>
1919
<groupId>com.google.api-ads</groupId>
2020
<artifactId>google-ads</artifactId>
21-
<version>36.0.0</version>
21+
<version>36.1.0</version>
2222
</dependency>
2323

2424
## Gradle dependency
2525

26-
implementation 'com.google.api-ads:google-ads:36.0.0'
26+
implementation 'com.google.api-ads:google-ads:36.1.0'
2727

2828
## Documentation
2929

buildSrc/src/main/groovy/com.google.api-ads.java-conventions.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ dependencies {
189189
api 'io.grpc:grpc-protobuf'
190190
api 'com.google.auth:google-auth-library-oauth2-http'
191191
api 'com.google.auth:google-auth-library-credentials'
192-
api platform('com.google.cloud:google-cloud-shared-dependencies:3.44.0')
192+
api platform('com.google.cloud:google-cloud-shared-dependencies:3.45.1')
193193
implementation 'com.google.guava:guava'
194194
implementation 'com.google.auto.service:auto-service:1.0.1'
195195
implementation 'javax.annotation:javax.annotation-api'

google-ads-examples/src/main/java/com/google/ads/googleads/examples/remarketing/UploadEnhancedConversionsForLeads.java

Lines changed: 71 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,23 @@
2727
import com.google.ads.googleads.v19.services.ClickConversion;
2828
import com.google.ads.googleads.v19.services.ClickConversionResult;
2929
import com.google.ads.googleads.v19.services.ConversionUploadServiceClient;
30+
import com.google.ads.googleads.v19.services.SessionAttributeKeyValuePair;
31+
import com.google.ads.googleads.v19.services.SessionAttributesKeyValuePairs;
3032
import com.google.ads.googleads.v19.services.UploadClickConversionsRequest;
3133
import com.google.ads.googleads.v19.services.UploadClickConversionsResponse;
3234
import com.google.ads.googleads.v19.utils.ResourceNames;
3335
import com.google.common.collect.ImmutableMap;
36+
import com.google.protobuf.ByteString;
3437
import java.io.FileNotFoundException;
3538
import java.io.IOException;
3639
import java.io.UnsupportedEncodingException;
3740
import java.security.MessageDigest;
3841
import java.security.NoSuchAlgorithmException;
3942
import java.util.ArrayList;
43+
import java.util.Arrays;
4044
import java.util.List;
4145
import java.util.Map;
46+
import java.util.stream.Collectors;
4247

4348
/**
4449
* Uploads an enhanced conversion for leads by uploading a ClickConversion with hashed, first-party
@@ -47,6 +52,7 @@
4752
* the lead.
4853
*/
4954
public class UploadEnhancedConversionsForLeads {
55+
5056
private static class UploadEnhancedConversionsForLeadsParams extends CodeSampleParams {
5157

5258
@Parameter(names = ArgumentNames.CUSTOMER_ID, required = true)
@@ -75,6 +81,24 @@ private static class UploadEnhancedConversionsForLeadsParams extends CodeSampleP
7581

7682
@Parameter(names = ArgumentNames.AD_USER_DATA_CONSENT, required = false)
7783
private ConsentStatus adUserDataConsent;
84+
85+
@Parameter(
86+
names = ArgumentNames.SESSION_ATTRIBUTES_ENCODED,
87+
required = false,
88+
description =
89+
"A session attributes token. Only one of sessionAttributesEncoded or sessionAttributesMap"
90+
+ " should be passed.")
91+
private String sessionAttributesEncoded;
92+
93+
@Parameter(
94+
names = ArgumentNames.SESSION_ATTRIBUTES_MAP,
95+
required = false,
96+
description =
97+
"A "
98+
+ "space-delimited list of session attribute key value pairs. Each pair should be "
99+
+ "separated by an equal sign, for example: 'gad_campaignid=12345 gad_source=1'. Only "
100+
+ "one of sessionAttributesEncoded or sessionAttributesMap should be passed.")
101+
private String sessionAttributesMap;
78102
}
79103

80104
public static void main(String[] args)
@@ -94,8 +118,14 @@ public static void main(String[] args)
94118
params.gclid = null;
95119
// Optional: specify the ad user data consent for the click.
96120
params.adUserDataConsent = null;
121+
params.sessionAttributesEncoded = null;
122+
params.sessionAttributesMap = null;
97123
}
98124

125+
if ((params.sessionAttributesEncoded != null) && (params.sessionAttributesMap != null)) {
126+
throw new IllegalArgumentException(
127+
"Only one of sessionAttributesEncoded or " + "sessionAttributesMap can be set.");
128+
}
99129
GoogleAdsClient googleAdsClient = null;
100130
try {
101131
googleAdsClient = GoogleAdsClient.newBuilder().fromPropertiesFile().build();
@@ -118,7 +148,9 @@ public static void main(String[] args)
118148
params.conversionValue,
119149
params.orderId,
120150
params.gclid,
121-
params.adUserDataConsent);
151+
params.adUserDataConsent,
152+
params.sessionAttributesEncoded,
153+
params.sessionAttributesMap);
122154
} catch (GoogleAdsException gae) {
123155
// GoogleAdsException is the base class for most exceptions thrown by an API request.
124156
// Instances of this exception have a message and a GoogleAdsFailure that contains a
@@ -155,7 +187,9 @@ private void runExample(
155187
Double conversionValue,
156188
String orderId,
157189
String gclid,
158-
ConsentStatus adUserDataConsent)
190+
ConsentStatus adUserDataConsent,
191+
String sessionAttributesEncoded,
192+
String sessionAttributesMap)
159193
throws UnsupportedEncodingException, NoSuchAlgorithmException {
160194
// [START add_user_identifiers]
161195
// Creates an empty builder for constructing the click conversion.
@@ -204,6 +238,12 @@ private void runExample(
204238
if (adUserDataConsent != null) {
205239
rawRecordBuilder.put("adUserDataConsent", adUserDataConsent.name());
206240
}
241+
if (sessionAttributesEncoded != null) {
242+
rawRecordBuilder.put("sessionAttributesEncoded", sessionAttributesEncoded);
243+
}
244+
if (sessionAttributesMap != null) {
245+
rawRecordBuilder.put("sessionAttributesMap", sessionAttributesMap);
246+
}
207247

208248
// Builds the map representing the record.
209249
Map<String, String> rawRecord = rawRecordBuilder.build();
@@ -266,6 +306,35 @@ private void runExample(
266306
.setAdUserData(ConsentStatus.valueOf(rawRecord.get("adUserDataConsent"))));
267307
}
268308

309+
// Sets one of the sessionAttributesEncoded or sessionAttributesKeyValuePairs if either is
310+
// provided.
311+
if (rawRecord.containsKey("sessionAttributesEncoded")) {
312+
clickConversionBuilder.setSessionAttributesEncoded(
313+
ByteString.copyFromUtf8(rawRecord.get("sessionAttributesEncoded")));
314+
} else if (rawRecord.containsKey("sessionAttributesMap")) {
315+
List<String> pairings =
316+
Arrays.stream(rawRecord.get("sessionAttributesMap").split(" "))
317+
.map(String::trim)
318+
.collect(Collectors.toList());
319+
SessionAttributesKeyValuePairs.Builder sessionAttributePairs =
320+
SessionAttributesKeyValuePairs.newBuilder();
321+
for (String pair : pairings) {
322+
String[] parts = pair.split("=", 2);
323+
if (parts.length != 2) {
324+
throw new IllegalArgumentException(
325+
"Failed to read the sessionAttributesMap. SessionAttributesMap must use a "
326+
+ "space-delimited list of session attribute key value pairs. Each pair should be"
327+
+ " separated by an equal sign, for example: 'gad_campaignid=12345 gad_source=1'");
328+
}
329+
sessionAttributePairs.addKeyValuePairs(
330+
SessionAttributeKeyValuePair.newBuilder()
331+
.setSessionAttributeKey(parts[0])
332+
.setSessionAttributeValue(parts[1])
333+
.build());
334+
}
335+
clickConversionBuilder.setSessionAttributesKeyValuePairs(sessionAttributePairs.build());
336+
}
337+
269338
// Calls build to build the conversion.
270339
ClickConversion clickConversion = clickConversionBuilder.build();
271340
// [END add_conversion_details]

google-ads-examples/src/main/java/com/google/ads/googleads/examples/utils/ArgumentNames.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ public final class ArgumentNames {
9696
public static final String RESTATEMENT_VALUE = "--restatementValue";
9797
public static final String RUN_JOB = "--runJob";
9898
public static final String SALES_COUNTRY = "--salesCountry";
99+
public static final String SESSION_ATTRIBUTES_ENCODED = "--sessionAttributesEncoded";
100+
public static final String SESSION_ATTRIBUTES_MAP = "--sessionAttributesMap";
99101
public static final String START_DATE_TIME = "--startDateTime";
100102
public static final String THINGS_TO_DO_CENTER_ACCOUNT_ID = "--thingsToDoCenterAccountId";
101103
public static final String USER_AGENT = "--userAgent";

0 commit comments

Comments
 (0)