diff --git a/app/_layout.tsx b/app/_layout.tsx index c6296365..b4098ef2 100644 --- a/app/_layout.tsx +++ b/app/_layout.tsx @@ -40,6 +40,7 @@ import { PricelistProvider } from 'components/providers/PricelistProvider'; import { registerAllSheets } from 'components/layout/sheets/registerSheets'; import PasscodeGate from 'components/passcode/PasscodeGate'; import { useFonts } from 'hooks/useFonts'; +import { useDeeplink } from 'hooks/useDeeplink'; registerAllSheets({ context: 'global' }); @@ -207,6 +208,9 @@ export default function RootLayout() { // Load fonts const [fontsLoaded, fontsError] = useFonts(); + // Set up deeplink handler + useDeeplink(); + // Handle font loading errors useEffect(() => { if (fontsError) throw fontsError; diff --git a/hooks/useDeeplink.ts b/hooks/useDeeplink.ts index f58c2e91..b1e2b72f 100644 --- a/hooks/useDeeplink.ts +++ b/hooks/useDeeplink.ts @@ -13,9 +13,13 @@ export const useDeeplink = () => { useEffect(() => { const urDecoder = new URDecoder(); + const supportedSchemes = ['test://', 'sovran://', 'cashu://']; + const handleUrl = async ({ url }: { url: string }) => { - if (!url || !url.startsWith('test://')) return; - const data = decodeURIComponent(url.replace('test://', '')); + if (!url) return; + const scheme = supportedSchemes.find((s) => url.startsWith(s)); + if (!scheme) return; + const data = decodeURIComponent(url.replace(scheme, '')); await barcodeHandler({ scanning: { data }, navigation,