我应该怎样使用Android AccountManager?

我在Android SDK中看到了AccountManager,它用于存储帐户信息。 因此,我无法find它的目的是什么一般的讨论。 有没有人知道有什么有用的讨论AccountManager背后的意图是什么,它买什么? 任何意见,这是适合什么types的帐户? 这是否会将您的用户的帐户信息放到一般的Web服务中?

这个问题有点老了,但是我觉得这个问题还是很有意思的。

AccountManagerSyncAdapterContentProvider一起。

  • AccountManager不能有没有AccountSyncAdapter
  • 没有ContentProvider情况下,您不能拥有SyncAdapter

但是你可以:

  • 没有其他的使用ContentProvider
  • 使用AccountManager而不使用其他(但是在Android 2.2 / Froyo API 8之前, 不能使用没有SyncAdapterAccountManager

使用AccountManager / SyncAdapter / ContentProvider

  • AccountManager为用户提供一个中心点(设置>帐户)来定义他们的凭证
  • Android决定何时可以通过SyncAdapter完成同步。 这可以很好地优化电池(例如,在networkingclosures时不进行同步)
  • ContentProvider是跨应用程序共享数据的便捷方式注意: Android上还有其他的进程间通信方法 。
  • ContentProvider在后台线程中调度数据库访问 AsyncQueryHanlder有助于在后台线程中查询ContentProvider ,从而防止应用程序不响应(ANR)错误,同时不需要显式处理线程。
  • ContentProviderContentResolver的观察者联系在一起:这意味着当内容改变时很容易通知视图

底线 :如果您想同步Web资源中的数据,框架AccountManager / SyncAdapter / ContentProvider可以提供帮助。 API 7上还需要虚假实现 。另外

  • 如果你只想存储数据,你应该考虑一个更简单的数据存储机制
  • 如果您只需要获取唯一资源,则可以使用AsyncTaskLoader
  • 如果要asynchronous加载图像,可以使用Square Picasso等专业库
  • 如果你只想在给定的时间执行一些代码,你可以考虑服务/报警
  • 只能从API> = 7(这不再重要)

最后,如果您使用SyncAdapter ,请认真考虑Firebase云消息传递 (以前的Google云消息传递),即“推送通知”,以获得更新更新并优化电池使用情况。

AccountManager类与您的电话帐户集成在一起。 所以,如果你按照所有的指导,并使其正常工作,你会看到菜单“设置 – >帐户和同步”下的帐户。 从那里你可以定制它们甚至删除它们。 此外,accountManager拥有您帐户的身份validation票证的caching。 如果您不打算同步您的帐户(据我所知),这也可以使用。

如果您不希望您的帐户出现在该菜单下,则不应使用AccountManager并将帐户数据存储在其他地方(可能在共享首选项中) http://developer.android.com/guide/topics/data/data -storage.html

http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/

第一个难题叫做帐户validation器,它定义用户帐户在“帐户和同步”设置中的显示方式。 实现Account Authenticator需要3个部分:从onBind方法返回AbstractAccountAuthenticator的子类的服务,提示用户input凭据的活动以及描述帐户在向用户显示时应该如何显示的xml文件。 您还需要将Android.permission.AUTHENTICATE_ACCOUNTS权限添加到您的AndroidManifest.xml。

AccountManager有以下原因:

  • 首先是在一个帐户types下存储多个帐户名称,并具有不同级别的应用function访问权限。 例如,在videostream应用程序中,可能会有两个帐户名称:一个可以访问有限数量的video,另一个可以全天访问所有video。 这不是使用Accounts主要原因,但是,因为您可以轻松地在您的应用程序中pipe理它,而无需使用这个看起来很奇怪的Accounts
  • 使用Accounts的另一个好处是,每次用户请求授权function时,都要用用户名和密码去除传统的授权,因为authentication是在后台进行的,只有在一定的条件下才会要求用户input密码,我将在稍后讨论。
  • 在android中使用Accountsfunction也不需要定义自己的帐户types。 您可能遇到了使用Google帐户进行授权的应用程序,这可以节省制作新帐户和记住用户凭据的麻烦。
  • Accounts可以通过设置→账户独立添加
  • 跨平台的用户授权可以使用Accounts轻松pipe理。 例如,客户端可以在Android设备和PC中同时访问受保护的资料,而无需重复login。
  • 从安全的angular度来看,在服务器的每个请求中使用相同的密码可以在非安全连接中窃听。 密码encryption在这里是不够的,以防止密码被盗。
  • 最后,在Android中使用Accountsfunction的一个重要原因是将涉及任何依赖于Accounts业务(称为validation者和资源所有者)的双方分开,而不会影响客户端(用户)的凭据。 这些条款可能看起来相当模糊,但是在阅读下面的段落之前,不要放弃

让我用一个videostream应用程序的例子来说明后者。 A公司是与B公司签约的videostream媒体业务的持有者,为其某些会员提供优质的stream媒体服务。 公司B采用用户名和密码方法来识别用户。 对于A公司认可B的高级会员,一种方法是从B获得他们的名单,并使用类似的用户名/密码匹配机制。 这样,validation者和资源所有者是一样的(公司A)。 除了用户有义务记住第二个密码之外,他们很可能会将他们的公司B的configuration文件设置为使用来自A的服务的相同密码。这显然是不利的。

为了消除上述缺点,引入了OAuth。 作为授权的开放标准,在上面的例子中,OAuth要求公司B(authentication者)通过为符合条件的用户(第三方)颁发一个称为访问令牌的令牌,然后向公司A(资源所有者)令牌。 所以没有标记意味着没有资格。

我在这里详细阐述了更多关于AccountManager信息。

这是一个使用AccountManager的简单应用程序