15

使用AccountManager::getAuthTokenByFeatures时,会显示一个访问请求屏幕,供用户允许或拒绝访问该帐户。用户允许访问后,后续调用(使用相同的参数)会在不提示用户的情况下返回身份验证令牌。

如何清除状态以确保出现访问请求提示?(这至少对于开发、测试和演示目的很有用。)

4

4 回答 4

7

我找到的唯一解决方案是手动清除存储在系统 accounts.db 中的数据。从命令行运行以下命令以清除系统上的所有帐户授权。

对于模拟器:

adb -e shell 'sqlite3 /data/system/accounts.db "delete from grants;"'

对于设备(必须是 root 并安装了 sqlite3 二进制文件):

adb -d shell 'echo sqlite3 /data/system/accounts.db \"delete from grants\;\" | su'
于 2011-07-27T23:03:40.457 回答
1

我创建了一个用于测试的新帐户。新帐户将始终提示访问请求。记住不允许访问。

要测试登录屏幕,请从另一台设备/PC 更改帐户的密码。

于 2012-05-17T19:09:17.477 回答
1

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

于 2013-08-14T21:24:52.817 回答
0

就我而言,本·桑多瓦尔所说的不起作用。

我不得不以编程方式撤销权限,然后再次连接。

if (googleApiClient != null && !googleApiClient.isConnecting() && googleApiClient.isConnected()){

    googleApiClient.clearDefaultAccountAndReconnect();
    Plus.AccountApi.revokeAccessAndDisconnect(googleApiClient).setResultCallback(new ResultCallback<Status>() {
        @Override
        public void onResult(Status status) {
            Log.i("google+", "Google+ user access revoked");
            googleApiClient.connect();
        }
    });
}

这样做时,我再次被要求授予 google+ 权限

于 2015-07-16T12:55:20.657 回答