使用Eclipse创建一个测试应用,从我的设备上的某个谷歌电子邮件帐户中获取authToken
。
执行此操作提示我使用允许访问对话框,其中我按下允许访问:
accountManager.getAuthToken(account,"oauth2:https://www.googleapis.com/auth/userinfo.profile", false, new GetAuthTokenCallback(), null);
我想创建一个可以从API8开始运行的选择器对话框,用户可以选择 他允许我访问哪些谷歌帐户。为此,我必须撤消再次查看屏幕的权限。
我应该在这个页面上看到我的测试应用程序吗? Authorized Access to your Google Account
我已经找到了撤销权限的方法,而非正在运作..
唯一有用的是创建一个新的应用项目。
更新2013
使用Google Play服务GCM,这项工作正常
答案 0 :(得分:8)
关于“Authorized Access to your Google Account”页面,您将看不到您的应用,因为此权限是存储在手机数据库中的设备本地权限。
似乎不可能以简单的方式撤销此权限。我已经找到了几种方法可以再次触发对话,但没有一种方法是理想的。在某些解决方案中,它不是完全相同的对话框,但它可能足够接近测试目的,具体取决于您想要做什么:
grants
,这是存储已授予权限的位置,如How do you force AccountManager to show the "Access Request" screen after a user has already allowed access? getAuthToken
方法在内部使用应用程序的UID跟踪是否已授予访问权限。因此,如果您能够以某种方式强制Android为您的应用程序提供新的UID或强制它清除给定授权的数据库,则应再次显示该对话框。以下是其他人说为他们工作的一些解决方案,但这对我不起作用(可能取决于你使用的是哪款手机?):
作为旁注,revoke permissions to access google auth tokens提及有internal Android methods用于撤消访问权限,但这些无法通过公共API访问。
答案 1 :(得分:2)
您必须考虑两种情况:
案例1: Google帐户的服务器端撤销可以在以下位置完成:https://accounts.google.com/IssuedAuthSubTokens
您只需使用相应的Google帐户登录,然后选择撤消应用/网站
案例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 Debugger。或者,您可以使用http://www.sqlite.org/download.html中的sqlite3二进制文件,并在计算机上执行此操作。
III。您知道需要使用编辑器删除accounts.db数据库的“extras”表中的某些条目。您可能希望对sqlite命令进行快速教程,但这里有一些示例,“Sqlite Debugger”使这很容易学习:
首先在编辑器中打开accounts.db文件
要列出表“extras”中的所有行,您可以使用以下命令:
SELECT * from extras
更好的想法是只列出表“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帐户......允许/拒绝?”),那么您已成功撤销该应用。
参考文献:
答案 2 :(得分:1)
卸载并重新启动设备就是答案 在重新启动之前我必须给它一些时间。
更新......有人说这只会有效。