Note that there are some explanatory texts on larger screens.

plurals
  1. POAlways getting NEED_PERMISSION Exception even after giving permission
    primarykey
    data
    text
    <p>I am using Google Drive cross client identity so that when user gives Drive access permission to my Android App, my web server also gains access to user Google Drive.</p> <p>For this firstly I have to get an Authorization code. For this I am using following code:</p> <pre><code>private String getAccessToken(Context mContext) { String SERVER_CLIENT_ID = "1009999994.apps.googleusrcontent.com"; String scopes = "oauth2:server:client_id:"+SERVER_CLIENT_ID+":api_scope:"+DriveScopes.DRIVE; String accessToken = null; try { accessToken = GoogleAuthUtil.getToken(mContext, accountName, scopes); Log.d("token is:", "token:"+accessToken); } catch (UserRecoverableAuthException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (GoogleAuthException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return accessToken; } </code></pre> <p>Here is exception I got in Logcat:</p> <pre><code> 07-20 12:12:10.210: W/GLSActivity(29164): [qq] Status from wire: INVALID_SCOPE status: INVALID_SCOPE 07-20 12:12:12.453: W/System.err(29037): com.google.android.gms.auth.GoogleAuthException: INVALID_SCOPE 07-20 12:12:12.492: W/System.err(29037): at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 07-20 12:12:12.492: W/System.err(29037): at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 07-20 12:12:12.500: W/System.err(29037): at com.example.googledriveaccess1.MainActivity.getAccessToken(MainActivity.java:161) 07-20 12:12:12.500: W/System.err(29037): at com.example.googledriveaccess1.MainActivity.access$0(MainActivity.java:155) </code></pre> <p>Here I am using same project for both Android and Server side access. I am also passing Client-ID for web.</p> <p>Earlier I was using not using Cross-Client Identity and my app getting access token correctly.</p> <p>previously my scope was</p> <pre><code>String scope = "oauth2:"+DriveScopes.DRIVE; </code></pre> <p>Waiting for your reply</p> <p><strong>Edit:2</strong></p> <p>Here I am uploading my full code. In this code INVALID_SCOPE problem resolved after I use PLUS.LOGIN scope as well with DriveScope.Drive.</p> <pre><code>package com.example.googleaccess; import java.io.IOException; import android.accounts.AccountManager; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.Menu; import com.google.android.gms.auth.GoogleAuthException; import com.google.android.gms.auth.GoogleAuthUtil; import com.google.android.gms.auth.GooglePlayServicesAvailabilityException; import com.google.android.gms.auth.UserRecoverableAuthException; import com.google.android.gms.common.GooglePlayServicesUtil; import com.google.android.gms.common.Scopes; import com.google.android.gms.plus.PlusClient; import com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential; import com.google.api.services.drive.DriveScopes; public class MainActivity extends Activity { private String accountName = null; private GoogleAccountCredential credential; private int REQUEST_ACCOUNT_PICKER = 2; private int REQUEST_AUTHORIZATION = 11; @SuppressWarnings("deprecation") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String CLIENT_ID = "60000000007.apps.googleusercontent.com"; String scope = "server:client_id:"+CLIENT_ID+":api_scope:"+DriveScopes.DRIVE+" "+"https://www.googleapis.com/auth/plus.login"; credential = GoogleAccountCredential.usingOAuth2(MainActivity.this, scope); startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER); GooglePlayServicesUtil.isGooglePlayServicesAvailable(MainActivity.this); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return false; } class Async extends AsyncTask&lt;Void, Void, Void&gt; { Context credential = null; public Async(Context credential) { this.credential = credential; } @Override protected Void doInBackground(Void... params) { getAccessToken(credential); return null; } } public void getAccessToken(Context mContext) { try { String token = credential.getToken(); Log.d("Token", "token:"+token); } catch (GooglePlayServicesAvailabilityException playEx) { playEx.getMessage(); playEx.printStackTrace(); }catch (UserRecoverableAuthException e) { e.printStackTrace(); Log.d("Token", "token:"+e.getCause()); startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION); } catch (IOException e) { e.printStackTrace(); Log.d("Token", "token:"+e.getMessage()); } catch (GoogleAuthException e) { e.printStackTrace(); Log.d("Token", "token:"+e.getMessage()); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == REQUEST_ACCOUNT_PICKER) { if (resultCode == RESULT_OK &amp;&amp; data != null &amp;&amp; data.getExtras() != null) { accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME); if (accountName != null) { credential.setSelectedAccountName(accountName); new Async(getApplicationContext()).execute(); } } } if(requestCode == REQUEST_AUTHORIZATION) { if (resultCode == Activity.RESULT_OK) { data.getExtras(); new Async(getApplicationContext()).execute(); } else { startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER); } } } } </code></pre> <p>Now I always got Need_Permission exception, I always gives permission from device but it's not working. Again and again NEED_EXCEPTION error comes. You can also try my code by inputting your project CLIENT_ID. Please help me I am really stuck at this point.</p> <p>May be there be any more permission I have to give but I don't now which permission.</p> <p>Sorry for my bad english.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload