Green
Green

Reputation: 55

Gmail api scope & format mismatch

I'm trying to write tiny gmail client for android as training. I took gmail api guide sample from https://developers.google.com/gmail/api/quickstart/android modified it a little to get messages with headers & body by threads. I set scopes to GmailScopes.Gmail_modify and edited main request function as this:

private List<String> getDataFromApi() throws IOException {
            // Get the labels in the user's account.
            String user = "me";
            List<String> labels = new ArrayList<String>();
            ListLabelsResponse listResponse =
                    mService.users().labels().list(user).execute();
            ListThreadsResponse listThreads = null;
            try {
             listThreads = mService.users().threads().list(user).execute();
            } catch (IOException ioex){
                Log.e(LOG_TAG, "First: " + ioex.toString());
            }

            for (Thread thread : listThreads.getThreads()) {
                try {
                    thread = mService.users().threads().get(user, thread.getId()).setFormat("full").execute();
                } catch (IOException ioex){
                    Log.e(LOG_TAG, "Second: " + ioex.toString());
                }
                for(Message message : thread.getMessages()){
                    labels.add(message.getId());
                }

            }
            return labels;
        }

But I always get

Second: GoogleJsonResponseException: 403 Forbidden            {
                                                                             "code" : 403,
                                                                             "errors" : [ {
                                                                               "domain" : "global",
                                                                               "message" : "Metadata scope doesn't allow format FULL",
                                                                               "reason" : "forbidden"
                                                                             } ],
                                                                             "message" : "Metadata scope doesn't allow format FULL"
                                                                           }

I tried different scopes configurations but seems like service scope is always set to GmailScopes.GMAIL_METADATA

Upvotes: 5

Views: 5362

Answers (4)

Denis
Denis

Reputation: 837

got the same error when a service account which i was using had only these scopes ( Security > API Controls > Domain-wide Delegation ):

  • https://www.googleapis.com/auth/gmail.readonly
  • https://www.googleapis.com/auth/gmail.metadata

and addition of

  • https://mail.google.com/

solved the issue

Upvotes: 0

Mayank Beri
Mayank Beri

Reputation: 71

you should remove the "metadata" scope.

check app permissions to make sure you have only these 3 scopes:

  1. https://mail.google.com/
  2. gmail.modify
  3. readonly , or else remove the permissions and add them again.

Upvotes: 7

Nhan
Nhan

Reputation: 466

This is exactly my problem these day when playing with Google APIs Explorer. And here is what I did to solve it:

  1. Go to https://security.google.com/settings/security/permissions
  2. Choose the app you are playing with, mine is Google APIs Explorer
  3. Click Remove > OK
  4. Next time, just request exactly which permissions you need.

Hope it help :)

Upvotes: 9

Green
Green

Reputation: 55

After getting permissions to device Contacts you have to approve chosen copes. So first time I approved metadata scope. Next times when I needed to approve readonly scope, there was no window to do it. So you need to delete scopes permissions from google account and reinstall app.

Upvotes: 0

Related Questions