【问题标题】:How does GitHub android app force authentication?GitHub android 应用如何强制认证?
【发布时间】:2014-01-09 12:34:53
【问题描述】:

我正在挖掘GitHub android app source code

我正在尝试了解他们如何强制 LoginActivity 在应用程序首次启动时显示。 在他们的清单they seem to have HomeActivity as the MAINLoginActivity is only launched explicitly 中。

这意味着在应用首次打开时始终会启动HomeActivity。但是,我在HomeActivity 中没有看到任何逻辑表明他们检查帐户是否存在,如果不存在则转到LoginActivity

在代码中LoginActivityonly launched from here

【问题讨论】:

  • SharedPreferences,如果帐户已保存,则登录如果不显示活动。我不知道他们是怎么做到的,但这是一种可以做到的方式..

标签: java android github android-authenticator


【解决方案1】:

好吧,整个 Android 帐户认证和同步适配器机制乍一看可能相当复杂,GitHub Android 应用程序在那里增加了另一层复杂性,但我会尝试向您解释整个流程(希望我的理解是正确的)。

首先,如果您还不熟悉 Android Authenticator,我会向您推荐 this article。 GitHub Android 使用与那篇文章中描述的完全相同的机制。

你说得对,HomeActivity 先启动。然后它启动OrganizationLoader 以加载组织列表。该加载程序从OrganizationService 调用方法,该方法是GitHub Java API 的一部分。 GitHub Android 使用RoboGuice 配置注入最常用的类,如 GitHub API 服务。可以看到,OrganizationService 是在ServicesModule 中创建的。 它将GithubClient 作为构造函数参数,还有一个GitHubModule 配置为在需要GitHubClient 的实例时返回AccountClientAccountClient 覆盖 configureRequest() 方法并调用

String token = account.getAuthToken();

这是GitHubAccount类的一个方法,它从内部Android的AccountManager调用一个方法。并且AccountManager 被配置为使用您所说的AccountAuthenticator,如果设备上没有帐户,则返回LoginActivity 意图。

希望这会有所帮助:)

【讨论】:

  • 太棒了!我认为this article 的链接已损坏。可以发一下文章链接吗?再次感谢您的帮助。
【解决方案2】:

该应用使用的是Android账户系统,实际上是在你已经找到的类中实现的。该帐户系统将在某个时候调用getAuthToken(),并且有一个简单的检查whether the password is empty,它将LoginActivity 的Intent 返回到帐户管理系统。使用该意图,帐户管理系统将回调应用程序并最终调用 LoginActivity。

【讨论】:

    猜你喜欢
    • 2016-06-06
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多