【问题标题】:Get user's home, work and starred locations like Google Inbox does像 Google Inbox 一样获取用户的家、工作和加星标的位置
【发布时间】:2015-09-06 23:28:59
【问题描述】:

当您在 Google 收件箱中暂停消息并选择“选择地点”时,它会显示一个列表,其中包含您的家庭和工作地址(来自 Google Now)以及您的 Google 地图个人资料中的星标位置。 Keep 等其他 Google 应用也提供类似的功能。

我想在我的应用中实现此功能,但找不到公开该信息的正确 API。这是 Google 不会向第三方公开的东西吗(我想那里有滥用的空间)?

如果没有,如何实现?什么 API 有数据?

【问题讨论】:

  • Google 没有从他们的 API 提供这些信息...这里有露水建议 stackoverflow.com/questions/16177235/… 你可以试试,但他们不会给你“家庭”或“工作”地址
  • 我看过这个问题。我知道任何地方都没有.getHomeLocation().getWorkLocation(),这没关系。但随后谷歌收件箱确实以某种方式从某个地方获取了这些值。一定有办法的。
  • @KrzysztofKozmic Inbox 可能使用私有 API 来访问该信息
  • 或者 googleinbox 从“服务器端”进行呼叫,并且呼叫仅限于“googleIPs”
  • 这个列表不知何故进入了我的手机......

标签: android google-maps google-api google-now


【解决方案1】:

除非您特别设置,否则 Google 即时会利用您的位置数据分析(在登录到您的 Google 帐户设置中启用的 Google+ 位置服务的任何和所有设备上)来确定您的家庭和工作地点。

我在 Google 官方文档中找到的任何地方都没有明确引用此数据的存储/检索,但 Google Now 中用于此数据的架构可在此处获得: Google Schema - Person

对于任何给定的个人实体,homeLocationworkLocation 属性与该数据一起存在。

或者(或除此之外),使用 Google 的 Plus 平台/Google 身份平台,如果您有一个经过身份验证的用户,您可以按照 here (with examples) 的描述进行 API 调用,以获取任何当前用户的指定字段(包括 currentLocation、带有地址的组织(包括工作),如果用户提供的话)。

存在使用 oAuth 和原始谷歌地图提要 url 来提取数据的先前 SO 问题,但接受的答案有些不清楚,当我点击链接并尝试通过身份验证对其进行测试时,我收到了来自所有人的 404 错误其中:Access locations in My Places of a particular account through Google Maps API

与几年前 Google 产品论坛的帖子 here 一样,以前版本的 Google Maps Data API 允许访问 My Places,这是典型的正是您所需要的,但它已在 2013 年被弃用并删除。

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

这里都有详细介绍:Google Contact Services - App Scripts

【讨论】:

  • 谢谢,这是一些有趣的指示和调查途径。我会在周末尝试使用它。现在,如果有人提供有效的 POC 示例,我将暂缓接受答案。
  • 更新:Google Now 维护自己的家庭/工作位置,您可以手动设置这些位置,但这些位置是根据其他可用信息自动推断出来的,首先是您在典型工作期间往返位置的 Google 地图路线小时,以及您每晚在哪个位置睡觉(尽管构成“睡觉”背后的实际逻辑由我假设)。
【解决方案2】:

这里是获取用户地址的 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'

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

【讨论】:

  • UserAddress 始终为空。使用有效用户在真实设备上试用
猜你喜欢
  • 2015-01-12
  • 1970-01-01
  • 2013-04-17
  • 2013-04-27
  • 2016-05-15
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 2014-07-05
相关资源
最近更新 更多