我在Android SDK中看到了AccountManager,它用于存储帐户信息。因此,我找不到任何关于其目的的一般性讨论。有谁知道有关AccountManager背后的意图以及它为您购买的内容的任何有用的讨论?对于哪种类型的账户适合的任何意见?这是您将用户的帐户信息用于一般Web服务的位置吗?
答案 0 :(得分:93)
这个问题有点陈旧,但我认为它仍然有很好的兴趣。
AccountManager
,SyncAdapter
和ContentProvider
一起使用。
SyncAdapter
without an Account
in the AccountManager
。SyncAdapter
without a ContentProvider
。但你可以:
ContentProvider
而不使用其他人。AccountManager
(但在Android 2.2 / Froyo API 8之前使用cannot use an AccountManager
without a SyncAdapter
)使用AccountManager
/ SyncAdapter
/ ContentProvider
:
AccountManager
为用户提供了一个中心点(设置>帐户)来定义他们的凭据SyncAdapter
进行同步。这可以很好地优化电池(例如,当网络关闭时不进行同步)ContentProvider
是跨应用程序共享数据的便捷方式
注意:有other methods of inter-process communication on Android。ContentProvider
在后台线程中调度数据库访问AsyncQueryHanlder
有助于查询后台线程中的ContentProvider
,防止应用程序无响应(ANR)错误,而不要求您明确处理线程。ContentProvider
与ContentResolver
的观察者联系:这意味着在内容发生变化时很容易通知视图 底线:如果您想要同步来自网络资源的数据,框架AccountManager
/ SyncAdapter
/ ContentProvider
会有所帮助。 API 7还需要假/ Dumb implementations。
AsyncTaskLoader
最后,如果您使用SyncAdapter
,请认真考虑Firebase Cloud Messaging(以前称为Google云消息传递),即“推送通知”,以获得更新的更新和优化的电池使用情况。
答案 1 :(得分:23)
AccountManager类已与您的手机帐户集成。因此,如果您按照所有指南操作并使其正常工作,您会在“设置 - >帐户和同步”菜单下看到您的帐户。从那里你可以自定义它们甚至删除它们。此外,accountManager还有一个帐户的身份验证票证缓存。 如果您不打算同步帐户,也可以使用此功能(据我所知)。
如果您不希望您的帐户显示在该菜单下,则不应使用AccountManager并将帐户数据存储在其他地方(可能在共享首选项中)http://developer.android.com/guide/topics/data/data-storage.html
答案 2 :(得分:14)
来自http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/:
拼图的第一部分是 称为帐户身份验证器,其中 定义用户帐户的方式 出现在“帐户&同步” 设置。实施帐户 Authenticator需要3件:a 返回子类的服务 AbstractAccountAuthenticator来自 onBind方法,一个提示活动 用户输入他们的凭证, 和一个描述你的如何的xml文件 帐户显示时应该看起来 用户。你还需要添加 android.permission.AUTHENTICATE_ACCOUNTS 允许你的 的AndroidManifest.xml。
答案 3 :(得分:4)
AccountManager
因以下原因而有用:
Accounts
的主要原因,但是,因为您可以在应用中轻松管理它,而无需使用这种看似奇特的Accounts
... Accounts
的另一个好处是,每次用户请求授权功能时,都会使用用户名和密码取消传统授权,因为身份验证是在后台进行的,并且要求用户他们的密码仅在某些条件下,我稍后会知道。Accounts
功能也无需定义自己的帐户类型。您可能会遇到使用Google帐户进行授权的应用,这样可以省去制作新帐户和记住用户凭据的麻烦。Accounts
可以通过设置→帐户Accounts
轻松管理跨平台用户授权。例如,客户端可以在他们的Android设备和PC中同时访问受保护的材料,而无需重复登录。Accounts
功能的一个重要原因是将依赖于Accounts
的所有业务中涉及的双方分开,即所谓的身份验证者和资源所有者,而不会损害客户端(用户) )的证书。这些条款似乎相当含糊,但在阅读以下段落之前不要放弃...... 让我详细说明后者的视频流应用程序示例。 A公司是与B公司签订合同的视频流业务的持有者,为其某些成员提供优质流媒体服务。公司B使用用户名和密码方法来识别其用户。对于公司A来认可B的高级会员,一种方法是从B获取它们的列表并使用类似的用户名/密码匹配机制。这样,验证者和资源所有者是相同的(公司A)。除了用户有义务记住第二个密码之外,很可能他们设置了与公司B的个人资料相同的密码来使用来自A的服务。这显然是不利的。
为了消除上述缺点,引入了OAuth。作为授权的开放标准,在上面的示例中,OAuth要求授权由公司B(身份验证者)通过为符合条件的用户(第三方)发布一些称为访问令牌的令牌,然后向公司A(资源所有者)提供令牌。所以没有令牌意味着没有资格。
我已经在我的网站here. AccountManager
{{1}}详细阐述了这一点及更多内容。