Я применил ветвь в своем собственном приложении. Все ссылки в платформе настроены, и я вижу параметр, который мне нужен в URL-адресе. Проблема, с которой я столкнулась, - это когда приложение сначала устанавливает значение null. Это только после того, как я установил, вернитесь к ссылке, которая распознает этот параметр. Это предполагаемое поведение?
Как я установил настройку своего ветки в компоненте начальной загрузки. Я добавил это в componentDidMount(), так как я использую 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 жить вне моего класса компонента для правильной работы?
Спасибо, что вызвали это. Я являюсь сторонником этого репо, и я внес некоторые изменения там, которые должны сделать вещи немного яснее.
TL; DR:
uri
, который устарел и в конечном итоге будет удален.+non_branch_link
вместо не связанных каналов.params
с params
Branch.uri
совпадает с params['~referring_link']
.params
будут содержать только { "+clicked_branch_link": false, "+is_first_session": false }
.params
см. В документах ветки.componentWillMount
- хорошее место для вызова branch.subscribe
. По той или иной причине у этого SDK всегда была немного другая модель данных из всех других SDK Branch. Ни один другой SDK не предоставляет параметр uri
. Вся необходимая информация присутствует в params
и аргументах error
, которые также возвращаются другими SDK (например, iOS, Android, Cordova). Раньше RN SDK не передавал params
если параметр ~id
не присутствовал. Параметр ~id
назначается веткой, чтобы идентифицировать каждый уникальный клик по ветке. В частности, он отсутствует для не-веток. Поэтому во многих случаях subscribe
обратный вызов был вызван с нулевым params
. Параметр uri
был добавлен только для того, чтобы обеспечить +non_branch_link
для неединичных ссылок, поскольку params
были отфильтрованы. Эти различия усложнили поддержку, добавили ненужную сложность кода и вызвали путаницу среди разработчиков. Он был изменен в версии 2.0.0-beta.5. Параметр uri
теперь должен считаться устаревшим. Его поведение должно быть неизменным, за исключением некоторых случаев с нечетным краем. Вам всегда нужно проконсультироваться с params
если error
равна нулю.
Информацию о всех параметрах Branch см. В документах ветки.
При открытии ссылки, отличной от ветки, единственным интересным параметром, который возвращается, является +non_branch_link
, который является просто нераспределенным URL. Это то же самое, что и параметр uri
для этих ссылок.
Обратный вызов subscribe
вызывается всякий раз, когда API отвечает на SDK, который включает в себя такие вещи, как инициализация, для отложенной глубокой привязки. Когда никакая ссылка не доступна при запуске, вы все равно будете перезвоны. Но +clicked_branch_link
неверно, а +non_branch_link
отсутствует. Это согласуется с поведением остальных SDK Branch.
Я провел много времени на примерах в репо. Все они работают. В частности, webview_example иллюстрирует реалистичную интеграцию приложений с маршрутизацией ссылок. Я бы призвал вас взглянуть на то, как это работает. В частности, вы устанавливаете ряд параметров при вызове createBranchUniversalObject и showShareSheet (или getShortUrl). Они передаются обратно для подписки и используются для маршрутизации ссылки в приложении и отображения представления с соответствующим контентом.
На данный момент все работает и согласуется с моделью данных Branch в другом месте.
Я думаю, что еще есть возможности для улучшения. В частности, было бы неплохо иметь возможность более легко отличить ссылку от успешного ответа на инициализацию. Я думаю, что было бы лучше добавить методы в SDK и внедрить API, такой как модуль связывания RN, например branch.getInitialLink()
, branch.addEventListener('open', ({params}) => {... })
, branch.addEventListener('init',() => {... })
, branch.addEventListener('error', ({error}) => {... })
. Вероятно, это произойдет в более позднем выпуске, таком как 2.1.