diff --git a/modules/expo-bluesky-swiss-army/android/src/main/java/expo/modules/blueskyswissarmy/referrer/ExpoBlueskyReferrerModule.kt b/modules/expo-bluesky-swiss-army/android/src/main/java/expo/modules/blueskyswissarmy/referrer/ExpoBlueskyReferrerModule.kt index d8283a1db6..80fe135429 100644 --- a/modules/expo-bluesky-swiss-army/android/src/main/java/expo/modules/blueskyswissarmy/referrer/ExpoBlueskyReferrerModule.kt +++ b/modules/expo-bluesky-swiss-army/android/src/main/java/expo/modules/blueskyswissarmy/referrer/ExpoBlueskyReferrerModule.kt @@ -32,19 +32,23 @@ class ExpoBlueskyReferrerModule : Module() { // Some apps explicitly set a referrer, like Chrome. In these cases, we prefer this since // it's the actual website that the user came from rather than the app. if (intentReferrer is Uri) { - return@AsyncFunction mapOf( + val res = mapOf( "referrer" to intentReferrer.toString(), "hostname" to intentReferrer.host, ) + intent = null + return@AsyncFunction res } // In all other cases, we'll just record the app that sent the intent. if (activityReferrer != null) { // referrer could become null here. `.toString()` though can be called on null - return@AsyncFunction mapOf( + val res = mapOf( "referrer" to activityReferrer.toString(), "hostname" to (activityReferrer?.host ?: ""), ) + activityReferrer = null + return@AsyncFunction res } return@AsyncFunction null diff --git a/modules/expo-bluesky-swiss-army/ios/Referrer/ExpoBlueskyReferrerModule.swift b/modules/expo-bluesky-swiss-army/ios/Referrer/ExpoBlueskyReferrerModule.swift index aa91f92a31..fd28c51e6f 100644 --- a/modules/expo-bluesky-swiss-army/ios/Referrer/ExpoBlueskyReferrerModule.swift +++ b/modules/expo-bluesky-swiss-army/ios/Referrer/ExpoBlueskyReferrerModule.swift @@ -3,34 +3,5 @@ import ExpoModulesCore public class ExpoBlueskyReferrerModule: Module { public func definition() -> ModuleDefinition { Name("ExpoBlueskyReferrer") - - AsyncFunction("getReferrerInfoAsync") { (promise: Promise) in - let defaults = UserDefaults.standard - let referrerUrlString = defaults.string(forKey: "referrer") - let referrerApp = defaults.string(forKey: "referrerApp") - - if let referrerUrlString = defaults.string(forKey: "referrer"), - let url = URL(string: referrerUrlString) - { - if #available(iOS 16.0, *) { - promise.resolve([ - "referrer": url.absoluteString, - "hostname": url.host() ?? "" - ]) - } else { - promise.resolve([ - "referrer": url.absoluteString, - "hostname": url.host ?? "" - ]) - } - } else if let referrerApp = defaults.string(forKey: "referrerApp") { - promise.resolve([ - "referrer": referrerApp, - "hostname": referrerApp, - ]) - } else { - promise.resolve(nil) - } - } } } diff --git a/modules/expo-bluesky-swiss-army/src/Referrer/index.ios.ts b/modules/expo-bluesky-swiss-army/src/Referrer/index.ios.ts index 6f6e052ab9..2bf1497a0a 100644 --- a/modules/expo-bluesky-swiss-army/src/Referrer/index.ios.ts +++ b/modules/expo-bluesky-swiss-army/src/Referrer/index.ios.ts @@ -1,14 +1,37 @@ -import {requireNativeModule} from 'expo' - +import {SharedPrefs} from '../../index' import {NotImplementedError} from '../NotImplemented' import {GooglePlayReferrerInfo, ReferrerInfo} from './types' -export const NativeModule = requireNativeModule('ExpoBlueskyReferrer') - export function getGooglePlayReferrerInfoAsync(): Promise { throw new NotImplementedError() } export function getReferrerInfoAsync(): Promise { - return NativeModule.getReferrerInfoAsync() + const referrer = SharedPrefs.getString('referrer') + if (referrer) { + SharedPrefs.removeValue('referrer') + try { + const url = new URL(referrer) + return { + referrer, + hostname: url.hostname, + } + } catch (e) { + return { + referrer, + hostname: undefined, + } + } + } + + const referrerApp = SharedPrefs.getString('referrerApp') + if (referrerApp) { + SharedPrefs.removeValue('referrerApp') + return { + referrer: referrerApp, + hostname: referrerApp, + } + } + + return null }