【发布时间】:2012-01-23 14:16:25
【问题描述】:
我正在处理一些示例代码:
我在我的 Android 应用程序中授权访问,但我现在找不到在哪里撤消访问权限,所以我可以再次运行它。卸载 APK 似乎不会重置任何权限。
【问题讨论】:
标签: android google-api
我正在处理一些示例代码:
我在我的 Android 应用程序中授权访问,但我现在找不到在哪里撤消访问权限,所以我可以再次运行它。卸载 APK 似乎不会重置任何权限。
【问题讨论】:
标签: android google-api
我相信如果您转到https://accounts.google.com/IssuedAuthSubTokens,它应该在“连接的站点、应用程序和服务”下列出您的应用程序,您可以从那里撤消访问权限。
【讨论】:
两步再次触发授权页面:
【讨论】:
这是不可能通过任何公开的官方 API 实现的。
见:
即使卸载并重新安装应用程序也无济于事。
这可能是根设备上的方式: How do you force AccountManager to show the "Access Request" screen after a user has already allowed access?
【讨论】:
您需要以编程方式撤销令牌。首先,试用发布在以下位置的示例应用程序: https://developers.google.com/drive/quickstart-android
此示例应用会显示对话框,让您选择一个帐户,然后拍摄一张照片,然后将其上传到 Google 云端硬盘。我发现的一件重要的事情是这个示例应用程序最终会失败。我发现应用程序的相机部分会导致崩溃。所以禁用代码的摄像头部分,只需将文件替换为 SD 卡上的某个文件,然后将文件上传到云端硬盘。
要撤销使用云端硬盘的权限,需要执行以下代码:
String token = credential.getToken();
HttpRequestFactory factory = HTTP_TRANSPORT.createRequestFactory();
GoogleUrl url = new GoogleUrl("https://accounts.google.com/o/oauth2/revoke?token=" + token);
HttpRequest request = factory.buildGetRequest(url);
HttpResponse response = request.execute();
请参阅示例代码以了解如何访问凭证变量。此外,您必须在不在主线程上的线程中运行上述代码,否则会失败。
您还需要添加以下权限。示例代码未能指明这些权限,没有这些权限,应用程序将崩溃:
<uses-permission android:name="android.permission.ACCOUNT_MANAGER" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
如果 Eclipse 抱怨其中一些权限只授予系统,只需运行 Clean Project,它就会删除警告。完成此操作后,您应该卸载应用程序并重新启动设备。有关撤销令牌的更多信息,请参阅“撤销令牌”部分:
【讨论】:
在努力撤销对我的 Android 应用程序授予的 Gmail API 权限的授权(仍在调试中)之后,我发现它确实出现在 https://security.google.com/settings/security/permissions 上,就像 @David Waters 提到的那样(这是一个新链接,但转到同一个地方) 但仅如果您已通过 Google Developers Console 正确启用 API。这意味着正确添加您的 OAuth 2.0 客户端 ID,即使应用仍处于开发阶段并处于调试模式。
Gmail API 网站上的Android Quickstart 指南(第 1 步和第 2 步)上有一个很好的关于如何添加凭据的指南。
【讨论】:
使用 Google Play 服务:
http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html
将https://www.googleapis.com/auth/userinfo.profile 添加到您的作用域。
例子:
String scope="oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile"
final String token = GoogleAuthUtil.getToken(context, "xxxx@gmail.com", scope);
或“蛮力”
Intent res = new Intent();
res.addCategory("account:xxxx@gmail.com");
res.addCategory("scope:oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile");
res.putExtra("service", "oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile");
Bundle extra= new Bundle();
extra.putString("androidPackageName","com.your.package");
res.putExtra("callerExtras",extra);
res.putExtra("androidPackageName","com.your.package");
res.putExtra("authAccount","xxxx@gmail.com");
String mPackage = "com.google.android.gms";
String mClass = "com.google.android.gms.auth.TokenActivity";
res.setComponent(new ComponentName(mPackage,mClass));
startActivityForResult(res,100);
现在,当您在https://accounts.google.com/IssuedAuthSubTokens 此处撤销访问权限时,应用程序会再次在设备中向您显示权限窗口。
【讨论】:
您可以在...上撤销帐户权限
https://security.google.com/settings/security/permissions
您可以通过[帐户设置] > [帐户权限]访问那里
证明这个答案是真实的:
【讨论】:
查看您的 AndroidManifest 文件。
【讨论】: