Как приложение GitHub android использует аутентификацию?

Я копаю исходный код приложения GitHub android .

Я пытаюсь выяснить, как они заставляют LoginActivity отображаться при первом запуске приложения. В своем манифесте они, похоже, имеют HomeActivity поскольку MAIN и LoginActivity запускаются явно .

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

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

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

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

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

String token = account.getAuthToken();

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

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

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