2015-11-05 60 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'嘗試您的請求,並嘗試找出您的Gmail API許可範圍需要。 – 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/