Gmail API 403 域全局权限不足
Gmail API 403 Insufficient Permissions domain global
@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 错误的行。如果我注释掉上述行,程序将 return 标签并将它们打印到屏幕上而不会出现权限错误。我已经签署了我的发布 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 )
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 对我有用。
更改权限后,您可能还需要删除以前的凭据文件。这通常在 $HOME/.credentials/
更改权限后,您可能还需要删除以前的凭据文件。在当前文件夹中 token.json。
除了@Eae提到的设置作用域外,删除StoredCredential文件,文件路径为your_project/tokens/StoredCredential.
@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 错误的行。如果我注释掉上述行,程序将 return 标签并将它们打印到屏幕上而不会出现权限错误。我已经签署了我的发布 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 )
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 对我有用。
更改权限后,您可能还需要删除以前的凭据文件。这通常在 $HOME/.credentials/
更改权限后,您可能还需要删除以前的凭据文件。在当前文件夹中 token.json。
除了@Eae提到的设置作用域外,删除StoredCredential文件,文件路径为your_project/tokens/StoredCredential.