From 2f6463cc9d347502b92732f0a9d6a615209d6f0b Mon Sep 17 00:00:00 2001 From: Tung Vu <53031642+tung-vu-td@users.noreply.github.com> Date: Tue, 25 Jun 2024 18:48:54 +0700 Subject: [PATCH] Auto tracking IP (#88) --- build.gradle | 2 +- .../com/treasuredata/android/demo/DemoApp.java | 1 + .../java/com/treasuredata/android/TDClient.java | 6 +++++- .../com/treasuredata/android/TDHttpHandler.java | 7 +++++-- .../com/treasuredata/android/TreasureData.java | 17 +++++++++++++++++ .../treasuredata/android/TreasureDataTest.java | 13 +++++++++++++ 6 files changed, 42 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index f3f3c05..2bd4f2c 100644 --- a/build.gradle +++ b/build.gradle @@ -30,7 +30,7 @@ repositories { dependencies { implementation 'org.komamitsu:android-logger-bridge:0.0.2' implementation 'com.fasterxml.jackson.jr:jackson-jr-objects:2.17.0' - implementation 'com.treasuredata:keen-client-java-core:3.0.0' + implementation 'com.treasuredata:keen-client-java-core:3.0.1' compileOnly 'com.google.android:android:4.1.1.4' diff --git a/example/src/main/java/com/treasuredata/android/demo/DemoApp.java b/example/src/main/java/com/treasuredata/android/demo/DemoApp.java index 5617b1e..9c6095d 100644 --- a/example/src/main/java/com/treasuredata/android/demo/DemoApp.java +++ b/example/src/main/java/com/treasuredata/android/demo/DemoApp.java @@ -9,6 +9,7 @@ import com.treasuredata.android.TreasureData; import java.util.HashMap; +import java.util.Map; /** * Created by vinhvd on 2/6/18. diff --git a/src/main/java/com/treasuredata/android/TDClient.java b/src/main/java/com/treasuredata/android/TDClient.java index 9167308..4e7833a 100644 --- a/src/main/java/com/treasuredata/android/TDClient.java +++ b/src/main/java/com/treasuredata/android/TDClient.java @@ -27,6 +27,7 @@ class TDClient extends KeenClient { .withJsonHandler(new TDJsonHandler(encryptionKey)) .withPublishExecutor(Executors.newSingleThreadExecutor()) ); + // setDebugMode(true); setApiKey(apiKey); setActive(true); @@ -56,7 +57,10 @@ public void enableAutoRetryUploading() { // Only for test @Deprecated TDClient(String apiKey) { - super(new TDClientBuilder()); + super( + new TDClientBuilder() + .withHttpHandler(new TDHttpHandler(apiKey, "test-endpoint")) + ); setApiKey(apiKey); } diff --git a/src/main/java/com/treasuredata/android/TDHttpHandler.java b/src/main/java/com/treasuredata/android/TDHttpHandler.java index 5bcc0a8..f7621a2 100644 --- a/src/main/java/com/treasuredata/android/TDHttpHandler.java +++ b/src/main/java/com/treasuredata/android/TDHttpHandler.java @@ -16,6 +16,8 @@ class TDHttpHandler extends UrlConnectionHttpHandler { private final String apiKey; private final String apiEndpoint; + volatile boolean isTrackingIPEnabled = false; + public static void disableEventCompression() { isEventCompression = false; } @@ -36,10 +38,11 @@ public TDHttpHandler(String apiKey, String apiEndpoint) { } protected void sendRequest(HttpURLConnection connection, Request request) throws IOException { + String contentType = isTrackingIPEnabled ? "application/vnd.treasuredata.v1.mobile+json" : "application/vnd.treasuredata.v1+json"; connection.setRequestMethod("POST"); connection.setRequestProperty("Authorization", "TD1 " + apiKey); - connection.setRequestProperty("Content-Type", "application/vnd.treasuredata.v1+json"); - connection.setRequestProperty("Accept", "application/vnd.treasuredata.v1+json"); + connection.setRequestProperty("Content-Type", contentType); + connection.setRequestProperty("Accept", contentType); connection.setRequestProperty("User-Agent", String.format("TD-Android-SDK/%s (%s %s)", VERSION, Build.MODEL, Build.VERSION.RELEASE)); connection.setDoOutput(true); diff --git a/src/main/java/com/treasuredata/android/TreasureData.java b/src/main/java/com/treasuredata/android/TreasureData.java index f57f819..b6e7806 100644 --- a/src/main/java/com/treasuredata/android/TreasureData.java +++ b/src/main/java/com/treasuredata/android/TreasureData.java @@ -496,6 +496,23 @@ public static void disableEventCompression() { TDHttpHandler.disableEventCompression(); } + /** + * Device's IP will be added to td_ip column in Treasure Data backend. + */ + public void enableAutoTrackingIP() { + TDHttpHandler tdHttpHandler = (TDHttpHandler) client.getHttpHandler(); + tdHttpHandler.isTrackingIPEnabled = true; + } + + /** + * Device's IP will not be added to td_ip column in Treasure Data backend. + * This is the default behavior. + */ + public void disableAutoTrackingIP() { + TDHttpHandler tdHttpHandler = (TDHttpHandler) client.getHttpHandler(); + tdHttpHandler.isTrackingIPEnabled = false; + } + /** * The destination database for events that doesn't specify one, default is "td". * diff --git a/src/test/java/com/treasuredata/android/TreasureDataTest.java b/src/test/java/com/treasuredata/android/TreasureDataTest.java index c87be49..c87ae5e 100644 --- a/src/test/java/com/treasuredata/android/TreasureDataTest.java +++ b/src/test/java/com/treasuredata/android/TreasureDataTest.java @@ -6,6 +6,7 @@ import io.keen.client.java.KeenCallback; import io.keen.client.java.KeenClient; import io.keen.client.java.KeenProject; + import junit.framework.TestCase; import java.io.IOException; @@ -963,4 +964,16 @@ public void testRemoveDefaultValuesNoop() { assertEquals(event1.get("key"), "Value"); assertNull(event1.get("key2")); } + + public void testAutoTrackingIP() { + TDHttpHandler tdHttpHandler = (TDHttpHandler) client.getHttpHandler(); + + assertFalse(tdHttpHandler.isTrackingIPEnabled); + + td.enableAutoTrackingIP(); + assertTrue(tdHttpHandler.isTrackingIPEnabled); + + td.disableAutoTrackingIP(); + assertFalse(tdHttpHandler.isTrackingIPEnabled); + } } \ No newline at end of file