1

语境:

假设我们安装了两个 Android 应用程序,A 包含自定义 Authenticator 代码并且可以将新帐户添加到 AccountManager,B 我们想要单点触控登录流程。您可以假设 A 尚未在 AccountManager 中创建该帐户。

问题:

从 B 的角度来看,使用 AccountManager 的 addAccount 方法有什么好处,该方法需要android.permission.MANAGE_ACCOUNTS在 B 的 AndroidManifest 中声明而不是exporting the LoginActivity从 A 应用程序中声明,并简单地通过意图调用它来为 B 创建该帐户。自然, A 已经声明了所有必需的权限。如果您认为后一种解决方案实际上更好(因为我们不需要再声明另一个权限),我也想知道您是否有一些有趣的事情要说来支持您的意见。

您可以假设我不需要使用权限保护 LoginActivity,尽管它已导出,因为它的唯一副作用是在 AccountManager 中创建帐户,这正是我们所需要的。

杂项:

为了提供更多背景信息,如果这有助于回答我的问题:

  • 如果 A 未安装,B 会退回到自己的登录表单(但不充当身份验证者且不创建帐户,检索到的 OAuth 令牌仅供 B 使用)
  • B 确实声明了 INTERNET 权限
  • A 和 B 都使用相同的发布密钥进行签名
  • A 和 B 不共享 android:sharedUserId
4

1 回答 1

0

一方面,拥有一个几乎没有权限的应用程序是个好主意,另一方面,使用第二个应用程序与互联网通信是一种作弊行为。

恕我直言,您有一个计划非常重要,以防您的AccountManager应用程序被卸载。在这种情况下,您会遇到很大的问题,具体取决于您的授权过程。

但是,PackageManager您可以查看是否安装了这两个应用程序。


将其他应用设为可选是个好主意。如果两个应用程序都至少具有互联网权限,则不会给人掩盖通信的印象。特殊权限的好处是没有其他应用程序可以使用您的公共API/意图。我不知道你的设计,如果这可能是一个问题。但是,即使您使用单独的权限,恶意应用程序也可能会请求该权限。

于 2013-01-23T17:12:55.100 回答