У меня это отлично работает, используя подписку Linking.addEventListener('url', ({url}) => ...).
Проблема в том, что когда я пытаюсь открыть ту же ссылку еще раз, она просто не переходит туда. Мне нужно открыть ссылку Б, если я хочу снова открыть ссылку А. Похоже на проблему с кэшем. Или простое обновление состояния реагирования. URL-адрес тот же, поэтому компонент ничего не перерисовывает (возможно). Я попытался использовать ключевую опору дополнительно, чтобы гарантировать повторную визуализацию WebView при изменении ключа. С этим тоже не повезло.
Может кто-нибудь подсказать обходной путь? Известна ли это проблема?
Я перепробовал много решений, но дело в том, что рукопожатие работает только в рабочей среде, поэтому мне нужно загрузить новую версию и подождать некоторое время после ее появления на рынке.
Мой код очень прост:
Код: Выделить всё
...
const [initialUrl, setInitialUrl] = useState(null)
...
const handleNavigationStateChange = (navState: any) => {
setCanGoBack(navState.canGoBack)
}
const handleShouldStartLoadWithRequest = (navState: any) => {
if (navState.url && !navState.url.startsWith(targetUrl)) {
if (navState.url.match(/^(https?|mailto|tel|sms|geo):/i)) {
Linking.openURL(navState.url).then()
return false
}
}
return true
}
...
useEffect(() => {
let finalUrl = `${targetUrl}/auth/login`
const checkAndSetUrl = async () => {
const initialLink = await Linking.getInitialURL()
if (initialLink) {
finalUrl = initialLink
console.log('App opened with Deep Link URL:', initialLink)
} else {
try {
const value = await AsyncStorage.getItem(FIRST_LOAD_KEY)
if (value === null) {
finalUrl = `${targetUrl}/auth/start` // Onboarding
await AsyncStorage.setItem(FIRST_LOAD_KEY, 'false')
}
} catch (e) {
console.error('Failed to read/save data:', e)
}
}
setInitialUrl(finalUrl)
}
checkAndSetUrl()
const subscription = Linking.addEventListener('url', ({ url }) => {
setInitialUrl(url)
})
return () => {
subscription.remove()
}
}, [targetUrl])
...
return (
)
Подробнее здесь: https://stackoverflow.com/questions/797 ... deep-links
Мобильная версия