У нас есть приложение для iOS, и мы используем Branch SDK для реализации приглашений. Все необходимые данные мы передаем как параметры внутри универсальной ссылки. Наша проблема в том, что он отлично работает, когда пользователь нажимает ссылку, когда приложение уже установлено на устройстве, но не может передавать данные в случайных случаях, когда пользователь должен установить приложение из Testflight или AppStore между ними. Иногда это работает, а иногда просто нет. Одна и та же ссылка может работать сейчас, но выйдет из строя через несколько минут. Под «неудачей» я подразумеваю, что параметры не передаются в приложение.
Вот наша конфигурация:
Мы настраиваем файлы Info.plist для нашей тестовой и производственной среды, как описано в документации:
- branch_key содержит словарь с действующими и тестовыми ключами.
- branch_app_domain содержит пользовательский домен для конкретной среды (скажем, для промежуточной версии это test.domain.com, а для производственной среды - domain.com).
- branch_universal_link_domains - это массив строк, содержащий оба домена приложений, например test.domain.com и domain.com.
Все эти поля присутствуют в файлах .plist для обеих сред.
Также мы создали файл .entitlements, в котором разместили связанные домены. Он содержит 6 значений:
- applinks: domain.com
- appinks: test.domain.com
- appinks: XXXX-alternate.test-app.link
- приложения: XXXX.test-app.link
- appinks: XXXX-alternate.app.link
- appinks: XXXX.app.link
и этот файл добавляется как к промежуточным, так и к производственным целям.
В моем AppDelegate я создал такую ветку:
Branch.setUseTestBranchKey(Configuration.branchTestKeyEnabled)
let branch: Branch = Branch.getInstance()
branch.initSession(launchOptions: launchOptions, andRegisterDeepLinkHandler: {params, error in
if error == nil {
print("params: %@", params as? [String: AnyObject] ?? {})
} else {
print(error)
}
})
Где
Configuration.branchTestKeyEnabled
верно для постановки и ложно для производства.
Позже после запуска я пытаюсь получить такие параметры ссылки:
let branch = Branch.getInstance()
let params = branch?.getLatestReferringParamsSynchronous() as? [String : Any]
// Do something with parameters
Вот отчет из сценария проверки: Report
Я предполагаю, что с моей конфигурацией что-то не так, но я не понимаю, почему она ведет себя так непоследовательно.