深度链接 - 如果应用程序关闭则不起作用

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"
            

【讨论】:

以上是关于深度链接 - 如果应用程序关闭则不起作用的主要内容,如果未能解决你的问题,请参考以下文章

深度链接在 Facebook 时间线上不起作用

mongoose updateOne 功能:如果 $pull 不起作用则不更新

Facebook延迟深层链接不起作用

html 将下拉值作为URL参数发送。如果我们的系统预先填写表单,则不起作用。

ggplot 如果它在 for 循环内则不起作用,尽管它在它之外工作 [重复]

使用选项卡堆栈时反应导航深度链接不起作用