【问题标题】:Gmail API 403 Insufficient Permissions domain globalGmail API 403 Insufficient Permissions domain global
【发布时间】:2016-02-05 16:35:54
【问题描述】:
            @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 Insufficient permissions domain: global error 的行。如果我注释掉该行,程序将返回标签并将它们打印到屏幕上而不会出现权限错误。我已经签署了我的发布 apk 并设置了 Google Play 开发者控制台。该应用程序的签名很好,它是 SHA1,我遵循了检索凭据的示例应用程序。

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 )

【问题讨论】:

  • 你能显示你实例化mService的代码吗?可能是您的权限问题。
  • 我是样本中的样板。我添加了sn-p。谢谢你的提问。
  • 我没用过Java客户端库,恐怕不知道。在其他人回答之前,您可以在Oauth Playground 上通过常规http-requests 尝试您的请求,并尝试找出您需要的Gmail API 权限范围。
  • 我相信我已经在这方面取得了进展,因为我在此的 cmets 中返回了信息。 Gmail API developers.google.com/gmail/api/auth/scopes 的文档中有说明。在快速启动应用程序的顶部,您会发现声明了一个范围字符串列表,如果现在扩展范围,代码将在没有权限错误的情况下运行。

标签: android google-oauth gmail-api google-api-java-client


【解决方案1】:
    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/

    【讨论】:

      【解决方案3】:

      您可能还需要在更改权限后删除之前的凭据文件。就是当前文件夹下的token.json。

      【讨论】:

        【解决方案4】:

        除了@Eae提到的设置范围外,删除StoredCredential文件,文件路径是your_project/tokens/StoredCredential。

        【讨论】:

          猜你喜欢
          • 2018-05-11
          • 2015-11-15
          • 1970-01-01
          • 1970-01-01
          • 2012-11-08
          • 1970-01-01
          • 2021-09-06
          • 2013-10-25
          • 1970-01-01
          相关资源
          最近更新 更多