我应该如何使用Android AccountManager?

Phi*_*hil 147 android accountmanager

我在Android SDK中看过AccountManager,它用于存储帐户信息.因此,我找不到任何关于其目的的一般性讨论.有谁知道有关AccountManager背后的意图以及它为您购买的内容的任何有用的讨论?对于哪种类型的账户适合的任何意见?这是您将用户的帐户信息用于一般Web服务的位置吗?

rds*_*rds 93

这个问题有点陈旧,但我认为它仍然有很好的兴趣.

AccountManager,SyncAdapterContentProvider一起去.

但是你可以:

AccountManager/ SyncAdapter/ ContentProvider:

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

结论:如果要从Web资源同步数据,框架AccountManager/ SyncAdapter/ ContentProvider会有所帮助.API 7还需要伪/ 哑实现

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

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


Gab*_*Gab 23

AccountManager类已与您的电话帐户集成.因此,如果您按照所有指南操作并使其正常工作,您将在"设置 - >帐户和同步"菜单下看到您的帐户.从那里你可以自定义它们甚至删除它们.此外,accountManager还有一个帐户的身份验证票证缓存.如果您不打算同步帐户,也可以使用此功能(据我所知).

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


Mac*_*rse 14

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

第一部分拼图称为帐户身份验证器,用于定义用户帐户在"帐户和同步"设置中的显示方式.实现帐户身份验证器需要3件:从onBind方法返回AbstractAccountAuthenticator子类的服务,提示用户输入其凭据的活动,以及描述帐户在向用户显示时应如何显示的xml文件.您还需要将android.permission.AUTHENTICATE_ACCOUNTS权限添加到AndroidManifest.xml.

  • 您可以将帐户管理员用于任何类型的帐户,同步以任何方式存储的任何类型的数据.查看https://github.com/maxpower47/PinDroid,了解使用它将书签同步到sqlite数据库的示例. (6认同)
  • 这是一篇好文章,但您认为AccountManager仅适用于同步联系人和电子邮件的帐户,或者我们是否应该将其用于具有用户ID和密码的任何内容? (3认同)

Ali*_*Nem 9

AccountManager是由于以下原因好:

  • 首先是在单一帐户类型下存储具有不同级别的应用程序功能访问权限的多个帐户名称。例如,在视频流应用程序中,一个可能有两个帐户名:一个具有对有限数量视频的演示访问权限,另一个具有对所有视频的整月访问权限。Accounts然而,这不是使用 的主要原因,因为您可以在您的应用程序中轻松管理它,而无需这个看起来很花哨的Accounts东西......。
  • 使用的另一个优点Accounts是摆脱了每次用户请求授权功能时使用用户名和密码的传统授权,因为身份验证是在后台进行的,并且仅在特定条件下才要求用户输入密码,这稍后我会谈到它。
  • Accounts在 android 中使用该功能还消除了定义自己的帐户类型的需要。您可能遇到过使用 Google 帐户进行授权的应用程序,这样可以省去创建新帐户和记住用户凭据的麻烦。
  • Accounts可以通过设置独立添加吗?帐户
  • 可以使用 轻松管理跨平台用户授权Accounts。例如,客户端可以同时在他们的安卓设备和 PC 中访问受保护的材料,而无需重复登录。
  • 从安全的角度来看,在对服务器的每个请求中使用相同的密码允许在非安全连接中进行窃听。这里密码加密不足以防止密码被盗。
  • 最后,Accounts在 android 中使用该功能的一个重要原因是将涉及任何依赖于 的业务的两方(Accounts所谓的身份验证者和资源所有者)分开,而不损害客户端(用户)的凭据。这些条款可能看起来相当模糊,但在阅读以下段落之前不要放弃......

让我用一个视频流应用程序的例子来详细说明后者。公司 A 是与公司 B 签订合同的视频流媒体业务的持有人,为其某些成员提供优质的流媒体服务。B 公司采用用户名和密码方法来识别其用户。对于 A 公司识别 B 的高级会员,一种方法是从 B 获取他们的列表并使用类似的用户名/密码匹配机制。这样,验证者和资源所有者是相同的(A 公司)。除了用户有义务记住第二个密码外,他们很可能在使用 A 公司的服务时设置了与 B 公司配置文件相同的密码。这显然是不利的。

为了弥补上述缺点,引入了OAuth。作为授权的开放标准,在上面的例子中,OAuth 要求 B 公司(身份验证者)通过为符合条件的用户(第三方)颁发一些称为 Access Token 的令牌,然后向 A 公司(资源所有者)提供授权来完成授权。令牌。所以没有令牌意味着没有资格。

AccountManager在我的网站上对此进行了更多详细说明

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