2015-11-05 12 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 अपर्याप्त अनुमति डोमेन: वैश्विक त्रुटि उत्पन्न कर रहा है। अगर मैंने कहा लाइन पर टिप्पणी की है तो कार्यक्रम लेबल वापस कर देगा और अनुमति त्रुटि के बिना स्क्रीन पर उन्हें प्रिंट करेगा। मैंने अपनी रिलीज एपीके पर हस्ताक्षर किए हैं और Google Play डेवलपर कंसोल स्थापित किया है। ऐप ठीक है यह SHA1 ठीक है और मैंने नमूना आवेदन का पालन किया जो प्रमाण-पत्र पुनर्प्राप्त करता है।जीमेल एपीआई 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

में होता है क्या आप वह कोड दिखा सकते हैं जहां आप अपनी 'सेवा' को तुरंत चालू करते हैं? शायद यह आपकी अनुमति मुद्दा है। – Tholle

+0

नमूना से बहुत बॉयलर प्लेट है I मैंने उस स्निपेट को जोड़ा। पूछने के लिए धन्यवाद। – Giuseppe

+0

मैंने कभी भी जावा क्लाइंट लाइब्रेरी का उपयोग नहीं किया है, इसलिए मुझे डर है कि मुझे नहीं पता। जब तक कोई और जवाब न दे, आप [Oauth Playground] (https://developers.google.com/oauthplayground/) पर नियमित 'http-request' के साथ अपने अनुरोध का प्रयास कर सकते हैं, और यह पता लगाने की कोशिश करें कि जीमेल एपीआई की अनुमति आपको किस प्रकार गुंजाइश है जरुरत। – 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/

संबंधित मुद्दे