Как обрабатывать маршрутизацию активности с помощью Branch.io?

Мы используем Branch, чтобы предоставить нашим пользователям настраиваемый интерфейс, когда приложение запускается/устанавливается с пользовательского URL-адреса. Этот настраиваемый интерфейс должен быть доступен для новых пользователей (тех, кто загружает приложение и регистрируется в первый раз) и для зарегистрированных пользователей, у которых уже установлено приложение.

Этот пользовательский опыт является обязательным для нас. Если пользователи нажимают на этот URL-адрес, он ДОЛЖЕН получить правильный запрос.

У нас есть два вида деятельности:

Действие A — это действие средства запуска. Он выполняет функцию маршрутизации. Это означает, что он будет выглядеть локально, если пользователь вошел в систему или предлагает ему классические кнопки входа и регистрации.

Занятие B — это домашнее занятие. Он запускается действием A, когда: - Пользователь уже вошел в систему - Пользователь входит в систему - Пользователь регистрируется. Здесь происходит «настраиваемый» опыт (пользователю предлагается диалоговое окно всякий раз, когда он входит в приложение после нажатия URL-адреса) .

В Activity A я использую следующий метод для получения информации, предоставленной Branch, в onStart():

 branch.initSession(new Branch.BranchReferralInitListener()
        {
            @Override
            public void onInitFinished(JSONObject referringParams, BranchError error)
            {
                 // Searches through the JSONObject for key/value pairs...
            }
        };

Параллельно я запускаю пару Handler/Runnable, которая служит тайм-аутом всякий раз, когда обратный вызов требует слишком много времени для срабатывания (например, когда сеть очень медленная). Это предотвращает отображение заставки в течение нескольких минут, если что-то пойдет не так.

Но, делая это, я не чувствую, что поступаю правильно.

Предположим, что мой тайм-аут для заставки установлен на 10 секунд и что обратный вызов вызывается только через 15 секунд. Если пользователь уже вошел в систему, он будет перенаправлен на Действие B, как только истечет 10 секунд в Действии A. Поэтому ему никогда не будет предложено диалоговое окно на главном экране.

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


person Aymeric    schedule 28.10.2015    source источник


Ответы (1)


Branch должен сообщить об ошибке через 5 секунд, если сеанс завершается сбоем (обратный вызов), в onInit вы можете проверить BranchError error, чтобы увидеть, является ли он нулевым, и если это не так, то действовать соответствующим образом. Это устранило бы необходимость независимого срабатывания запуска через 10 секунд.

Дай мне знать, если это работает.

person Evan    schedule 29.10.2015
comment
В моем случае Branch может работать в течение нескольких минут, прежде чем вызвать ошибку, если я на 2G (Edge). - person Aymeric; 30.10.2015
comment
Привет, Эймерик, пожалуйста, отправьте запрос непосредственно в Branch (с информацией о том, какое приложение вы тестируете), и ваша проблема будет диагностирована. support.branch.io/support/tickets/new - person Evan; 30.10.2015