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

从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返回单个结果(联系人信息中ID为45的联系人记录) 尽管这种查询字符串格式很常见,但是它看起来还是有点令人迷惑...上面的例子中我们都是基于联系人信息簿这个标准的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返回单个结果(联系人信息中ID为45的联系人记录) 尽管这种查询字符串格式很常见,但是它看起来还是有点令人迷惑。

    6.8K90

    【ProtoBuf】proto3语法(一)

    这个部分会对通讯录进⾏多次升级,使⽤ 2.x表⽰升级的版本,最终将会升级如下内容: 不再打印联系⼈的序列化结果,⽽是将通讯录序列化后并 写⼊⽂件中。 从⽂件中将通讯录解析出来,并进⾏打印。...repeated :消息中可以包含该字段任意多次(包括零次),其中重复值的顺序会被保留。可以理解为定义了⼀个数组。...向通讯录中添加一个联系人 // 联系人信息类型为PeopleInfo类型 void AddPeopleInfo(contacts2::PeopleInfo* people) { cout 的C++程序,可能会看到这样一句宏定义在main函数开头: GOOGLE_PROTOBUF_VERIFY_VERSION; GOOGLE_PROTOBUF_VERIFY_VERSION...而每个人的手机号信息都是一个数组,所以我们需要对每一个联系人的手机号数组进行遍历,将所有手机号给打印出来,因为phone也是一个数组,所以可以直接调用 people.phone() 来获取手机号数组。

    4700

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

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

    71530

    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

    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); 以上程序的执行结果为

    1.1K00

    Android简介

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

    63720

    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

    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

    70750

    以人为本 | 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

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

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

    22210

    Android-系统架构

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

    41130

    使用纯粹的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
    领券