我应该怎样使用Android AccountManager?
我在Android SDK中看到了AccountManager,它用于存储帐户信息。 因此,我无法find它的目的是什么一般的讨论。 有没有人知道有什么有用的讨论AccountManager背后的意图是什么,它买什么? 任何意见,这是适合什么types的帐户? 这是否会将您的用户的帐户信息放到一般的Web服务中?
这个问题有点老了,但是我觉得这个问题还是很有意思的。
AccountManager
, SyncAdapter
和ContentProvider
一起。
- 在
AccountManager
不能有没有Account
的SyncAdapter
。 - 没有
ContentProvider
情况下,您不能拥有SyncAdapter
。
但是你可以:
- 没有其他的使用
ContentProvider
。 - 使用
AccountManager
而不使用其他(但是在Android 2.2 / Froyo API 8之前, 不能使用没有SyncAdapter
的AccountManager
)
使用AccountManager
/ SyncAdapter
/ ContentProvider
:
-
AccountManager
为用户提供一个中心点(设置>帐户)来定义他们的凭证 - Android决定何时可以通过
SyncAdapter
完成同步。 这可以很好地优化电池(例如,在networkingclosures时不进行同步) -
ContentProvider
是跨应用程序共享数据的便捷方式注意: Android上还有其他的进程间通信方法 。 -
ContentProvider
在后台线程中调度数据库访问AsyncQueryHanlder
有助于在后台线程中查询ContentProvider
,从而防止应用程序不响应(ANR)错误,同时不需要显式处理线程。 -
ContentProvider
与ContentResolver
的观察者联系在一起:这意味着当内容改变时很容易通知视图
底线 :如果您想同步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中使用
Accounts
function也不需要定义自己的帐户types。 您可能遇到了使用Google帐户进行授权的应用程序,这可以节省制作新帐户和记住用户凭据的麻烦。 -
Accounts
可以通过设置→账户独立添加 - 跨平台的用户授权可以使用
Accounts
轻松pipe理。 例如,客户端可以在Android设备和PC中同时访问受保护的资料,而无需重复login。 - 从安全的angular度来看,在服务器的每个请求中使用相同的密码可以在非安全连接中窃听。 密码encryption在这里是不够的,以防止密码被盗。
- 最后,在Android中使用
Accounts
function的一个重要原因是将涉及任何依赖于Accounts
业务(称为validation者和资源所有者)的双方分开,而不会影响客户端(用户)的凭据。 这些条款可能看起来相当模糊,但是在阅读下面的段落之前,不要放弃
让我用一个videostream应用程序的例子来说明后者。 A公司是与B公司签约的videostream媒体业务的持有者,为其某些会员提供优质的stream媒体服务。 公司B采用用户名和密码方法来识别用户。 对于A公司认可B的高级会员,一种方法是从B获得他们的名单,并使用类似的用户名/密码匹配机制。 这样,validation者和资源所有者是一样的(公司A)。 除了用户有义务记住第二个密码之外,他们很可能会将他们的公司B的configuration文件设置为使用来自A的服务的相同密码。这显然是不利的。
为了消除上述缺点,引入了OAuth。 作为授权的开放标准,在上面的例子中,OAuth要求公司B(authentication者)通过为符合条件的用户(第三方)颁发一个称为访问令牌的令牌,然后向公司A(资源所有者)令牌。 所以没有标记意味着没有资格。
我在这里详细阐述了更多关于AccountManager
信息。