首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从Google联系人迁移到People API。为Java构建它的小贴士?

从Google联系人迁移到People API的小贴士:

  1. People API是Google提供的一种云原生API,用于管理和访问用户的联系人信息。它提供了一种简单而强大的方式来迁移和管理联系人数据。
  2. 在Java中使用People API,首先需要设置Google Cloud项目并启用People API。然后,您需要创建一个OAuth 2.0客户端ID,以便您的应用程序可以通过OAuth 2.0进行身份验证和授权。
  3. 在您的Java项目中,您需要使用Google API客户端库来访问People API。您可以通过将以下依赖项添加到您的项目的pom.xml文件中来引入Google API客户端库:
代码语言:txt
复制
<dependency>
  <groupId>com.google.api-client</groupId>
  <artifactId>google-api-client</artifactId>
  <version>1.31.0</version>
</dependency>
<dependency>
  <groupId>com.google.oauth-client</groupId>
  <artifactId>google-oauth-client-jetty</artifactId>
  <version>1.31.0</version>
</dependency>
  1. 在您的代码中,您需要使用Google API客户端库来进行身份验证并调用People API。以下是一个简单的示例代码,用于从Google联系人中获取所有联系人的姓名和电子邮件:
代码语言:txt
复制
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.auth.oauth2.GoogleTokenResponse;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.people.v1.PeopleService;
import com.google.api.services.people.v1.PeopleServiceScopes;
import com.google.api.services.people.v1.model.ListConnectionsResponse;
import com.google.api.services.people.v1.model.Person;

import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;

public class PeopleApiExample {
    private static final String APPLICATION_NAME = "Your Application Name";
    private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
    private static final List<String> SCOPES = Arrays.asList(PeopleServiceScopes.CONTACTS_READONLY);

    public static void main(String[] args) throws Exception {
        HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
        Credential credential = authorize(httpTransport);
        PeopleService peopleService = new PeopleService.Builder(httpTransport, JSON_FACTORY, credential)
                .setApplicationName(APPLICATION_NAME)
                .build();
        ListConnectionsResponse connectionsResponse = peopleService.people().connections().list("people/me")
                .setPersonFields("names,emailAddresses")
                .execute();
        List<Person> connections = connectionsResponse.getConnections();
        for (Person person : connections) {
            List<Person.Name> names = person.getNames();
            List<Person.EmailAddress> emailAddresses = person.getEmailAddresses();
            if (names != null && emailAddresses != null) {
                for (Person.Name name : names) {
                    System.out.println("Name: " + name.getDisplayName());
                }
                for (Person.EmailAddress emailAddress : emailAddresses) {
                    System.out.println("Email: " + emailAddress.getValue());
                }
            }
        }
    }

    private static Credential authorize(HttpTransport httpTransport) throws Exception {
        GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,
                new InputStreamReader(PeopleApiExample.class.getResourceAsStream("/client_secrets.json")));
        GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
                httpTransport, JSON_FACTORY, clientSecrets, SCOPES)
                .build();
        return new GoogleCredential.Builder()
                .setTransport(httpTransport)
                .setJsonFactory(JSON_FACTORY)
                .setClientSecrets(clientSecrets)
                .build()
                .setFromTokenResponse(flow.newTokenRequest("").setScopes(SCOPES).execute());
    }
}
  1. 在上述示例代码中,您需要将"Your Application Name"替换为您的应用程序的名称。您还需要创建一个名为"client_secrets.json"的JSON文件,其中包含您的OAuth 2.0客户端ID和客户端密钥。
  2. 通过运行上述代码,您将能够从Google联系人中获取所有联系人的姓名和电子邮件。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

聚焦 Android 11: 大功告成

