Как приложение 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.