分支 IO 深度链接参数未出现在 React Native 中

Eva*_*een 2 javascript android deep-linking react-native branch.io

我已经在我的反应本机应用程序中实现了分支。平台中的所有链接均已设置,我在 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
      )
    })

  }
Run Code Online (Sandbox Code Playgroud)

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

Jim*_*Dee 5

感谢您提出这个问题。我是该存储库的当前维护者,我一直在其中进行一些更改,以使事情变得更加清晰。

长话短说:

  • 更新至 2.0.0-beta.5 或更高版本。这些参数的行为略有改变,变得更加一致。
  • 不要使用该uri参数,该参数已被弃用并最终将被删除。
  • 寻找+non_branch_link参数来代替非分支链接。
  • 使用 with Branch 链接中的数据params
  • 对于分支链接,uri与 相同params['~referring_link']
  • 每当 API 响应时都会调用回调,包括初始化之类的事情,在这种情况下params将只包含{ "+clicked_branch_link": false, "+is_first_session": false }.
  • 有关 的内容的详细信息,请参阅Branch 文档params
  • 请参阅存储库中的示例,特别是webview_example
  • componentWillMount是一个打电话的好地方branch.subscribe

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

有关所有分支参数的信息,请参阅分支文档。

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

subscribe每当 API 响应 SDK 时都会调用回调,其中包括初始化等内容,以实现延迟深度链接。如果启动时没有可用链接,您仍会收到回电。但+clicked_branch_link它是假的并且+non_branch_link不存在。这与 Branch 的 SDK 的其余部分的行为一致。

我最近花了很多时间研究存储库中的示例。他们都工作。特别是,webview_example演示了与链接路由的实际应用程序集成。我强烈建议您看看它是如何工作的。特别是,您在调用createBranchUniversalObjectshowShareSheet (或 getShortUrl)时设置许多参数。它们被传回订阅并用于在应用程序中路由链接并显示包含适当内容的视图。

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

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