深度链接 - 如果应用程序关闭则不起作用
Posted
技术标签:
【中文标题】深度链接 - 如果应用程序关闭则不起作用【英文标题】:Deep linking - doesn't work if app is closed 【发布时间】:2021-08-19 16:58:01 【问题描述】:我正在我的 react 本机应用程序中实现与 expo 的深度链接。我已经设法使用此代码和this tutorial 和this documentation 来调整它以适应我的嵌套堆栈:
const linking =
prefixes:[prefix],
config:
screens:
Drawer:
screens:
Tabs:
screens:
Profile:"profile"
,
return (
<NavigationContainer linking=linking>
<RootStackScreen actions=actions showLoader=showLoader user=user ...props />
</NavigationContainer>
)
如果我使用myscheme://profile
,它会按预期工作,但前提是应用程序在后台打开。当应用程序关闭时,它只是在我的初始主屏幕中打开它,我尝试使用谷歌搜索,但找不到任何适合我所做的解释。我还尝试将getInitialRoute
函数添加到linking
,当应用程序关闭并从深层链接打开时触发,但不知道如何使用它来激活导航。
async getInitialURL()
const url = await Linking.getInitialURL(); // This returns the link that was used to open the app
if (url != null)
//const path, queryParams = Linking.parse(url);
//console.log(path,queryParams)
//Linking.openURL(url)
return url;
,
【问题讨论】:
类似的事情请帮忙***.com/questions/71245836/… 【参考方案1】:您可以检查几件事。
验证linking.config
的结构是否与您的导航结构匹配。我过去遇到过类似的问题,并通过确保我的 config
结构正确来解决它。
确保linking
对象设置正确。请参阅docs 进行验证。从外观上看,您展示的linking
对象中没有getInitialURL
属性。
确认您已将事物的本机部分设置为 documented。
希望有些事情可以解决!如果没有,请告诉我。 ?
【讨论】:
感谢您的回答。我假设我正确配置了我的配置,因为深层链接在应用程序已经打开时有效。但是,当应用程序关闭时它会失败。我还指定我尝试添加问题末尾提到的getInitialURL
属性,但它没有改变任何东西,所以也许我用错了,但我不知道我可以改变什么..【参考方案2】:
我想您确认您的函数 getInitialURL 在您的应用启动时被调用?另外,if (url != null)
中的注释代码不应该被注释吗?
如果上述情况正常,则问题可能与启用的调试器有关。根据 React Native 的文档 (https://reactnative.dev/docs/linking#getinitialurl):
getInitialURL 可能会在启用调试时返回 null。禁用调试器以确保它通过。
【讨论】:
是的,注释代码是不同的东西我试过但没有工作,当应用程序从深层链接启动时被调用(它记录了我使用的相同 url)。我正在 expo go 中测试这个,所以也许它是相关的? 世博会可能是问题所在。好久没用expo了。顺便说一句,当应用程序在发布版本中关闭时,您是否会打开 scheme://xxxxx?【参考方案3】:您正在构建版本吗?在我的应用程序中,在调试中从退出状态进行深度链接不起作用,但它在发布时按预期工作
【讨论】:
有意思,我在expo go中测试一下,明天试试,更新.. @sagi 有没有适合您的解决方案?我正在经历同样的问题【参考方案4】:我遇到了同样的问题。在 ios(颤振构建)中,我通过添加“可用内容”解决了这个问题。文章在这里:Apple Content Available Document。我正在使用 OneSignal,所以在 api 中我添加了该字段。现在,即使应用程序被强制关闭,它也会唤醒并且深层链接可以工作。对于 Onesignal,我必须使用“content_available”:true。完整的 Onesignal 邮递员代码为:
"app_id": "1234",
"included_segments": ["Test"],
"content_available" : true,
"contents":
"en": "Hi"
,
"data":
"dynamic_link": "https://google.com"
,
"headings":
"en": "Testing"
【讨论】:
以上是关于深度链接 - 如果应用程序关闭则不起作用的主要内容,如果未能解决你的问题,请参考以下文章
mongoose updateOne 功能:如果 $pull 不起作用则不更新
html 将下拉值作为URL参数发送。如果我们的系统预先填写表单,则不起作用。