我正在尝试编写微型gmail客户端的android作为培训。我从https://developers.google.com/gmail/api/quickstart/android的gmail API指南样本修改了一点,以获得消息的标题和身体的线程。我设置范围为GmailScopes.Gmail_modify
和编辑的主要请求函数如下:
private List<String> getDataFromApi() throws IOException {
// Get the labels in the user's account.
String user = "me";
List<String> labels = new ArrayList<String>();
ListLabelsResponse listResponse =
mService.users().labels().list(user).execute();
ListThreadsResponse listThreads = null;
try {
listThreads = mService.users().threads().list(user).execute();
} catch (IOException ioex){
Log.e(LOG_TAG, "First: " + ioex.toString());
}
for (Thread thread : listThreads.getThreads()) {
try {
thread = mService.users().threads().get(user, thread.getId()).setFormat("full").execute();
} catch (IOException ioex){
Log.e(LOG_TAG, "Second: " + ioex.toString());
}
for(Message message : thread.getMessages()){
labels.add(message.getId());
}
}
return labels;
}
但我总是
Second: GoogleJsonResponseException: 403 Forbidden {
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Metadata scope doesn't allow format FULL",
"reason" : "forbidden"
} ],
"message" : "Metadata scope doesn't allow format FULL"
}
我尝试了不同的作用域配置,但似乎服务作用域始终设置为GmailScopes.GMAIL_METADATA
4条答案
按热度按时间nr7wwzry1#
这正是我这些天在玩谷歌API资源管理器时遇到的问题。下面是我解决它的方法:
1.转到https://security.google.com/settings/security/permissions
1.选择你正在玩的应用程序,我的是谷歌API资源管理器
1.单击删除〉确定
1.下一次,只需请求您需要的确切权限即可。
希望能有所帮助:)
wgmfuz8q2#
您应该删除“元数据”范围。
检查应用程序权限以确保您只有这3个范围:
bq3bfh9z3#
获得设备联系人权限后,你必须批准选定的副本。所以第一次我批准了元数据范围。下一次当我需要批准只读范围时,没有窗口来做。所以你需要从谷歌帐户中删除范围权限并重新安装应用程序。
kwvwclae4#
当我正在使用的服务帐户只有这些作用域(Security > API Controls > Domain-wide Delegation)时,出现相同的错误:
https://www.googleapis.com/auth/gmail.readonly
https://www.googleapis.com/auth/gmail.metadata
并添加了
https://mail.google.com/
解决了这个问题