diff options
author | dan <dan.abramov@gmail.com> | 2024-11-22 23:28:45 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-22 23:28:45 +0000 |
commit | ac5b2cf31f2bb45f1bf8a180705249d3cce8017d (patch) | |
tree | 83af7c9781cdac5f561312fd1fe1d4048aad4342 /src/lib/hooks/useOpenLink.ts | |
parent | fee2f5daa24da55f178af355623057c11b3e387b (diff) | |
download | voidsky-ac5b2cf31f2bb45f1bf8a180705249d3cce8017d.tar.zst |
Pass referrer on native (with an opt out) (#6648)
* Pass referer on native * Add ChainLink3 * Add an opt out for sending utm * Remove noreferrer on links We do have <meta name="referrer" content="origin-when-cross-origin"> in HTML, should be sufficient. * Narrow down the condition slightly --------- Co-authored-by: Eric Bailey <git@esb.lol>
Diffstat (limited to 'src/lib/hooks/useOpenLink.ts')
-rw-r--r-- | src/lib/hooks/useOpenLink.ts | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/lib/hooks/useOpenLink.ts b/src/lib/hooks/useOpenLink.ts index 5b75695b8..727821670 100644 --- a/src/lib/hooks/useOpenLink.ts +++ b/src/lib/hooks/useOpenLink.ts @@ -4,12 +4,14 @@ import * as WebBrowser from 'expo-web-browser' import { createBskyAppAbsoluteUrl, + isBskyAppUrl, isBskyRSSUrl, isRelativeUrl, } from '#/lib/strings/url-helpers' import {isNative} from '#/platform/detection' import {useModalControls} from '#/state/modals' import {useInAppBrowser} from '#/state/preferences/in-app-browser' +import {useOptOutOfUtm} from '#/state/preferences/opt-out-of-utm' import {useTheme} from '#/alf' import {useSheetWrapper} from '#/components/Dialog/sheet-wrapper' @@ -18,6 +20,7 @@ export function useOpenLink() { const enabled = useInAppBrowser() const t = useTheme() const sheetWrapper = useSheetWrapper() + const optOutOfUtm = useOptOutOfUtm() const openLink = useCallback( async (url: string, override?: boolean) => { @@ -26,6 +29,9 @@ export function useOpenLink() { } if (isNative && !url.startsWith('mailto:')) { + if (!optOutOfUtm && !isBskyAppUrl(url) && url.startsWith('http')) { + url = addUtmSource(url) + } if (override === undefined && enabled === undefined) { openModal({ name: 'in-app-browser-consent', @@ -47,8 +53,24 @@ export function useOpenLink() { } Linking.openURL(url) }, - [enabled, openModal, t, sheetWrapper], + [enabled, openModal, t, sheetWrapper, optOutOfUtm], ) return openLink } + +function addUtmSource(url: string): string { + let parsedUrl + try { + parsedUrl = new URL(url) + } catch (e) { + return url + } + if (!parsedUrl.searchParams.has('utm_source')) { + parsedUrl.searchParams.set('utm_source', 'bluesky') + if (!parsedUrl.searchParams.has('utm_medium')) { + parsedUrl.searchParams.set('utm_medium', 'social') + } + } + return parsedUrl.toString() +} |