Remembering Your User[记住你的用户]
- 每一个人都非常喜欢自己的名字能被人记住。当中最简单,最有效的使得你的app让人喜欢的方法是记住你的用户是谁,特别是当用户升级到一台新的设备或者是在tablet希望能够像在手机上一样使用(存有相同的数据,比方书签等)。可是怎样知道用户是谁,怎样在新的设备上识别出他们。
- 对于很多程序来说,能够使用AccountManager APIs来处理上面的问题。在用户授权下,你能够使用AccountManager来获取用户存储在设备上的账户名。
- 整合用户的账户,这样能够使得你能够做很多事情,比如:
- 自己主动填写用户的email地址。
- 获取绑定到用户的ID,而不是绑定到设备的。
Determine if AccountManager for You[推断AccountManager里是否有你]
- 程序通常使用以下三个方法之中的一个来尝试记住用户:
- (a)通知用户输入username。
- (b)取得一个唯一的ID来记住设备。
- (c)从AccountManager取得一个嵌入的账户。
- 选项(a)是有问题的。第一,在进入app之前通知用户来输入些什么,这会使得app不受欢迎[当然须要排除首次登入],第二,那不能保证username的唯一性[可能的前提是说某个app固定显示某个用户的信息,而不须要进行切换。这个理解起来有点怪怪的]。
- 选项(b)对于用户来说略微简单点,可是有点投机取巧的味道。更重要的是,这只使得用户只能在某个设备上被识别,当用户升级到新的设备上时,会导致app不再记得那些用户。
- 选项(c)是比較好的。Account Manager同意你获取存储在用户设备上的账户信息。以下我们会学习到使用AccountManager来记住用户,无论用户有多少的设备,只须要几步额外的操作就能够达到同步目的。
Decide What Type of Account to Use[推断使用的是什么类型的账户]
- Android设备能够依据很多不同的提供者来存储多个不同类型的账户。
- 当你为了某个账户名而使用AcccountManager进行查询的时候,能够选择使用Account Type来filter。
- 账户类型是一个唯一标识已经公布账户的String。比如,Google账户使用“com.google”,Twitter使用“com.twitter.android.auth.login”。
Request GET_ACCOUNT permission [请求GET_ACCOUNT的权限]
- 为了获得在设备上全部的账户列表,你的app须要有GET_ACCOUNTS权限,使用<uses-permission>标签在manifest文件里来加入请求权限。
<manifest ... > <uses-permission android:name="android.permission.GET_ACCOUNTS" /> ... </manifest>
Query AccountManager for a List of Accounts[查询出想要的账户列表]
-
一旦你决定须要查询哪些账户了,能够像以下的样例一样来获得一个Account的数组,里面均是与类型符合的账户信息。
AccountManager am = AccountManager.get(this); // "this" references the current Context Account[] accounts = am.getAccountsByType("com.google");
- 假设在数组里面不止一个账户,你须要先呈现出一个对话框来让用户选择当中一个。
Use the Account Object to Personalize Your App[使用账户对象来人性化你的app]
- Account对象里面包括了账户名(对于Google账户来说是一个邮件地址)。你能够使用这个信息来做不同的事情,比如:
- 在填写表格的时候给出相应的提示,这种话用户就不用手动输入完整的账户信息。
- 作为你自己线上数据库的使用与个性化信息的keyword。
Decide Whether an Account Name is Enough[仅有账户名是不够的]
- 账户名是记住用户的一个好方法,可是Account对象本身并不会保护你的数据或者让你訪问除账户名本身之外的不论什么东西。
- 假设你的app须要同意用户到线上訪问私人数据,你须要一些更加强大的东西:authentication。
- 下一节课会解释怎样通过线上服务来鉴定当前用户,怎样自己定义的一个认证机制,这样使得能够安装自己定义的账户。[也就是OAuth2的使用]。
转载请注明出处:http://blog.csdn.net/kesenhoo,谢谢!