使用 Eclipse 创建了一个测试应用程序,以从我设备上的一个 Google 电子邮件帐户获取 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,一切正常
最佳答案
关于“Authorized Access to your Google Account”页面,您不会在那里看到您的应用,因为此权限是存储在手机数据库中的设备本地权限。
似乎不可能以简单的方式撤销此权限。我已经找到了几种能够再次触发对话的方法,但没有一种是理想的。在其中一些解决方案中,显示的对话框并不完全相同,但它可能足够接近测试目的,具体取决于您要执行的操作:
- 将手机恢复出厂设置。
- 创建一个新的最小测试应用程序并将两个应用程序配置为 share the same UID .这意味着这两个应用程序将被授予相同的权限,并且将再次显示该对话框以允许用户也允许您的第二个应用程序访问。
- 为 token 类型添加额外的范围(例如,将 oauth2: https://www.googleapis.com/auth/userinfo.profile 更改为 oauth2: https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email )。由于您要求额外的权限,该对话框将再次显示。
- 假设您拥有手机的根访问权限,请从数据库/data/system/accounts.db 中删除表
grants
,如 How do you force AccountManager to show the "Access Request" screen after a user has already allowed access? 中所述,授予的权限存储在该位置。
内部 getAuthToken
方法使用应用程序的 UID 跟踪是否已授予访问权限。因此,如果您能够以某种方式强制 Android 为您的应用程序提供一个新的 UID 或强制它清除给定授权的数据库,则应该再次显示该对话框。以下是一些其他人说对他们有用但对我不起作用的解决方案(也许这取决于您使用的是哪种手机?):
- 卸载应用并重启设备(如您所说)
- 删除并重新添加 Google 帐户(在 Revoke account permission for an app 中提到)
- 使用不同的证书签署应用程序(也在 Revoke account permission for an app 中提到)
作为边注 revoke permissions to access google auth tokens提到有internal Android methods用于撤销访问权限,但这些无法通过公共(public) API 访问。
关于android - 如何撤销我的应用程序从用户的 google gmail AccountManager.getAuthToken(,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13222960/