分区存储:  在 Android 11 中,所有目标 API 级别 (Target SDK Level) 30 应用都将强制使用分区存储功能。...卓盟科技最近将其 LeBian SDK 非 SDK 接口转移到稳定官方 API,由此得以随着时间推移与 Android 操作系统保持更高兼容性。...如果您是  Java  语言开发者,可以观看视频 "对较新 Java API 支持",了解我们如何在各个版本 Android 中提供新 OpenJDK 库。...我们还发布了四篇文章,介绍 Android 开发者工具中构建系统: Android Gradle Plugin 中API 使用构建分析器了解您构建 深入探讨 Configuration Caching...开发者现在可以通过新 应用内评价 (In-app review) API 应用内请求评分和评论! 别忘了我们 更透明订阅政策,这有助于提高用户对 Google Play Billing 信任。

2K30

Android数据存储实现5大方式

3 onUpgrage() 方法,需要三个参数,一个 SQLiteDatabase 对象,一个旧版本号和一个新版本号,这样你就可以清楚如何把一个数据库模型转变到新模型。...1 .使用 rawQuery() 直接调用 SELECT 语句; 使用 query() 方法构建一个查询。 Raw Queries 正如 API 名字,rawQuery() 是最简单解决方法。...将返回设备上所有联系人信息 content://contacts/people/45 这个URI返回单个结果(联系人信息中ID45联系人记录) 尽管这种查询字符串格式很常见,但是看起来还是有点令人迷惑...上面的例子中我们都是基于联系人信息簿这个标准Content Provider,现在我们继续来创建一个insertRecord() 方法以对联系人信息簿中进行数据添加: Java代码 ?...下面的记录用来删除设备上所有的联系人信息: Java代码 ?

