diff --git a/.idea/modules/sdk-java/countly-sdk-java.sdk-java.iml b/.idea/modules/sdk-java/countly-sdk-java.sdk-java.iml index cd854dd0..3a892994 100644 --- a/.idea/modules/sdk-java/countly-sdk-java.sdk-java.iml +++ b/.idea/modules/sdk-java/countly-sdk-java.sdk-java.iml @@ -1,5 +1,5 @@ - + diff --git a/.idea/modules/sdk-java/countly-sdk-java.sdk-java.main.iml b/.idea/modules/sdk-java/countly-sdk-java.sdk-java.main.iml index e0acadea..cad25711 100644 --- a/.idea/modules/sdk-java/countly-sdk-java.sdk-java.main.iml +++ b/.idea/modules/sdk-java/countly-sdk-java.sdk-java.main.iml @@ -1,5 +1,5 @@ - + diff --git a/.idea/modules/sdk-java/countly-sdk-java.sdk-java.test.iml b/.idea/modules/sdk-java/countly-sdk-java.sdk-java.test.iml index fef2e76f..353a4878 100644 --- a/.idea/modules/sdk-java/countly-sdk-java.sdk-java.test.iml +++ b/.idea/modules/sdk-java/countly-sdk-java.sdk-java.test.iml @@ -1,5 +1,5 @@ - + diff --git a/CHANGELOG.md b/CHANGELOG.md index af507a36..1b98b56a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 24.1.2 + +* Added e new configuration function "addCustomNetworkRequestHeaders(Map)" to add custom request headers to each request. + ## 24.1.1 * Added a new function "setID(newDeviceId)" for managing device id changes according to the device ID Type. diff --git a/app-java/src/main/java/ly/count/java/demo/Example.java b/app-java/src/main/java/ly/count/java/demo/Example.java index 831b8787..6516a6f0 100755 --- a/app-java/src/main/java/ly/count/java/demo/Example.java +++ b/app-java/src/main/java/ly/count/java/demo/Example.java @@ -210,9 +210,14 @@ public static void main(String[] args) throws Exception { } } + Map customNetworkRequestHeaders = new ConcurrentHashMap<>(); + customNetworkRequestHeaders.put("X-Countly-Example", "true"); + customNetworkRequestHeaders.put("X-Countly-Example-Version", "1.0"); + Config config = new Config(COUNTLY_SERVER_URL, COUNTLY_APP_KEY, sdkStorageRootDirectory) .setLoggingLevel(Config.LoggingLevel.DEBUG) .setDeviceIdStrategy(Config.DeviceIdStrategy.UUID) + .addCustomNetworkRequestHeaders(customNetworkRequestHeaders) .enableFeatures(Config.Feature.Events, Config.Feature.Sessions, Config.Feature.CrashReporting, Config.Feature.Views, Config.Feature.UserProfiles, Config.Feature.Location, Config.Feature.Feedback) .setRequiresConsent(true) //.enableParameterTamperingProtection("test-salt-checksum") diff --git a/build.gradle b/build.gradle index 836bacca..ba448809 100644 --- a/build.gradle +++ b/build.gradle @@ -20,7 +20,7 @@ buildscript { } allprojects { - ext.CLY_VERSION = "24.1.1" + ext.CLY_VERSION = "24.1.2" ext.POWERMOCK_VERSION = "1.7.4" tasks.withType(Javadoc) { diff --git a/gradle.properties b/gradle.properties index ea49db4c..72dc63d0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ # org.gradle.parallel=true # RELEASE FIELD SECTION -VERSION_NAME=24.1.1 +VERSION_NAME=24.1.2 GROUP=ly.count.sdk POM_URL=https://github.com/Countly/countly-sdk-java diff --git a/sdk-java/src/main/java/ly/count/sdk/java/Config.java b/sdk-java/src/main/java/ly/count/sdk/java/Config.java index c29d6037..e94ef032 100644 --- a/sdk-java/src/main/java/ly/count/sdk/java/Config.java +++ b/sdk-java/src/main/java/ly/count/sdk/java/Config.java @@ -68,7 +68,7 @@ public class Config { /** * Countly SDK version to be sent in HTTP requests */ - protected String sdkVersion = "24.1.1"; + protected String sdkVersion = "24.1.2"; /** * Countly SDK version to be sent in HTTP requests @@ -230,6 +230,12 @@ public class Config { */ protected boolean unhandledCrashReportingEnabled = true; + /** + * Custom network request headers to be sent with each request. + * If you want to add a header, use {@link #addCustomNetworkRequestHeaders(Map)}. + */ + protected Map customNetworkRequestHeaders = null; + public ConfigViews views = new ConfigViews(this); protected String location = null; @@ -1330,6 +1336,20 @@ public Config disableLocation() { return this; } + /** + * Allows you to add custom header key/value pairs to each request + * + * @return Returns the same config object for convenient linking + */ + public Config addCustomNetworkRequestHeaders(Map customHeaderValues) { + this.customNetworkRequestHeaders = customHeaderValues; + return this; + } + + public Map getCustomNetworkRequestHeaders() { + return customNetworkRequestHeaders; + } + /** * Logging level for {@link Log} module */ diff --git a/sdk-java/src/main/java/ly/count/sdk/java/internal/Transport.java b/sdk-java/src/main/java/ly/count/sdk/java/internal/Transport.java index c158e4fb..b016a4c1 100644 --- a/sdk-java/src/main/java/ly/count/sdk/java/internal/Transport.java +++ b/sdk-java/src/main/java/ly/count/sdk/java/internal/Transport.java @@ -149,6 +149,18 @@ HttpURLConnection connection(final Request request) throws IOException { https.setSSLSocketFactory(sslContext.getSocketFactory()); } + if (config.getCustomNetworkRequestHeaders() != null) { + //if there are custom header values, add them + L.v("[Transport] connection, Adding [" + config.getCustomNetworkRequestHeaders() + "] custom header fields"); + for (Map.Entry entry : config.getCustomNetworkRequestHeaders().entrySet()) { + String key = entry.getKey(); + String value = entry.getValue(); + if (key != null && value != null && !key.isEmpty()) { + connection.addRequestProperty(key, value); + } + } + } + if (!usingGET) { OutputStream output = null; PrintWriter writer = null; diff --git a/sdk-java/src/test/java/ly/count/sdk/java/internal/TestUtils.java b/sdk-java/src/test/java/ly/count/sdk/java/internal/TestUtils.java index b87d3140..91576583 100644 --- a/sdk-java/src/test/java/ly/count/sdk/java/internal/TestUtils.java +++ b/sdk-java/src/test/java/ly/count/sdk/java/internal/TestUtils.java @@ -39,7 +39,7 @@ public class TestUtils { static String SERVER_APP_KEY = "COUNTLY_APP_KEY"; static String DEVICE_ID = "some_random_test_device_id"; static String SDK_NAME = "java-native"; - static String SDK_VERSION = "24.1.1"; + static String SDK_VERSION = "24.1.2"; static String APPLICATION_VERSION = "1.0"; public static final String[] eKeys = new String[] { "eventKey1", "eventKey2", "eventKey3", "eventKey4", "eventKey5", "eventKey6", "eventKey7" };