【问题标题】:Branch IO deep link parameter not appearing in react native分支 IO 深层链接参数未出现在本机反应中
【发布时间】:2017-06-01 20:49:46
【问题描述】:

我已经在我的 react native 应用中实现了分支。平台中的所有链接都已设置,我在 URL 中看到了我需要的参数。我遇到的问题是当应用程序首次安装时该值为空。只有在我安装后才返回它识别此参数的链接。这是预期的行为吗?

我如何在初始加载组件中设置分支调用。我将它添加到 componentDidMount() 中,因为我正在使用 redux 并希望提醒 redux 该值。

componentDidMount(){
    branch.subscribe(({params, uri, error}) => {
      if (params && !error) {

        if(params.coid != null){

          const id = params.coid
          this.showAlertMessage(
            'BUNDLE COMPANY ID',
            id
          )
          this.props.CheckAdmin(id)
          LocalStore.get('localID').then(localID => {
            LocalStore.save('localID', {value: id});
          })
        }
      }else{

        this.showAlertMessage(
          'BUNDLE COMPANY ID',
          "BUNDLE COID IS NULL"
        )
        this.props.IsMasterDownload()
      }
      this.showAlertMessage(
        'BRANCH URI',
        uri
      )
    })

  }

branch.subscribe 是否需要在我的组件类之外才能正常运行?

【问题讨论】:

    标签: javascript android react-native deep-linking branch.io


    【解决方案1】:

    感谢您提出这个问题。我是该 repo 的当前维护者,我一直在那里进行一些更改,这应该会让事情变得更清晰。

    TL;DR:

    • 更新到 2.0.0-beta.5 或更高版本。这些参数的行为略有变化,以更加一致。
    • 请勿使用 uri 参数,该参数已被弃用,最终将被删除。
    • 寻找+non_branch_link 参数而不是非分支链接。
    • 使用带有分支链接的params 中的数据。
    • 对于分支链接,uriparams['~referring_link'] 相同。
    • 任何时候 API 响应时都会调用回调,包括初始化之类的事情,在这种情况下,params 将只包含 { "+clicked_branch_link": false, "+is_first_session": false }
    • 有关params内容的详细信息,请参阅Branch docs
    • 请参阅 repo 中的示例,尤其是 webview_example
    • componentWillMount 是拨打branch.subscribe 的好地方。

    出于某种原因,此 SDK 与 Branch 的所有其他 SDK 的数据模型总是略有不同。没有其他 SDK 提供 uri 参数。所有相关信息都存在于 paramserror 参数中,其他 SDK(例如 iOS、Android、Cordova)也会返回这些信息。以前,如果 ~id 参数不存在,RN SDK 将不会传递 params~id 参数由 Branch 分配,以标识对 Branch 链接的每次唯一点击。特别是,它不存在于非分支链接。所以在很多情况下,subscribe 回调是用 null params 调用的。添加uri 参数只是为了为非分支链接提供+non_branch_link,因为params 已被过滤掉。这些差异使得支持变得更加困难,增加了不必要的代码复杂性,并在开发人员中造成了混乱。 It has been changed 在 2.0.0-beta.5 中。 uri 参数现在应被视为已弃用。除了一些奇怪的边缘情况外,它的行为应该保持不变。除非error 不为空,否则您始终需要咨询params

    有关所有分支参数的信息,请参阅Branch docs

    打开非分支链接时,返回的唯一有趣的参数是+non_branch_link,它只是非分支 URL。这与这些链接的 uri 参数相同。

    每当 API 响应 SDK 时,都会调用 subscribe 回调,其中包括初始化等延迟深度链接。当启动时没有可用的链接时,您仍会被回叫。但是+clicked_branch_link 是假的,+non_branch_link 是不存在的。这与 Branch 其他 SDK 的行为一致。

    我最近在回购中的examples 上花了很多时间。他们都工作。特别是,webview_example 说明了与链接路由的实际应用程序集成。我敦促你看看它是如何工作的。特别是,您在调用createBranchUniversalObjectshowShareSheet(或getShortUrl)时设置了许多参数。它们被传回subscribe 并用于在应用中路由链接并显示具有适当内容的视图。

    目前,一切正常,并且与 Branch 在其他地方的数据模型保持一致。

    我认为还有改进的余地。特别是,如果能够更轻松地将链接打开与成功的初始化响应区分开来,那就太好了。我认为向 SDK 添加方法并采用像 RN Linking 模块这样的 API 是一种改进,例如branch.getInitialLink()branch.addEventListener('open', ({params}) => { ... })branch.addEventListener('init', () => { ... })branch.addEventListener('error', ({error}) => { ... })。这可能会在 2.1 等以后的版本中发生。

    【讨论】:

    • 感谢吉米,抱歉回复缓慢。我将尝试将我的调用更改为内部 componentWillMount 并摆脱 uri。我什至没有使用它,因为我只需要参数作为键值。还意识到我没有添加我的 SHA256 证书指纹来启用应用程序链接。这也会导致它无法正常运行吗?干杯。
    • 另一个问题 Jimmy,当添加两个参数时,将它们拆分为参数的最佳方法是什么。我注意到如果我通过两个类似 ?coid=XYZ?l=ABC 的 params.coid = XYZ?l=ABC
    • 除了这个 SDK 的细节之外,我的知识是偶然的。您应该通过dev.branch.io 或 integrations@branch.io 查阅 Branch 文档以了解详细信息。我不确定 SHA 指纹如何与 App Links 一起工作,但它似乎不太可能有时而不是其他情况下工作。在应用程序或仪表板中构建链接时,我建议您使用元数据作为参数。如果参数完全是上下文相关的并且不能包含在链接元数据中,我认为您可以使用通常的 URL 查询参数语法:?coid=XYZ&l=ABC (&, not ?)。
    • 仅供参考, & 确实有效,我现在在链接中获取了两个参数。再次感谢您的帮助!
    猜你喜欢
    • 2019-06-12
    • 2016-05-10
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多