8

使用 Eclipse 创建了一个测试应用程序,以authToken从我的设备上的一个谷歌电子邮件帐户中获取。

执行此操作提示我使用允许访问对话框,我在其中按允许访问:

accountManager.getAuthToken(account,"oauth2:https://www.googleapis.com/auth/userinfo.profile", false, new GetAuthTokenCallback(), null);

我想创建一个适用于 API8 及更高版本的选择器对话框,用户可以在其中选择他允许我访问的谷歌帐户。为此,我必须撤销再次查看屏幕的权限。

我应该在这个页面上看到我的测试应用程序吗?
授权访问您的 Google 帐户

我已经在寻找一种方法来撤销权限并且非工作..
唯一工作就是创建一个新的应用程序项目。

UPDATE 2013
使用 Google Play 服务 GCM,这工作正常

4

3 回答 3

8

关于“授权访问您的 Google 帐户”页面,您不会在那里看到您的应用,因为此权限是存储在手机数据库中的设备本地权限。

似乎不可能以简单的方式撤销此许可。我已经找到了几种能够再次触发对话的方法,但没有一个是理想的。在其中一些解决方案中,显示的对话框并不完全相同,但它可能足够接近测试目的,具体取决于您想要做什么:

在内部,该getAuthToken方法使用应用程序的 UID 跟踪是否已授予访问权限。因此,如果您能够以某种方式强制 Android 为您的应用程序提供新的 UID 或强制它清除给定授权的数据库,则应再次显示对话框。以下是一些其他人说对他们有用但对我不起作用的解决方案(可能取决于您使用的手机?):

附带说明,撤销访问 google auth 令牌的权限提到有用于撤销访问的内部 Android 方法,但这些方法无法通过公共 API 访问。

于 2012-11-28T09:15:13.567 回答
2

您必须考虑两种情况:

  1. 服务器端授权
  2. Android Account Manager(设备端)授权

案例 1:Google 帐户的服务器端撤销可以在以下位置完成:https ://accounts.google.com/IssuedAuthSubTokens

您只需使用相应的谷歌帐户登录并选择撤销应用程序/网站

案例 2:如果在您的 android 设备上显示类似以下内容的屏幕:“应用程序想要访问您的 Google 帐户....允许/拒绝?”那么这是您需要修改 sqlite3 的客户经理类型授权您手机上的数据库以撤销应用程序(不像案例 1 那样简单,这需要 root 访问您的手机):

一世。首先将数据库和日志文件(accounts.db 和 accounts.db-journal)复制到另一个位置(例如:在您的 SD 卡或计算机上)。可以在您的 android 设备上的此目录中找到数据库文件:

/data/system/users/0/accounts.db
/data/system/users/0/accounts.db-journal

ii. 你现在需要一个 sqlite3 编辑器。我使用了 Google Play 商店中的 Sqlite 调试器。或者,您可以使用来自http://www.sqlite.org/download.html的 sqlite3 二进制文件并在计算机上执行此操作。

iii. 您知道需要使用编辑器删除 accounts.db 数据库的“附加”表中的某些条目。您可能想学习有关 sqlite 命令的快速教程,但这里有一些示例,“Sqlite 调试器”使学习变得容易:

首先在编辑器中打开accounts.db文件

要列出表“附加”中的所有行,您可以使用以下命令:

SELECT * from extras

一个更好的主意是只列出表“附加”中与您要撤销的应用程序相对应的行。例如,如果“com.someapp”是您的应用程序的名称,您可以使用以下命令:

SELECT * from extras WHERE key like '%com.someapp%'

你应该得到一些类似这样的输出:

id|accountsid|key|value
10|1|perm.xxxxxxxxxxxxxxxxxxxxxxxxxxx.oauth2:https://google.com/|1
11|1|EXP:xxxxxxxxxxxxxxxxxxxxxxxxxxxx.oauth2:https://google.com/|xxxxxxx

记下您要从上述输出中删除的 id 编号(即与您要撤消的 App 对应的行),然后使用以下命令删除这些行:

DELETE from extras where _id = 10
DELETE from extras where _id = 11

将数据库和日志文件复制回其原始位置。确保将权限和所有权设置回原来的。仅所有者和组的读/写,所有者和组所有者都是“系统”。此操作将需要 root 访问权限!

重新启动您的设备,您应该已经撤销了该应用程序的权限。您可以通过要求应用再次请求授权来测试这一点。如果您看到要求您授权应用程序的屏幕(“应用程序想要访问您的 Google 帐户....允许/拒绝?),那么您已成功撤销该应用程序。

参考:

  1. https://groups.google.com/forum/#!topic/android-developers/3lQb83jeyE8
  2. https://github.com/jberkel/sms-backup-plus/issues/369
于 2014-01-28T06:20:01.360 回答
1

卸载并重新启动设备就是答案。
在重新启动之前,我必须给它一些时间。

更新..不得不说这只有时有效。

于 2012-11-28T06:18:28.737 回答