我已经在我的本机应用中实现了分支。平台中的所有链接都已设置好,我在URL中看到了我需要的参数。我遇到的问题是当应用程序首次安装时该值为null。只有在我安装完毕后才回到它识别此参数的链接。这是预期的行为吗?
如何在初始加载组件中设置分支调用。我将它添加到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是否需要在我的组件类之外生存才能正常运行?
答案 0 :(得分:4)
感谢你提出这个问题。我是该回购的当前维护者,并且我在那里做了一些改变,应该让事情变得更加清晰。
TL; DR:
uri
参数,该参数已弃用,最终会被删除。+non_branch_link
参数,而不是非分支链接。params
中的数据与分支链接。uri
与params['~referring_link']
相同。params
只会包含{ "+clicked_branch_link": false, "+is_first_session": false }
。params
。componentWillMount
是致电branch.subscribe
的好地方。由于某种原因,此SDK始终与分支机构的所有其他SDK的数据模型略有不同。没有其他SDK提供uri
参数。所有相关信息都存在于params
和error
参数中,这些参数也由其他SDK(例如,iOS,Android,Cordova)返回。以前,如果params
参数不存在,RN SDK将无法通过~id
。分支~id
参数用于标识分支链接上的每个唯一点击。特别是,非分支链接不存在。因此,在许多情况下,使用null subscribe
调用params
回调。添加了uri
参数只是为了为非分支链接提供+non_branch_link
,因为params
被过滤掉了。这些差异使得更难以支持,增加了不必要的代码复杂性并导致开发人员之间的混淆。 2.0.0-beta.5中的It has been changed。现在应该将uri
参数视为已弃用。除了一些奇怪的边缘情况外,它的行为应该保持不变。除非params
非空,否则您始终需要咨询error
。
有关所有分支参数的信息,请参阅Branch docs。
打开非分支链接时,返回的唯一有趣参数是+non_branch_link
,它只是非分支URL。这与这些链接的uri
参数相同。
只要API响应SDK,就会调用subscribe
回调,其中包括初始化等延迟深度链接。如果启动时没有可用的链接,您仍然会回拨。但+clicked_branch_link
为假,+non_branch_link
不存在。这与Branch的其他SDK的行为一致。
我最近花了很多时间在回购邮件的examples。他们都工作。特别是,webview_example说明了与链接路由的真实应用集成。我恳请你看看它是如何运作的。特别是,当您调用createBranchUniversalObject和showShareSheet(或getShortUrl)时,您可以设置一些参数。它们会传回subscribe并用于在应用中路由链接并显示包含相应内容的视图。
目前,一切正常,并且与其他地方的Branch数据模型一致。
我认为仍有改进的余地。特别是,能够更容易地区分链接打开和成功的初始化响应将是很好的。我认为将方法添加到SDK并采用像RN Linking模块这样的API是一种改进,例如: branch.getInitialLink()
,branch.addEventListener('open', ({params}) => { ... })
,branch.addEventListener('init', () => { ... })
,branch.addEventListener('error', ({error}) => { ... })
。这可能会在2.1之后的版本中发生。