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来记住用户,无论用户有多少的设备,只须要几步额外的操作就能够达到同步目的。

【老外写文章习惯就是这样,讲某个技术之前,说一大堆为什么选择这个技术,而不是选择其它的方法。这样的精神非常值得我们学习,先问WHY?而不仅仅立刻拿来灌输】

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,谢谢!



【Android Training - UserInfo】记住登入用户的信息[Lesson 1 - 使用AccountManager来记住用户]的更多相关文章

  1. 手游聚合SDK开发之远程开关---渠道登入白名单

    白名单有啥好说的呢?无非就是筛选登入,大家第一眼看到就是这个印象,白名单也是有文章的,弄的时机不同会给你带来很不错的收益,注意是收益.还是举例来说,游戏上线前渠道都会做一个预下载,一般提前1-2天,这 ...

  2. C#-MVC开发微信应用(7)--在管理系统中同步微信用户分组信息

    在前面几篇文章中,逐步从原有微信的API封装的基础上过渡到微信应用平台管理系统里面,逐步介绍管理系统中的微信数据的界面设计,以及相关的处理操作过程的逻辑和代码.希望从一个更高的层次介绍微信的开发. 在 ...

  3. 基于SqlSugar的开发框架循序渐进介绍(6)-- 在基类接口中注入用户身份信息接口

    在基于SqlSugar的开发框架中,我们设计了一些系统服务层的基类,在基类中会有很多涉及到相关的数据处理操作的,如果需要跟踪具体是那个用户进行操作的,那么就需要获得当前用户的身份信息,包括在Web A ...

  4. Android中获取系统上安装的APP信息

    Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00003259 Android中获取系统上安装的APP信 ...

  5. C# AD(Active Directory)域信息同步,组织单位、用户等信息查询

    示例准备 打开上一篇文章配置好的AD域控制器 开始菜单-->管理工具-->Active Directory 用户和计算机 新建组织单位和用户   新建层次关系如下: 知识了解 我们要用C# ...

  6. linux基础之用户登录信息查看命令

    用户登录信息查看命令 1.who命令 同一个账号通过不同终端登录也属于不同的登录信息,这里不同的终端包含虚拟终端和模拟终端,因为一个用户通过一个终端登录属于一个session 基本介绍 打印当前系统上 ...

  7. Django开发简单采集用户浏览器信息的小功能

    Django开发简单采集用户浏览器信息的小功能 Centos环境准备 yum install –y python-pip export http_proxy=http://10.11.0.148:80 ...

  8. [Django]登陆界面以及用户登入登出权限

    前言:简单的登陆界面展现,以及用户登陆登出,最后用户权限的问题 正文: 首先需要在settings.py设置ROOT_URLCONF,默认值为: ROOT_URLCONF  = 'www.urls'# ...

  9. java web实现在cookie中保存用户名和密码,用户自动登入

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

随机推荐

  1. cp命令的实现

    #include <unistd.h> #include <fcntl.h> #include <stdlib.h> #define BUFFERSIZE 4096 ...

  2. centos 安装ganglia监控工具

    一个.ganglia基本介绍 ganglia它是一个分布式监控系统,那里有两个Daemon,每间:clientGangliaMonitoring Daemon (gmond)和服务端GangliaMe ...

  3. ALV调用的几个标准函数

    ALV的调用主要由以下几个标准函数实现,所有函数的输入输出参数必须大写,否则系统会出现异常中止,相关函数如下: 1)REUSE_ALV_FIENDCATALOG_MERGE:根据内表结构返回FIELD ...

  4. Delphi事件的广播 good

    明天就是五一节了,辛苦了好几个月,借此机会应该尽情放松一番.可是想到Blog好久没有写文章,似乎缺些什么似的.这几个月来在项目中又增长了许多经验,学到许多实际应用的知识.不如把一些比较有用的记录下来, ...

  5. linux c正则

    c 正则 --------------------------------------------------    标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一 ...

  6. win32多线程程序设计笔记(第二章)

    第二章线程的第一次接触,主要讲了如何创建线程以及需要注意的几点. 一.创建线程 与调用函数的过程类似;线程只不过用CreateThread的API将函数封装起来,并产生一个与主程序同时执行的程序来调用 ...

  7. Tengine中的proxy_upstream_tries

    upsream xxx { server 192.168.100.100; server 192.168.100.101; server 192.168.100.102; } server { loc ...

  8. LCS小结(O(∩_∩)O~吽吽)

    LCS!~如果你在百度上搜这个的话会出来”英雄联盟冠军联赛”,orz..但是今天要讲的LCS是最长公共子序列 ,"Longest Common Subsequence "not&q ...

  9. 利用用户自己的server、tomcat下的解决iOS7.1企业应用无法安装应用程序 由于证书无效的问题

    1.环境 )操作系统:Windows server 2003.Windows server2008 )JDK:jdk 1.6 )apache-tomcat-6.0.35(注意版本号号,版本号6.0.1 ...

  10. 一个用 C 语言写的迷你版 2048 游戏,仅仅有 500个字符

    Jay Chan 用 C 语言写的一个迷你版 2048 游戏,仅仅有 487 个字符. 来围观吧 M[16],X=16,W,k;main(){T(system("stty cbreak&qu ...