Сеансы Branch.io против маршрутизации по глубоким ссылкам

Используя Branch.io, в их документации говорится, что вы должны начать сеанс в onStart вот так

Branch branch = Branch.getInstance();

branch.initSession(new Branch.BranchReferralInitListener(){
    @Override
    public void onInitFinished(JSONObject referringParams, BranchError error) {
        if (error == null) {
            // params are the deep linked params associated with the link that the user clicked -> was re-directed to this app
            // params will be empty if no data found
            // ... insert custom logic here ... // <--- NOTE THIS PLEASE
        } else {
            Log.i("MyApp", error.getMessage());
        }
    }
}, this.getIntent().getData(), this);

Хотя мое приложение всегда открывается со ссылкой на ветку, метод inInitFinished никогда не вызывается.

Итак, я немного углубился в документ и узнал о маршрутизации глубоких ссылок, в которой говорится, что нужно обрабатывать все в onResume следующим образом:

super.onResume();
if (Branch.isAutoDeepLinkLaunch(this)) {
    try {
        String autoDeeplinkedValue = Branch.getInstance().getLatestReferringParams().getString("product_picture");
        launch_mode_txt.setText("Launched by Branch on auto deep linking!"
                + "\n\n" + autoDeeplinkedValue);
    } catch (JSONException e) {
        e.printStackTrace();
    }
} else {
    launch_mode_txt.setText("Launched by normal application flow");
}

Хотя мое приложение открывается со ссылкой, попытка / улов больше никогда не достигается.

Какой из них я должен использовать для обработки активности при открытии с помощью глубоких ссылок?


person KasparTr    schedule 16.09.2016    source источник


Ответы (1)


Алекс из Branch.io: эти два метода фактически работают вместе и служат разным целям.

onStart()

Это инициализирует сеанс Branch и выполняется всякий раз, когда начальная заставка Activity (, как определено фильтром намерений в вашем файле манифеста) загружается. Вы можете делать все, что связано с маршрутизацией прямо здесь, и это также место, где вы должны начать создавать настраиваемый метод маршрутизации ссылок, если вам нужно что-то продвинутое.

onResume()

Фрагмент, на который вы ссылаетесь, взят из нашей автоматической маршрутизации ссылок на контент. метод. Причина, по которой это отдельно, заключается в том, что вы фактически делаете это в другом Activity, чем у вас есть вызов onStart(). Процесс состоит в том, что ваше приложение сначала проходит Activity с вызовом onStart(), а затем перенаправляется на Activity с вызовом onResume() для отображения содержимого глубинной ссылки.

Вызов isAutoDeepLinkLaunch() в этом фрагменте необходим только в том случае, если вы используете метод автоматической маршрутизации глубинных ссылок (включен в файле манифеста). Вы используете этот метод, чтобы определить, запущено ли действие функцией AutoDeeplinking. Обратите внимание, что автоматическое создание ссылок отличается от открытия вашего приложения по щелчку ссылки и используется для автоматического перехода к определенному действию после открытия ссылки, если вы не решите создать более сложный собственный метод маршрутизации глубинных ссылок.

Я догадываюсь, почему вы не справляетесь onInitFinished(), что вам все равно может понадобиться включить автоматическое управление сеансом. Проверьте это и дайте мне знать, если у вас все еще есть проблемы!

person Alex Bauer    schedule 20.09.2016