How do you force AccountManager to show the “Access Request” screen after a user has already allowed access?

前端 未结 4 1448
一生所求
一生所求 2020-12-03 05:52

When using AccountManager::getAuthTokenByFeatures, an Access Request screen is shown for the user to allow or deny access to the account. After a user allows access, subsequ

相关标签:
4条回答
  • 2020-12-03 06:05

    I have created a new account which I use for testing. A new account will always prompt for Access Request. Remember to NOT allow access.

    To test for the login screen, change the password for the account from another device/PC.

    0 讨论(0)
  • 2020-12-03 06:08

    Using Google Play Services:

    http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html

    Add https://www.googleapis.com/auth/userinfo.profile to your scope.

    Example:

    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);
    

    OR "brute force"

    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);
    

    Now, when you revoke the access here https://accounts.google.com/IssuedAuthSubTokens the application shows you the window for permission again in the device.

    0 讨论(0)
  • 2020-12-03 06:14

    In my case what Benn Sandoval says does not work.

    I had to revoke permissions programmatically and then connect again.

    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();
            }
        });
    }
    

    Doing this i was getting asked again to grant permissions to google+

    0 讨论(0)
  • 2020-12-03 06:21

    The only solution I've found is to manually clear out the data stored in the system's accounts.db. Run the following from the command line to clear out all account grants on the system.

    For the emulator:

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

    For a device (must be rooted and have the sqlite3 binary installed):

    adb -d shell 'echo sqlite3 /data/system/accounts.db \"delete from grants\;\" | su'
    
    0 讨论(0)
提交回复
热议问题