Как приложение GitHub для Android вызывает аутентификацию?

Я копаюсь в исходном коде приложения для Android GitHub.

Я пытаюсь выяснить, как они заставляют LoginActivity чтобы показать, когда приложение запускается впервые. В своем манифесте они, кажется, имеют HomeActivity как ГЛАВНАЯ и LoginActivity запускается только явно.

Так что это означает, что всегда HomeActivity запускается при первом запуске приложения. Тем не менее, я не вижу никакой логики в HomeActivity, которая показывает, что они проверяют, присутствует ли учетная запись или нет, если ее нет, перейдите к LoginActivity

В коде LoginActivity запускается только отсюда.

2 ответа

Решение

Хорошо, весь механизм аутентификации и синхронизации учетных записей Android на первый взгляд может быть довольно сложным, и приложение GitHub для Android добавляет еще один уровень сложности, но я постараюсь объяснить вам весь процесс (надеюсь, что мое понимание верно),

Сначала я бы порекомендовал вам эту статью об Android Authenticator, если вы еще не знакомы с предметом. GitHub Android использует точно такой же механизм, описанный в этой статье.

Вы правы, HomeActivity запускается первым. Затем он запускает OrganizationLoader для загрузки списка организаций. Этот загрузчик вызывает метод из OrganizationService который является частью GitHub Java API. GitHub Android использует RoboGuice настроить внедрение наиболее часто используемых классов, таких как сервисы GitHub API. Вы можете видеть, что OrganizationService создан в ServicesModule. Занимает GithubClient в качестве параметра конструктора, а также есть GitHubModule, который настроен на возврат AccountClient, когда экземпляр GitHubClient нужно.AccountClient Переопределение configureRequest() метод и вызывает

String token = account.getAuthToken();

Это метод класса GitHubAccount, который вызывает метод из внутреннего Android AccountManager, А также AccountManager настроен на использование того аккаунта AccountAuthenticator, о котором вы говорили, который возвращает LoginActivity намерение, если на устройстве нет учетной записи.

Надеюсь это поможет:)

Приложение использует систему учетных записей Android, которая фактически реализована в классе, который вы уже нашли. Эта система учетных записей будет в какой-то момент вызова getAuthToken()и там есть простая проверка , является ли пароль пустым, который возвращает Намерение для LoginActivity в систему управления учетными записями. Используя это намерение, система управления учетными записями перезвонит в приложение и, наконец, вызовет LoginActivity.

Другие вопросы по тегам