无法使用Google通讯录API获取帐户列表& OAuth 2.0

时间:2017-03-27 15:27:35

标签: android oauth-2.0 google-contacts

我正在尝试检索Google用户的联系人列表。 这个getContacts()在AsyncTask的doInBackground()中调用。 在这一点上,我已经收到了一个令牌。 我将自己建立在这个codeLab示例上:https://codelabs.developers.google.com/codelabs/appauth-android-codelab/#0

我正在修改本教程的第10点,因此尝试获取用户的联系人列表而不是用户的个人信息(<正在运行)

private List<ContactEntry> getContacts() {
        ContactsService contactsService = new ContactsService("MY_PRODUCT_NAME");
        contactsService.setHeader("Authorization", "Bearer " + token);

        try {
            URL feedUrl = new URL("https://www.google.com/m8/feeds/contacts/default/full");
            Query myQuery = new Query(feedUrl);
            ContactFeed resultFeed = contactsService.query(myQuery, ContactFeed.class);
            List<ContactEntry> contactEntries = resultFeed.getEntries();
            return contactEntries;
        } catch (Exception e) {
        }
        return null;
    }

我的问题是我总是收到此消息的异常:

java.lang.NullPointerException: No authentication header information

有任何帮助吗? 提前谢谢

2 个答案:

答案 0 :(得分:0)

你有没有尝试过这个解决方案?

How to get gmail user's contacts?

此外,您是否已将您需要的所有权限放入Manifest? 你是否在开发者控制台中正确定义了你的sha1?

答案 1 :(得分:0)

您可以参考此related thead。尝试修改客户端库的用户 代理人:

  

解决方法是在创建客户端后更改其用户代理:

ContactsService service = new ContactsService(applicationName);
service.getRequestFactory().setHeader("User-Agent", applicationName);

同样基于此postservice.setOAuth2Credentials()内部不会像Google协作平台,Google云端硬盘等中的其他服务一样刷新令牌。如果您构建Google凭据,只需在此之后添加此行建立Google凭据:googleCredential.refreshToken();