Androidlogindevise和开发 – 方法和最佳实践

好的。 我开始为我们的企业Web应用程序开发一个Android应用程序。 刚刚开始login屏幕活动devise。

这个应用程序完全由RESTFul API驱动。

我想了解如何在应用程序中开发login/注销function。 据我所知,应用程序世界中没有Session概念。 另外,对于API,我们需要发送每个请求的用户名和密码(基本身份validation)。 显然,我们需要将本地存储中的login凭证保存在每一个请求中。

这是我从Android的基本知识中了解的。

当用户inputlogin信息并按下button时,我们将启动一个HTTP调用API。 如果login凭证是有效的,那么我们必须在本地存储凭证。 选项是

  1. SQLite的
  2. 共享首选项。 (我从来没有用过,但我假设,我们可以用这个)
  3. 捆绑(不知道这是否是一个选项)

任何其他的select?

我想确保我遵循最佳实践,而不是从性能和架构的angular度来牺牲。

而对于注销,我想我只需要消灭本地存储的凭据,并显示login活动。

有什么不同的更好的方法吗?

Related of "Androidlogindevise和开发 – 方法和最佳实践"

我会build议使用Android 帐户function。

这个博客有一个很好的一步一步的指导你需要放在一起的所有位。

总体思路是向AccountManager提供用户名/密码,并将其留给AccountManager以安全地存储。

当你需要一个authentication令牌时,你要求AccountManager提供一个令牌,它会返回一个caching的令牌,或者回拨你的代码(传递用户名/密码),然后你打电话给你的authentication服务来得到一个新的令牌。

我认为在应用程序中存储密码是不好的主意,更好的方法是只有当用户login服务器返回一个访问令牌时用户凭证作出请求保存在SharedPreferences此访问令牌rest目的,如获取用户详细信息使用令牌请求。
会议:创build自己的维护会话的类。 Hackbook就是一个很好的例子。

一般来说,您可以使用三种方法在Android中保存数据:SQLite, SharedPreferences ,以及读取/写入Java I / O文件。 SQLite是关系数据的最佳select,但是因为您只需存储用户的凭据,所以我build议您使用SharedPreferences。 在我看来,就像一个简单的键值数据模型。

SharedPreferences基本上只是直接文件I / O的封装 – 也就是说,底层实现仍然是文件读写,但是对于键值对来说是简化的。 我不太了解encryption,但是在将密码存储到SharedPreferences对象之前,您可能必须自己处理(也考虑JaiSoni的build议:改用访问令牌)。 但请放心,如果您创buildSharedPreferences并将其设置为MODE_PRIVATE ,则其他应用程序将无法访问共享的prefs文件。

我相信这几乎是一个标准的实现。 如果你看看这个页面,真的只有这么多你可以做: http : //developer.android.com/guide/topics/data/data-storage.html

我还可以指出,直接文件I / O的一个复杂性在于你必须决定在哪里存储文件 – 内部或外部存储器(例如,SD卡) – 并检查其文件可用性(并非所有设备都有SD卡插槽,有时内部存储器被注册为设备的外部存储器)。 所以,只要去共享首选项。

对于注销,这可能是有用的: 删除共享首选项

为什么您需要将login凭证保存在文件或数据库中? 你想在你的应用程序重新启动后自动login? 如果持久性没有必要,你可以把凭据放到一个静态的java成员中。