oauth2.0 Gmail API范围和格式不匹配

dzhpxtsq  于 2023-01-12  发布在  其他
关注(0)|答案(4)|浏览(154)

我正在尝试编写微型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

nr7wwzry

nr7wwzry1#

这正是我这些天在玩谷歌API资源管理器时遇到的问题。下面是我解决它的方法:
1.转到https://security.google.com/settings/security/permissions
1.选择你正在玩的应用程序,我的是谷歌API资源管理器
1.单击删除〉确定
1.下一次,只需请求您需要的确切权限即可。
希望能有所帮助:)

wgmfuz8q

wgmfuz8q2#

您应该删除“元数据”范围。
检查应用程序权限以确保您只有这3个范围:

  1. https://mail.google.com/
  2. gmail.modify
  3. readonly,否则请删除权限并重新添加。
bq3bfh9z

bq3bfh9z3#

获得设备联系人权限后,你必须批准选定的副本。所以第一次我批准了元数据范围。下一次当我需要批准只读范围时,没有窗口来做。所以你需要从谷歌帐户中删除范围权限并重新安装应用程序。

kwvwclae

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/

解决了这个问题

相关问题