2015-11-05 18 views
5
  @Override 
      protected List<String> doInBackground(Void... params) 
      { 
       try 
       { 
        //This line below is the cause of the insufficient permissions error 
        ListMessagesResponse messagesWithLabels = mService.users().messages().list("me").setQ("label:inbox").execute(); 

        /*for(Message m : messagesWithLabels.getMessages()) 
        { 
         if(m.size() > MAXSIZE) 
         { 
          List<MessagePartHeader> headers = m.getPayload().getHeaders(); 

          for (MessagePartHeader header : headers) 
          { 
           if (header.getName().equals("From") || header.getName().equals("Date") 
             || header.getName().equals("Subject") || header.getName().equals("To") 
             || header.getName().equals("CC")) { 
            messageDetails.put(header.getName().toLowerCase(), header.getValue()); 
           } 
          } 

          messageDetails.put("snippet", m.getSnippet()); 
          messageDetails.put("threadId", m.getThreadId()); 
          messageDetails.put("id", m.getId()); 
          messageDetails.put("body",m.getPayload().getBody().getData()); 

          GmailFunctions.deleteThread(mService, "me", m.getId()); 

          messageDetails.clear(); 
         } 
        }*/ 

        return getDataFromApi(); 
       } 
       catch (Exception e) 
       { 
        mLastError = e; 

        cancel(true); 

        return null; 
       } 
      } 

402の原因となっている行にマークがあります。権限のドメインが不十分です:グローバルエラーです。私が上記の行をコメントアウトすると、プログラムはラベルを返して、アクセス権エラーなしで画面に表示します。私はリリースapkに署名し、Google Playデベロッパーコンソールを設定しました。このアプリケーションはSHA1の署名だけで、資格情報を取得するサンプルアプリケーションに従っています。Gmail API 403権限が不十分ですドメインドメイン

https://developers.google.com/gmail/api/quickstart/java

不十分なアクセス許可について何を行うには?

ありがとうございます。

mserviceの作成:

    private class MakeRequestTask extends AsyncTask< Void, Void, List<String> > { 


        private com.google.api.services.gmail.Gmail mService = null; 

        private Exception mLastError = null; 

        ArrayList<String> sRemovalIds = new ArrayList<String>(); 

        List<String> inserts = new ArrayList<String>(); 

        Map<String, Object> messageDetails = new HashMap<String, Object>(); 

        public MakeRequestTask(GoogleAccountCredential credential) 
        { 
         HttpTransport transport = AndroidHttp.newCompatibleTransport(); 

         JsonFactory jsonFactory = JacksonFactory.getDefaultInstance(); 

         mService = new com.google.api.services.gmail.Gmail.Builder(
           transport, jsonFactory, credential) 
           .setApplicationName("Gmail API Android Quickstart") 
           .build(); 
        } 

        @Override 
        protected List<String> doInBackground(Void... params) 
        { 
         try 
         { 
          ListMessagesResponse messagesWithLabels = mService.users().messages().list("me").setQ("label:inbox").execute(); 

          /*for(Message m : messagesWithLabels.getMessages()) 
          { 
           if(m.size() > MAXSIZE) 
+0

にあります。 'mService'をインスタンス化するコードを表示できますか?あなたの許可の問題があるかもしれません。 – Tholle

+0

サンプルからのボイラープレートは非常に高いです。私はそのスニペットを追加しました。尋ねていただきありがとうございます。 – Giuseppe

+0

私はJavaクライアントライブラリを一度も使用していないので、わかりません。誰かが答えるまで、あなたは[Oauth Playground](https://developers.google.com/oauthplayground/)で定期的な 'http-requests'であなたのリクエストを試みることができます。必要。 – Tholle

答えて

6
private static final String[ ] SCOPES = { GmailScopes.GMAIL_LABELS, GmailScopes.GMAIL_COMPOSE, 
GmailScopes.GMAIL_INSERT, GmailScopes.GMAIL_MODIFY, GmailScopes.GMAIL_READONLY, GmailScopes.MAIL_GOOGLE_COM }; 

これらのスコープの代わりに、GMAIL_LABELSが私のために働いただけで、デフォルトを使用します。

2

権限を変更した後に以前の資格情報ファイルを削除する必要がある場合もあります。これは通常$ HOME/.credentials/

関連する問題