about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorHailey <me@haileyok.com>2024-07-11 18:43:10 -0700
committerGitHub <noreply@github.com>2024-07-11 18:43:10 -0700
commit8b121af2e438ca77cc5f5b1715516107c18aff6f (patch)
treec7f1a28b63226c79e07aef4d2e88898358a62ec6 /src
parent83e8522e0a89be28b1733f4c50dbd4379d98d03b (diff)
downloadvoidsky-8b121af2e438ca77cc5f5b1715516107c18aff6f.tar.zst
referrers for all platforms (#4514)
Diffstat (limited to 'src')
-rw-r--r--src/Navigation.tsx15
-rw-r--r--src/lib/hooks/useIntentHandler.ts15
-rw-r--r--src/lib/statsig/events.ts5
-rw-r--r--src/lib/statsig/statsig.tsx21
4 files changed, 33 insertions, 23 deletions
diff --git a/src/Navigation.tsx b/src/Navigation.tsx
index 495435122..8c815a3fe 100644
--- a/src/Navigation.tsx
+++ b/src/Navigation.tsx
@@ -31,7 +31,7 @@ import {
 } from 'lib/routes/types'
 import {RouteParams, State} from 'lib/routes/types'
 import {bskyTitle} from 'lib/strings/headings'
-import {isAndroid, isNative} from 'platform/detection'
+import {isAndroid, isNative, isWeb} from 'platform/detection'
 import {PreferencesExternalEmbeds} from '#/view/screens/PreferencesExternalEmbeds'
 import {AppPasswords} from 'view/screens/AppPasswords'
 import {ModerationBlockedAccounts} from 'view/screens/ModerationBlockedAccounts'
@@ -49,6 +49,7 @@ import {
   StarterPackScreenShort,
 } from '#/screens/StarterPack/StarterPackScreen'
 import {Wizard} from '#/screens/StarterPack/Wizard'
+import {Referrer} from '../modules/expo-bluesky-swiss-army'
 import {init as initAnalytics} from './lib/analytics/analytics'
 import {useWebScrollRestoration} from './lib/hooks/useWebScrollRestoration'
 import {attachRouteToLogEvents, logEvent} from './lib/statsig/statsig'
@@ -769,6 +770,18 @@ function logModuleInitTime() {
     initMs,
   })
 
+  if (isWeb) {
+    Referrer.getReferrerInfoAsync().then(info => {
+      if (info && info.hostname !== 'bsky.app') {
+        logEvent('deepLink:referrerReceived', {
+          to: window.location.href,
+          referrer: info?.referrer,
+          hostname: info?.hostname,
+        })
+      }
+    })
+  }
+
   if (__DEV__) {
     // This log is noisy, so keep false committed
     const shouldLog = false
diff --git a/src/lib/hooks/useIntentHandler.ts b/src/lib/hooks/useIntentHandler.ts
index 8741530b5..3235e1a6a 100644
--- a/src/lib/hooks/useIntentHandler.ts
+++ b/src/lib/hooks/useIntentHandler.ts
@@ -1,9 +1,12 @@
 import React from 'react'
 import * as Linking from 'expo-linking'
+
+import {logEvent} from 'lib/statsig/statsig'
 import {isNative} from 'platform/detection'
-import {useComposerControls} from 'state/shell'
 import {useSession} from 'state/session'
+import {useComposerControls} from 'state/shell'
 import {useCloseAllActiveElements} from 'state/util'
+import {Referrer} from '../../../modules/expo-bluesky-swiss-army'
 
 type IntentType = 'compose'
 
@@ -15,6 +18,16 @@ export function useIntentHandler() {
 
   React.useEffect(() => {
     const handleIncomingURL = (url: string) => {
+      Referrer.getReferrerInfoAsync().then(info => {
+        if (info && info.hostname !== 'bsky.app') {
+          logEvent('deepLink:referrerReceived', {
+            to: url,
+            referrer: info?.referrer,
+            hostname: info?.hostname,
+          })
+        }
+      })
+
       // We want to be able to support bluesky:// deeplinks. It's unnatural for someone to use a deeplink with three
       // slashes, like bluesky:///intent/follow. However, supporting just two slashes causes us to have to take care
       // of two cases when parsing the url. If we ensure there is a third slash, we can always ensure the first
diff --git a/src/lib/statsig/events.ts b/src/lib/statsig/events.ts
index 4946fb7f2..159061eac 100644
--- a/src/lib/statsig/events.ts
+++ b/src/lib/statsig/events.ts
@@ -25,6 +25,11 @@ export type LogEvents = {
   }
   'state:foreground:sampled': {}
   'router:navigate:sampled': {}
+  'deepLink:referrerReceived': {
+    to: string
+    referrer: string
+    hostname: string
+  }
 
   // Screen events
   'splash:signInPressed': {}
diff --git a/src/lib/statsig/statsig.tsx b/src/lib/statsig/statsig.tsx
index 94a1e63d0..81707d2bf 100644
--- a/src/lib/statsig/statsig.tsx
+++ b/src/lib/statsig/statsig.tsx
@@ -28,8 +28,6 @@ type StatsigUser = {
     bundleDate: number
     refSrc: string
     refUrl: string
-    referrer: string
-    referrerHostname: string
     appLanguage: string
     contentLanguages: string[]
   }
@@ -37,29 +35,12 @@ type StatsigUser = {
 
 let refSrc = ''
 let refUrl = ''
-let referrer = ''
-let referrerHostname = ''
 if (isWeb && typeof window !== 'undefined') {
   const params = new URLSearchParams(window.location.search)
   refSrc = params.get('ref_src') ?? ''
   refUrl = decodeURIComponent(params.get('ref_url') ?? '')
 }
 
-if (
-  isWeb &&
-  typeof document !== 'undefined' &&
-  document != null &&
-  document.referrer
-) {
-  try {
-    const url = new URL(document.referrer)
-    if (url.hostname !== 'bsky.app') {
-      referrer = document.referrer
-      referrerHostname = url.hostname
-    }
-  } catch {}
-}
-
 export type {LogEvents}
 
 function createStatsigOptions(prefetchUsers: StatsigUser[]) {
@@ -222,8 +203,6 @@ function toStatsigUser(did: string | undefined): StatsigUser {
     custom: {
       refSrc,
       refUrl,
-      referrer,
-      referrerHostname,
       platform: Platform.OS as 'ios' | 'android' | 'web',
       bundleIdentifier: BUNDLE_IDENTIFIER,
       bundleDate: BUNDLE_DATE,