【问题标题】:Deep linking - doesn't work if app is closed深度链接 - 如果应用程序关闭则不起作用
【发布时间】:2021-08-19 16:58:01
【问题描述】:

我正在我的 react 本机应用程序中实现与 expo 的深度链接。我已经设法使用此代码和this tutorialthis 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;
  }
  
},

【问题讨论】:

标签: react-native navigation expo deep-linking


【解决方案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"
            }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 2016-06-26
    • 2019-08-18
    • 2022-08-19
    • 2014-09-18
    • 2021-09-01
    • 1970-01-01
    相关资源
    最近更新 更多