Android登录设计和开发-方法和最佳实践

Android登录设计和开发-方法和最佳实践,android,login,Android,Login,好的。我开始为我们的企业web应用程序开发Android应用程序。刚刚开始登录屏幕活动设计 此应用程序完全由RESTFul API驱动 我想了解如何在应用程序中开发登录/注销功能。 据我所知,应用程序世界中没有会话概念。此外,对于API,我们需要在每个请求中发送用户名和密码(基本身份验证)。因此,显然,我们需要将登录凭据保存在本地存储中的某个位置,以便与每个请求一起发送 以下是我对安卓系统的基本了解 当用户输入登录信息并按下按钮时,我们将启动对API的HTTP调用。如果登录凭据有效,则必须在本地

好的。我开始为我们的企业web应用程序开发Android应用程序。刚刚开始登录屏幕活动设计

此应用程序完全由RESTFul API驱动

我想了解如何在应用程序中开发登录/注销功能。 据我所知,应用程序世界中没有会话概念。此外,对于API,我们需要在每个请求中发送用户名和密码(基本身份验证)。因此,显然,我们需要将登录凭据保存在本地存储中的某个位置,以便与每个请求一起发送

以下是我对安卓系统的基本了解

当用户输入登录信息并按下按钮时,我们将启动对API的HTTP调用。如果登录凭据有效,则必须在本地存储凭据。选择是

  • SQLite
  • 共享偏好。(我从来没用过。但我想,我们可以用这个)
  • 捆绑(不确定这是否是一个选项)
  • 还有其他选择吗

    我希望确保遵循最佳实践,同时从性能和体系结构的角度来看,不会牺牲

    对于注销,我想我只需要清除本地存储的凭据并显示登录活动


    有没有其他更好的方法?

    一般来说,有三种方法可以在Android中持久化数据:SQLite、
    SharedReferences
    ,以及通过Java I/O读取/写入文件。SQLite最适合于关系数据,但因为您只需要存储用户的凭据,我建议您使用SharedReferences。在我看来,它就像一个简单的键值数据模型

    SharedReferences
    基本上只是直接文件I/O的封装——也就是说,底层实现仍然是文件读取和写入,但对于键值对简化了。我不太了解加密,但是在将密码存储在<代码> SydPrase对象之前,您可能必须自己处理这个问题(也请考虑JaiSoni的建议:使用访问令牌代替)。不过,请放心,如果您创建
    SharedReferences
    并将其设置为
    MODE\u PRIVATE
    ,其他应用程序将无法访问共享的prefs文件

    我相信这几乎是一个标准的实现。如果你看这一页,你真正能做的只有这么多:

    我还要指出,直接文件I/O的一个复杂性是,您必须决定将文件存储在何处——内部或外部内存(例如SD卡)——并因此检查其可用性(并非所有设备都有SD卡插槽,有时内部内存被注册为设备的外部内存)。因此,只需使用共享优先权即可


    对于注销,这可能很有用:

    我认为在应用程序中存储密码是个坏主意,更好的方法是在用户首次登录时使用用户凭据发出请求。服务器返回访问令牌将此访问令牌保存在
    SharedReferences
    中,以用于获取用户详细信息等其他目的。在请求中使用令牌。

    会话:为维护会话创建自己的类。这是一个很好的例子。

    我建议使用Android功能

    有一个非常好的分步指南,介绍所有需要组合的部分

    一般的想法是向用户提供用户名/密码,并让AccountManager安全地存储它们


    当您需要身份验证令牌时,您向AccountManager请求一个,它将返回一个缓存的令牌,或者回拨到您的代码中(传递用户名/密码),然后您向身份验证服务打电话以获取一个新的令牌。

    为什么需要将登录凭据保留在文件或数据库中?你想在应用程序重新启动后自动登录吗?如果不需要持久性,您可以将凭据放入静态java成员中。

    谢谢。我想知道,这是否是一种标准的方法。或者有更好的方法。关于注销?很好的建议。不过,这需要他们修改后端,对吗?如果访问令牌机制尚未实现,也就是说。@mattquiros是的,您将需要支持访问的web服务token@mattquiros你是对的。这是后端的业务逻辑变化。现在不能这样做。我对第三段感到困惑。当您将数据存储在帐户中时,它是否会在某个时间过期?这意味着,如果用户在应用程序的中间,在某些活动中,如果帐户不给我U/P,我需要显示登录屏幕来再次获取U/P吗?@ KeavrRAVE他正在考虑重用令牌从优先权。用户名/密码不会过期。从Web服务返回的身份验证令牌可能会过期(在服务器端),如果发生这种情况,您需要通知AccountManager令牌已过期,这将触发回调,指示您获取新的身份验证令牌token@JaiSoni,使用AccountManager时,访问令牌不存储在首选项中,此处没有authtocken机制。REST调用在头中需要U/P(基本身份验证)是否可以在整个应用程序中、在整个用户会话中访问?不确定在运行时如何为静态成员分配用户名和密码?如果将其公开,则可以访问。有关详细信息,请参见如何在运行时实例化/分配静态变量的值?只是一个想法——如果将静态变量公开,这不是很危险,因为其他应用程序将可以访问它吗?保护,而不是公共或私人,怎么样?