UserRecoverableAuthException: NeedPermission UserRecoverableAuthException: NeedPermission android android

UserRecoverableAuthException: NeedPermission


Try following the Drive quickstart for Android, it is a step-by-step guide showing how to authorize and upload a file to Drive: https://developers.google.com/drive/quickstart-android

To be more specific, it looks like you are not catching the UserRecoverableException and triggering the intent to have the user authorize the app.This is documented in the Google Play Services docs you linked and handled in the quickstart sample as follows:

...} catch (UserRecoverableAuthIOException e) {  startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION);}... 


the method getAndUseAuthTokenBlocking() of the official GoogleAuthUtil tutorial explains pretty well how to handle the exception:

// Example of how to use the GoogleAuthUtil in a blocking, non-main thread context   void getAndUseAuthTokenBlocking() {       try {          // Retrieve a token for the given account and scope. It will always return either          // a non-empty String or throw an exception.          final String token = GoogleAuthUtil.getToken(Context, String, String)(context, email, scope);          // Do work with token.          ...          if (server indicates token is invalid) {              // invalidate the token that we found is bad so that GoogleAuthUtil won't              // return it next time (it may have cached it)              GoogleAuthUtil.invalidateToken(Context, String)(context, token);              // consider retrying getAndUseTokenBlocking() once more              return;          }          return;       } catch (GooglePlayServicesAvailabilityException playEx) {         Dialog alert = GooglePlayServicesUtil.getErrorDialog(             playEx.getConnectionStatusCode(),             this,             MY_ACTIVITYS_AUTH_REQUEST_CODE);         ...       } catch (UserRecoverableAuthException userAuthEx) {          // Start the user recoverable action using the intent returned by          // getIntent()          myActivity.startActivityForResult(                  userAuthEx.getIntent(),                  MY_ACTIVITYS_AUTH_REQUEST_CODE);          return;       } catch (IOException transientEx) {          // network or server error, the call is expected to succeed if you try again later.          // Don't attempt to call again immediately - the request is likely to          // fail, you'll hit quotas or back-off.          ...          return;       } catch (GoogleAuthException authEx) {          // Failure. The call is not expected to ever succeed so it should not be          // retried.          ...          return;       }   }


I had the same error, in my case I was using a wrong scope, I just change

https://www.googleapis.com/auth/plus.login

for

https://www.googleapis.com/auth/userinfo.profile