在 Android 应用程序之间共享身份验证令牌

2023-11-27

我需要在 2 个或更多 Android 应用程序之间共享通用的持久登录(身份验证令牌)。诀窍在于,任何一个应用程序都不需要安装另一个应用程序即可工作。它们是相互独立的。

因此,在应用程序登录之前,它会问一个问题:“是否可能有另一个友好的应用程序可以为我提供(或已存储在某处)我可以使用的令牌?”

显然,我可以使用多种方法(和问题)来解决这个问题:

  • 使用共享服务(需要二次安装,哪个应用程序安装它?)
  • 使用共享内容提供程序(需要二次安装,哪个应用程序安装它?)
  • 使用系统上的文件(如果该文件存在/可能无法在每个设备上访问)
  • 使用共享首选项(我相信在某些 Android 版本上全局共享首选项是不可能的)
  • 使用有序广播(唤醒另一个可能的应用程序并询问它)

stackoverflow 的人们认为什么是既简单又健壮的最佳方法?


您可以从编写帐户验证器开始。 Android 验证器开发的规范文本是http://blog.udinic.com/2013/04/24/write-your-own-android-authenticator/

我根据这篇文章为我的应用程序编写了一个身份验证器。但是,我没有尝试过让两个带有身份验证器的应用程序注册相同的帐户类型。我认为两个应用程序中都应该有验证器代码。当应用程序要求为您安装了两个应用程序的帐户类型提供身份验证器时,使用哪个身份验证器并不重要,因为它们都执行相同的操作。

您还可以将身份验证器放在单独的库中,但现在您拥有三个应用程序。


EDIT:

以下是我如何将身份验证器集成到我的应用程序中LoginActivity:

  1. 检查上次登录用户名的首选项。
  2. 如果没有用户名,请致电AccountManager.newChooseAccountIntent()与我的身份验证器的帐户类型。
  3. 如果有用户名,请致电AccountManager.getAccountsByType()使用帐户类型,查看该用户名的帐户,然后致电accountManager.getPassword(account)使用该用户的帐户。
  4. 现在我有了用户名和密码,所以我可以登录了。当用户成功登录后,可以将用户名存储在首选项中以供后续自动登录。

我的身份验证器活动有一个用于“将现有帐户添加到设备”的 UI 流程。在这种情况下,用户已经订阅了我们的服务。他们输入用户名和密码,如果他们在服务器上经过身份验证,则会将一个帐户添加到该用户名的设备中。

还有一个“注册新帐户”UI 流程,用户输入所有注册信息并创建 30 天免费试用帐户。在此过程中,用户已经通过身份验证,因为密码是在此过程中输入的。

这意味着,当用户从帐户选择器中选择“添加帐户”时,用户将通过身份验证,而选择现有帐户只会从设备中返回该帐户,而无需进行身份验证。该方法的缺点之一是AccountManagerAccount Chooser 是没有办法在返回意图中放置一个标志来表示到底发生了什么,因此当帐户选择器活动完成时,您必须通过一些跳房子来查看是否发生了身份验证。我选择了一条安全且保守的路线,每次都进行身份验证,这意味着我在添加帐户时重复服务器身份验证。

您还必须考虑许多极端情况,例如:

  • 如果用户的登录有效,但订阅已过期,这意味着需要发送到电子商务模块来续订服务,该怎么办
  • 如果用户通过 Web 应用程序更改了服务器上的密码,因此现在密码与设备不同步,该怎么办?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android 应用程序之间共享身份验证令牌 的相关文章