3.5K20
  • Android数据存储实现5大方式

    因此,Android 提供了一些新 API 来使用 SQLite 数据库,Android 开发中,程序员需要学使用这些 API。...3 onUpgrage() 方法,需要三个参数,一个 SQLiteDatabase 对象,一个旧版本号和一个新版本号,这样你就可以清楚如何把一个数据库模型转变到新模型。...1 .使用 rawQuery() 直接调用 SELECT 语句; 使用 query() 方法构建一个查询。 Raw Queries 正如 API 名字,rawQuery() 是最简单解决方法。...,而不是仅仅使用数据库 API。...content://contacts/people/45 这个URI返回单个结果(联系人信息中ID45联系人记录) 尽管这种查询字符串格式很常见,但是看起来还是有点令人迷惑。

    6.7K90

    业界 | 谷歌版“剑桥分析事件”上演,华尔街日报发文谴责,谷歌长文回应

    据悉,这个BUG本质是Google+ People API允许用户访问自己和朋友个人资料数据,这无意中也允许第三方应用程序删除未被标记为公开个人资料,包括姓名、电子邮件地址、职业和性别等。...Gmail将限制少数开发人员构建附加组件。另外,谷歌将在未来10个月内停止消费者版Google+服务。 ? 据悉,谷歌还将改变其账户权限系统。...这篇评论结合了我们在一段时间内所知细节:虽然我们工程团队多年来在构建Google+上付出了很多努力和奉献,但它并没有被消费者或开发人员广泛青睐,并且用户与应用程序之间互动比较有限。...需要强调是,作为我们Project Strobe审核一部分,我们在其中一个Google+ People API中发现了一个错误: 用户可以通过APIGoogle+应用授予对其个人资料数据及其朋友公开个人资料信息访问权限...未来几个月内,我们将会 Android Contacts API 中移除这个对通话记录数据访问权限。

    1.1K50

    0系统学 Android--1.1认识 Android

    2005 年 8 月 Google 收购了这家公司。 1.1 了解 Android 全貌 Android 面试以来到现在已经发布了二十多个版本了。在这几年发展过程中。...谷歌 Android 王国建立了一个完整生态系统。手机厂商、开发者、用户之间相互依存,共同推进着 Android 蓬勃发展。 开发者角度,去了解这个操作系统。...一些通过 C/C++ 编写库,还有支持我们使用 Java 开发核心库和进程运行虚拟机 3.应用框架层 主要提供了构建应用程序时用到各种 API,Android 自带一些核心应用就是使用这些 API...完成,开发者也可以使用这些 API构建我们自己应用程序。...Java API 框架 您可通过以 Java 语言编写 API 使用 Android OS 整个功能集。

    71130

    Java14来了!Switch竟如此简单?Lombok也不需要了?来用Idea搭建Java14吧!

    版本说明 现在 Java 发布节奏是每年发布两个 GA (General Availability,正式发布版),每 6 个月发布一版,发布月份 3 月和 9月。...组合 367: 移除 Pack200 Tools 和 API 368: 文本块 (第二个预览版) 370: 外部存储器 API (Incubator) 可以看出其中很多优化都是关于垃圾回收器,CMS...(请使用 --enable-preview 以启用 instanceof 中模式匹配) 这是因为 Java 14 中有很多特性还处于预览版,需要配置一下 Idea 支持 (Java 14) 预览功能...is Java."); default -> System.out.println("default"); } 以上程序执行结果: This is Java....实例化 People people = new People(1, "老王", 18); // 输出属性 name System.out.println(people.name); 以上程序执行结果

    1K00

    Java14来了!Switch竟如此简单?Lombok也不需要了?来使用Idea配置Java14开发环境吧!

    版本说明 现在 Java 发布节奏是每年发布两个 GA (General Availability,正式发布版),每 6 个月发布一版,发布月份 3 月和 9月。...组合 367: 移除 Pack200 Tools 和 API 368: 文本块 (第二个预览版) 370: 外部存储器 API (Incubator) 可以看出其中很多优化都是关于垃圾回收器,CMS...(请使用 --enable-preview 以启用 instanceof 中模式匹配) 这是因为 Java 14 中有很多特性还处于预览版,需要配置一下 Idea 支持 (Java 14) 预览功能...小贴士:如果不想使用 Idea 体验新特性,也可以使用 javac 编译代码运行,编译时候需要加上“--enable-preview”参数,因为 Java 14 中很多功能都处于预览版,完整编译命令“...People people = new People(1, "老王", 18); // 输出属性 name System.out.println(people.name); 以上程序执行结果

    1.6K10

    JsonFactory工厂而已,还蛮有料,这是我没想到

    JsonParser负责从一个JSON字符串中提取出值,因此强调是数据哪来?如何解析?...为此,对应API都提供了三份(一份定制化自己Feature): public JsonFactory enable(JsonFactory.Feature f); public JsonFactory...小贴士:实例创建好后若你还想定制,可以使用实例自己对应API操作 JsonFactoryBuilder JsonFactory负责基类和实现类双重任务,是比较重,分离得也不彻底。...小贴士:使用JsonFactoryBuilder确保你Jackson版本至少是2.10版本哦~ SPI方式 源码包里发现,JsonFactory是支持Java SPI方式构建实例。...文件内容: com.fasterxml.jackson.core.JsonFactory 因此,我可以使用Java SPI方式得到一个JsonFactory实例: @Test public void

    1K20

    Android简介

    如果您应用在 ART 上运行效果很好,那么应该也可在 Dalvik 上运行,但反过来不一定。...Android 还包含一套核心运行时库,可提供 Java API 框架所使用 Java 编程语言中大部分功能,包括一些 Java 8 语言功能。...Java API框架 我们可通过以 Java 语言编写 API 使用 Android OS 整个功能集。...这些 API 形成创建 Android 应用所需构建块,它们可简化核心模块化系统组件和服务重复使用,包括以下组件和服务: 丰富、可扩展视图系统,可用以构建应用 UI,包括列表、网格、文本框、按钮甚至可嵌入网络浏览器...,可让应用访问其他应用(例如“联系人”应用)中数据或者共享其自己数据 开发者可以完全访问 Android 系统应用使用框架 API

    61120

    JsonFactory工厂而已,还蛮有料,这是我没想到

    JSON字符串中提取出值,因此强调是数据哪来?...为此,对应API都提供了三份(一份定制化自己Feature): public JsonFactory enable(JsonFactory.Feature f); public JsonFactory...小贴士:实例创建好后若你还想定制,可以使用实例自己对应API操作 JsonFactoryBuilder JsonFactory负责基类和实现类双重任务,是比较重,分离得也不彻底。...小贴士:使用JsonFactoryBuilder确保你Jackson版本至少是2.10版本哦~ SPI方式 源码包里发现,JsonFactory是支持Java SPI方式构建实例。...[20200725183005272.png] 文件内容: com.fasterxml.jackson.core.JsonFactory 因此,我可以使用Java SPI方式得到一个JsonFactory

    70050

    以人为本 | Android 11 消息通知

    Android 8 (Oreo) 开始,People notifications 就已经在下拉式通知栏可视层级中得到了 "升格" "待遇",其优先级仅次于正在进行或者关键通知消息 (如下图中显示...下方示例 validatePeople 方法调用中,设置了一个关系密切度标记位参数,将重要性作为通知排序标准。...return rr; } 复制代码 相似度会随着下面几种情况而升高: 通知是否来自有效联系人,有效联系人是否来自用户通讯录,联系人是否被加星标注或者被用户收藏。...Android 11 和会话 在 Android 11 中,还有很多更新强调了人际交往相关功能重要性。例如在下拉通知栏中 消息风格通知 增加了专门区域。 ...如果想要了解更多关于 Android 11 更新内容和 API 指南,请参考 Android 开发者文档 会话 页面。

    1.7K10

    将Elasticsearch直接连接到Java EE应用程序

    本文将介绍NoSQL,既是文档类型,也是搜索引擎Elasticsearch。 Elasticsearch是NoSQL文档类型和基于Lucene搜索引擎。...提供了一个分布式,支持多租户全文搜索引擎,具有HTTP Web界面和无架构JSON文档。Elasticsearch是用Java开发,并根据Apache License条款作为开源发布。...Elasticsearch是Apache Solr最受欢迎企业搜索引擎,后者也基于Lucene。它是一个近乎实时搜索平台。这意味着索引文档到可搜索文档时间有一点延迟(通常是一秒)。...搜索引擎中步骤 在Elasticsearch中,搜索引擎进度基于分析器,该分析器包含三个较低级别的构建块:字符过滤器,标记器和令牌过滤器。...映射是确定文档及其包含字段如何存储和索引过程。对于此示例,字段通常是类型关键字, 并且这些字段只能按其确切值进行搜索。此外,还有我们使用自定义分析器定义文本语言字段。

    1K30

    数据结构项目实战——通讯录

    总的来说,通讯录初始化函数是一个综合性函数,负责创建和配置通讯录基本结构和功能,后续操作提供坚实基础。...遍历通讯录:然后,程序会遍历通讯录中每个联系人,查找与输入信息匹配联系人。 删除联系人:一旦找到匹配联系人,程序会通讯录中删除该联系人。...,允许用户根据需要对已存储联系人信息进行更新和修正。...,负责将存储在数据库或内存中联系人信息以人类可读形式展示出来。...在多数编程语言中,内存管理是一个重要且复杂任务,因为直接关系到程序性能和稳定性。 当我们创建一个变量或对象时,系统会在内存中其分配空间。随着程序执行,这些内存块可能会被频繁地创建和销毁。

    16810

    Android-系统架构

    同样在这一层还有 Android 运行时库,主要提供了一些核心库,能够允许开发者 使用 Java 语言来编写 Android 应用。...相较于 Java 虚拟机,Dalvik 是专门移动设备定制针对手机内存、 CPU 性能有限等情况做了优化处理。...应用框架层 这一层主要提供了构建应用程序时可能用到各种 API,Android 自带一些核心 应用就是使用这些API完成,开发者也可以通过使用这些API构建自己应用程序。...应用层 所有安装在手机上应用程序都是属于这一层,比如系统自带联系人、短信等 程序,或者是你 Google Play 上下载小游戏,当然还包括你自己开发程序。...内容提供器则为应用程序之间共享数据提供了可 能,比如你想要读取系统电话簿中联系人,就需要通过内容提供器来实现。

    40530

    使用纯粹JS构建 Web Component

    Google 费了很大力气去推动更广泛应用,但是除 Opera 和 Chrome 以外多数主流浏览器对支持仍然不够理想。...模板允许你声明标记片段,它们可以被解析 HTML。这些片段在页面开始加载时不会被用到,之后运行时会被实例化。 Shadow DOM: Shadow DOM 被设计构建基于组件应用一个工具。...函数调用告知 DOM 我们已经创建了一个新定制元素叫 ,行为被 类定义。现在可以在我们 HTML 里使用 元素了。 我们会用到 API 来创建我们用户卡片。...在较早版本浏览器中,我们不能使用 shadow DOM 来隔离组件 DOM。这样当我们组件编写样式时,可以避免意外样式覆盖。 编写样式 我们创建好了卡片模板,现在来用 CSS 装饰。...小贴士和技巧 还有很多关于 Web Component 东西没有在这篇短文中写到,我想简单陈述一些开发 Web Component 小贴士和技巧。 组件命名 定制元素名称必须包含一个短横线。

    1.2K60

    重走Android路 之 Android系统架构图以及开发工具了解

    例如,我们App想要发送SMS消息(短信),我们不需要重新去写一个短信功能,而是直接调用系统提供好Api去向指定联系人发送短信,甚至,我们可以设定好短信内容,以便减少用户操作。 2....Java API框架 ---- Android OS整个功能集可以通过用Java语言编写API来获得。...Android还包含一组核心运行时库,它们提供Java API框架使用Java编程语言大部分功能,甚至包括一些Java 8语言功能。 5....灵活构建系统 借助Gradle支持,Android Studio构建系统允许您自定义构建,以便单个项目中不同设备生成多个构建变体。 下面附上官方演示图: ?...借助Gradle支持,Android Studio构建系统允许您自定义构建,以便单个项目中不同设备生成多个构建变体。 下面附上官方演示图: ?

    1.5K20

    Vue 3是一个错误,我们不应该再犯。

    但事实上,第二版开始没有简单迁移路径,这是一个错误,我们不应该在未来重复。 Vue 2问题 Vue一直被认为是一个进步框架。选项API很容易理解,我们可以学习并在需要时引入更复杂模式和库。...小学习曲线和良好文档是大家喜欢原因。 另一方面,在将通用逻辑抽象mixin时,使用继承而不是组合体系结构缺陷造成了许多可伸缩性问题,并破坏了干净组件声明许多原则。...另一方面,有些变化不能安全地进行,也不能不进行小规模或大规模重构。在一个用Vue 2构建现有大型应用中,你可能会使用一些被废弃或改变API。...迁移构建应该是两个版本之间桥梁,但由于有这么多被废弃功能,它对大型项目并不适用。此外,官方对一些基本支持库建议是迁移到另一个不同库,这进一步增加了复杂性。...目前,Vue 2答案占据了压倒性优势,但在Vue 3中,很多API实现原理都不一样了,因此可能会造成一定混乱。 生态 一个框架有多强大,生态系统就有多强大。

    91440

    在Go中使用Protobuf

    Protobuf语言指南 Protobuf生成Go代码指南 为什么使用protocol buffer 我们将要使用示例是一个非常简单“地址簿”应用程序,可以在文件中读取和写入人员联系人详细信息...可以发明一种特殊方法将数据项编码单个字符串 - 例如将4个整数编码“12:3:-23:67”。这是一种简单而灵活方法,虽然确实需要编写一次性编码和解析代码,并且解析会产生较小运行时成本。...Protocol buffer API 生成addressbook.pb.go提供以下有用类型: 拥有有People字段AddressBook结构体。...,以便可以在其他地方解析。.../list_people 程序会文件 ADDRESS_BOOK读取protocol buffer数据,解析到结构体中然后打印出结构体中 Person数据。

    1.4K30
    领券