获取用户的家庭、工作和标记位置,就像Google Inbox一样

27
当在Google收件箱中选择“推迟”一条消息并选择“选取位置”时,它会显示一个列表,其中包括您的家庭和工作地址(来自Google Now)以及您的Google Maps配置文件中的星标位置。其他Google应用程序,例如Keep也提供类似的功能。
我想在我的应用程序中实现这个功能,但是找不到正确的API来公开该信息。这是Google不向第三方公开的内容吗?(我猜那里可能存在滥用的空间)
如果不是,如何实现这一点?哪个API具有此数据?

enter image description here


Google的API中没有提供这个信息...你可以在这里看到一些建议:https://dev59.com/_mQo5IYBdhLWcg3wSNpw ,但他们不会给你“家庭”或“工作”地址。 - Verma
我看到了那个问题。我明白没有 .getHomeLocation().getWorkLocation(),这没关系。但是 Google Inbox 从某个地方获取了这些值。一定有办法。 - Krzysztof Kozmic
@KrzysztofKozmic 可能 Inbox 使用私有 API 访问该信息。 - Whymarrh
或者说Google Inbox 从“服务器端”发起调用,而该调用仅限于“Google IP”。 - N Dorigatti
这个列表不知何故出现在了我的手机上... - Krzysztof Kozmic
@Heyyou 最终目标是让用户选择一个位置,99% 的情况下可能是他们的家或工作地点,因此将其直接列在列表中最为合理。 - Krzysztof Kozmic
2个回答

13

Google Now利用您在任何已登录Google帐户且启用了位置服务的设备上的位置数据来确定您的家庭和工作位置,除非您明确设置。

我没有在官方的谷歌文档中发现存储/检索这些数据的明确引用,但是此数据的Google Now模式在此处可用: Google模式-Person

对于任何给定的人实体,都存在一个homeLocationworkLocation属性。

或者(或者另外),使用Google的Plus平台/Google身份验证平台,如果您拥有经过身份验证的用户,则可以像此处描述的那样进行API调用(附有示例)以获取当前用户的任何指定字段(包括currentLocation,具有地址的组织(包括工作地点),如果用户提供了它们)。

以前的SO问题引用了使用oAuth和原始Google Maps提要URL来提取数据,但是接受的答案有些不清楚,并且当我按照链接进行身份验证以进行测试时,我从所有链接中收到404错误:通过Google Maps API访问特定帐户的“我的位置”中的位置

正如几年前在Google产品论坛上发表的一篇帖子这里所述,Google Maps数据API的先前版本允许访问My Places,这基本上就是您需要的,但它在2013年被弃用和删除。

最后,这是我认为最佳的方法,也可能是Google使用的方法(如果它没有被声明为Google Now),就是使用Google Contacts API。用户存在于自己的联系人列表中,而Google Contacts的广泛API允许您使用标准标签(例如家庭或工作)获取/设置用户的地址。

这里有详细信息:Google Contact Services - 应用脚本


1
谢谢,这些是一些有趣的指针和调查途径。我会在周末尝试实验。现在我会暂时不接受答案,以防有人提供一个可行的 POC 示例。 - Krzysztof Kozmic
更新:Google现在维护自己的家庭/工作位置,您可以手动设置,但这些位置是根据其他可用信息自动推断出来的,首先是您在典型工作时间到/从位置的Google地图路线,以及您每晚睡觉的位置(尽管构成“睡觉”所需的实际逻辑是由我假定的)。 - Tyler Durden

1
这里是获取用户地址的API。

https://developers.google.com/android/reference/com/google/android/gms/identity/intents/Address

mGoogleApiClient = new GoogleApiClient.Builder(this)
        .addApi(Address.API, new Address.AddressOptions())
        .build();
mGoogleApiClient.connect();
...
Address.requestUserAddress(mGoogleApiClient, UserAddressRequest.newBuilder().build(), REQUEST_CODE);


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    ...
    UserAddress address = UserAddress.fromIntent(data);
}

在依赖项中
compile 'com.google.android.gms:play-services-identity:7.8.0'

这里没有家庭或工作地址,我不明白它使用的是什么类型的地址。但似乎所有用户的地址都应该在这里。

1
UserAddress 始终为 null。在使用有效用户进行真实设备测试。 - iHS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接