【问题标题】:Where to revoke Google API permissions granted on Android?在哪里撤销在 Android 上授予的 Google API 权限?
【发布时间】:2012-01-23 14:16:25
【问题描述】:

我正在处理一些示例代码:

http://code.google.com/p/google-api-java-client/source/browse/picasa-android-sample/src/main/java/com/google/api/services/samples/picasa/android/PicasaSample.java?repo=samples

我在我的 Android 应用程序中授权访问,但我现在找不到在哪里撤消访问权限,所以我可以再次运行它。卸载 APK 似乎不会重置任何权限。

【问题讨论】:

    标签: android google-api


    【解决方案1】:

    我相信如果您转到https://accounts.google.com/IssuedAuthSubTokens,它应该在“连接的站点、应用程序和服务”下列出您的应用程序,您可以从那里撤消访问权限。

    【讨论】:

    • 那里没有列出我的 Android 开发,只有我授权的网站。
    • @gdonald 我正在寻找与该问题完全相同的答案。在 IssuedAuthSubTokens 下,我也没有看到我的 Android 应用程序列出。
    【解决方案2】:

    两步再次触发授权页面:

    1. 转到https://accounts.google.com/IssuedAuthSubTokens 撤销您想要的应用程序。这将从服务器端清除权限。
    2. 进入你的安卓设备设置->数据和时间:将你的时间快进一两天。这将强制当前令牌过期。

    【讨论】:

    • 这适用于我的应用与 Google Drive 的连接。在测试时,我将日期固定为快进日期。点击Revoke access并运行授权页面后,每次都会弹出。
    【解决方案3】:
    【解决方案4】:

    您需要以编程方式撤销令牌。首先,试用发布在以下位置的示例应用程序: 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,它就会删除警告。完成此操作后,您应该卸载应用程序并重新启动设备。有关撤销令牌的更多信息,请参阅“撤销令牌”部分:

    https://developers.google.com/accounts/docs/OAuth2WebServer

    【讨论】:

      【解决方案5】:

      在努力撤销对我的 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 步)上有一个很好的关于如何添加凭据的指南。

      【讨论】:

        【解决方案6】:

        使用 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 此处撤销访问权限时,应用程序会再次在设备中向您显示权限窗口。

        【讨论】:

          【解决方案7】:

          您可以在...上撤销帐户权限

          https://security.google.com/settings/security/permissions

          您可以通过[帐户设置] > [帐户权限]访问那里

          证明这个答案是真实的:

          【讨论】:

            【解决方案8】:

            查看您的 AndroidManifest 文件。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-10-07
              • 2015-01-13
              • 1970-01-01
              • 2016-01-19
              • 1970-01-01
              • 2013-02-13
              • 2015-07-27
              • 1970-01-01
              相关资源
              最近更新 更多