随机推荐

  • Qt 应用程序 UI 元素在 Docker 中随机呈现为空白/黑色

    我准备了Dockerfile构建我的 Docker 镜像Qt应用程序 要运行应用程序 我使用 X 我启用对 X 服务器的访问 xhost local root 然后我使用以下命令来运行它 docker run it env DISPLAY
  • 保留的 Python 模块/包名称是什么?

    我在使用 Python 单元测试时遇到了一个奇怪的错误 我的项目中有两个文件夹 project code init py empty app py defines my App class test test py contains my
  • 快速 firestore 检查文档是否存在

    使用 swift 和 firestore 我想检查 已使用的用户名 集合以查看用户名是否已被使用 以及它是否已提醒用户它已被使用 否则如果它仍然可用 我想创建该文件 我想要做的要点概述如下 我可以毫无问题地保存数据 尽管它检查其文档是否存在
  • 如何让RACSignal变热?

    ReactiveCocoa 可以通过调用它的方法将信号转换为 热 信号 subscribeCompleted 但我认为如果您不关心结果 即没有订阅者 则此方法非常冗长 RACDisposable animationDisposable se
  • notifyDataSetChanged 更新ListView失败

    I have a DialogFragment which has a list view with CheckedTextView and a checkbox at the top to Check and uncheck all th
  • 如何使用 Soundcloud Javascript SDK 进行流式传输,在上一个曲目完成后自动移至下一个声音?

    我是 Javascript 和 Soundcloud SDK 的新手 所以如果我当前的解决方案偏离基础 请告诉我如何改进它 我正在构建一个自定义 Soundcloud 播放器 而不是使用预构建的小部件 我正在寻找自动地一首曲目播放完毕后移至
  • numpy 是否自动针对树莓派进行优化

    Raspberry Pi armv7l 架构 具有 neon vfpv4 支持 可用于优化 标准版numpy在安装命令时是否包含这些优化pip3 install numpy or apt get python3 numpy 我不是在谈论 b
  • 显示段落的第一行

    我有一个带有多行段落的 DIV 有什么方法 也许使用 jQuery 只显示段落的第一行并隐藏其他行 这是一种 某种程度上 将段落设置为白底白字的方法 除了 第一行 http jsbin com usora4 2 edit CSS 片段 p
  • 如何在带有 VS 2019 预览版的 Windows 10 中安装 boost

    我搜索了很多 但没有找到任何有用的分步指南来在带有 VS 2019 Preview 的 Windows 10 中安装 配置和构建 boost 你们中的任何人都可以指导我完成这项任务吗 我已经下载了 boost 1 70 但是当我执行 boo
  • 使用 Swift 从 AppDelegate 更改 UINavigationBar 后退按钮文本和字体

    我需要更改 UINavigationBar 后栏按钮文本AppDelegate将更改应用到所有Views在我的应用程序中 我使用以下方法更改了标题字体样式 UINavigationBar appearance titleTextAttrib
  • Maven Spring Boot 插件:如何从另一个项目运行 spring boot

    https docs spring io spring boot docs current maven plugin usage html 我有一个项目 有 2 个模块 Parent pom xml SpringBoot2App pom x
  • UISearchDisplayController 未正确显示自定义单元格

    所以我有一个包含部分和行的 tableView 并且它使用自定义单元格类 自定义单元格有一个图像视图和一些标签 表视图工作正常 搜索工作正常 但搜索不显示我的自定义单元格类中的任何标签 仅显示具有正确图像的 imageView 我很困惑为什
  • 如何在 PowerShell 脚本中指定非位置参数?

    我有以下内容param块在脚本的开头 param string command string version 1 1 0 这很好 只有我需要 version to not是一个位置参数 所以如果你输入 script ps1 run argu
  • 动态 JQuery 日期选择器代码

    我需要创建动态过滤器来动态添加 删除行 它包含一个下拉框 根据所选的下拉框值 我创建一个动态 td 可能有一个文本字段或下拉列表 如果它是文本字段 那么我必须为该文本字段添加日期选择器 我已经这样做了 除了动态生成的文本字段的日期选择器 如
  • 相机姿态估计:如何解释旋转和平移矩阵?

    假设我在两个图像之间具有良好的对应关系 并尝试恢复它们之间的相机运动 我可以使用 OpenCV 3 的新工具来实现此目的 如下所示 Mat E findEssentialMat imgpts1 imgpts2 focal principal
  • 具有多选功能的 UICollectionView 不会选择超过十几个项目

    当使用UICollectionView with allowsMultipleSelection设置为 是 时 只有十几个项目可供选择 UICollectionViewDelegate停止打电话collectionView didSelec
  • 从背景中剪出的透明文本

    有什么办法可以制作一个从背景中剪出的透明文本效果如下图 用CSS吗 如果因为图像取代文本而失去所有宝贵的 SEO 那将是令人遗憾的 我首先想到的是阴影 但我想不出任何东西 图片为网站背景 绝对定位 img tag css3 是可以的 但并非
  • iOS:使用 ContainerView 具有动态内容的 UIScrollView (一步一步)

    尽管这里有多个问题和答案 但我无法创建一个UIScrollView具有静态和动态内容 通过使用ContainerView 并使尺寸正常工作 因此 我将提供一步一步的指导 直到我无法取得任何进展并且有人可以提供解决方案为止 这样我们就会有一个
  • 在 Objective C 中导入标头

    在 Objective c 中 当我们按照惯例将一个类的对象使用到另一个类中时 我们应该在 h 文件中转发声明该类 即 class classname 并且应该在 m文件中导入头文件 即 import header h 但是如果我们在 h
  • 在 Android 应用程序之间共享身份验证令牌

    我需要在 2 个或更多 Android 应用程序之间共享通用的持久登录 身份验证令牌 诀窍在于 任何一个应用程序都不需要安装另一个应用程序即可工作 它们是相互独立的 因此 在应用程序登录之前 它会问一个问题 是否可能有另一个友好的应用程序可