diff --git a/README.md b/README.md
index 21f0041..90c942d 100644
--- a/README.md
+++ b/README.md
@@ -44,9 +44,9 @@ npx cap sync
initialize(options: InitializeOptions) => any
```
-| Param | Type |
-| ------------- | ------------------------------------------------------------------------------------ |
-| **`options`** | { key: string; trackLifecycle?: boolean; recordScreenViews?: boolean; }
|
+| Param | Type |
+| ------------- | -------------------------------------------------------------------------------------------------------- |
+| **`options`** | { key: string; trackLifecycle?: boolean; recordScreenViews?: boolean; proxyHost?: string; }
|
**Returns:** any
diff --git a/android/src/main/java/com/joinflux/flux/capacitorsegment/CapacitorSegmentPlugin.java b/android/src/main/java/com/joinflux/flux/capacitorsegment/CapacitorSegmentPlugin.java
index 1fa51a7..0338070 100644
--- a/android/src/main/java/com/joinflux/flux/capacitorsegment/CapacitorSegmentPlugin.java
+++ b/android/src/main/java/com/joinflux/flux/capacitorsegment/CapacitorSegmentPlugin.java
@@ -7,13 +7,18 @@
import com.getcapacitor.annotation.CapacitorPlugin;
import android.content.Context;
+import android.net.Uri;
import android.util.Log;
import com.segment.analytics.Analytics;
import com.segment.analytics.Analytics.Builder;
+import com.segment.analytics.ConnectionFactory;
import com.segment.analytics.Options;
import com.segment.analytics.Properties;
import com.segment.analytics.Traits;
+import java.io.IOException;
+import java.net.HttpURLConnection;
+
@CapacitorPlugin(name = "CapacitorSegment")
public class CapacitorSegmentPlugin extends Plugin {
private boolean initialized = false;
@@ -32,7 +37,22 @@ public void initialize(PluginCall call) {
}
Context context = this.getContext();
- Builder builder = new Analytics.Builder(context, key);
+
+ Builder builder;
+ String proxyHost = call.getString("proxyHost");
+
+ if (proxyHost == null) {
+ builder = new Analytics.Builder(context, key);
+ } else {
+ builder = new Analytics.Builder(context, key).connectionFactory(new ConnectionFactory() {
+ @Override
+ protected HttpURLConnection openConnection(String url) throws IOException {
+ String path = Uri.parse(url).getPath();
+ return super.openConnection(proxyHost + path);
+ }
+ });
+ }
+
Boolean trackLifecycle = call.getBoolean("trackLifecycle", false);
if (trackLifecycle) {
builder.trackApplicationLifecycleEvents().experimentalUseNewLifecycleMethods(false);
diff --git a/src/definitions.ts b/src/definitions.ts
index 03dc6f8..6db6497 100644
--- a/src/definitions.ts
+++ b/src/definitions.ts
@@ -10,6 +10,7 @@ export type InitializeOptions = {
key: string;
trackLifecycle?: boolean;
recordScreenViews?: boolean;
+ proxyHost?: string;
};
export type Identity = { userId: string };
diff --git a/src/web.ts b/src/web.ts
index d19761a..276d5f6 100644
--- a/src/web.ts
+++ b/src/web.ts
@@ -2,7 +2,7 @@ import { WebPlugin } from '@capacitor/core';
import type { CapacitorSegmentPlugin, IdentifyOptions, InitializeOptions, PageOptions, TrackOptions } from './definitions';
-const getSegmentScript = (key: string) => `!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware"];analytics.factory=function(e){return function(){var t=Array.prototype.slice.call(arguments);t.unshift(e);analytics.push(t);return analytics}};for(var e=0;e `!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware"];analytics.factory=function(e){return function(){var t=Array.prototype.slice.call(arguments);t.unshift(e);analytics.push(t);return analytics}};for(var e=0;e {
- await this.loadScript('segment', getSegmentScript(options.key));
+ await this.loadScript('segment', getSegmentScript(options.key, options?.proxyHost));
}
async identify(options: IdentifyOptions): Promise {