【问题标题】:Get Google contacts using API on iOS在 iOS 上使用 API 获取 Google 联系人
【发布时间】:2016-09-11 21:00:47
【问题描述】:

我已将 Google 登录添加到我的应用中,该应用使用 Firebase 通过社交媒体登录。我现在正在尝试访问 Google 用户的朋友。我想返回朋友/联系人列表,以便我可以搜索以查看他们当前是否正在使用该应用程序。

到目前为止,我几乎没有找到这方面的信息。

有许多 stackoverflow 问题没有得到解答,询问类似的thing

Google API 已从 Google+ 登录更新为 Google 登录 API,这意味着虽然以前我们可以找到分享 code,但现在他们拥有的信息要少得多 available

这意味着一些answers现在似乎已经贬值了。

还有一些answers 表示不可能这样做。

我的问题是,去年似乎没有任何答案或问题,而新的 GoogleSignIn 仅在一年前才released

我想知道当使用 GIDGoogleUser 对象登录时,是否可以以任何方式、形状或形式检索用户的朋友或联系人列表。理想情况下,我会返回一些关于他们的信息,但即使只是他们的名字,这也足够了。

Facebook API 允许用户返回已登录应用但不是所有用户的用户的详细信息。谷歌是否缺少类似的东西,或者目前没有办法使用官方 API 来做到这一点。

任何关于这是否可能的帮助都将非常有助于我计划我的应用中的下一步行动。

【问题讨论】:

  • 嘿..你有什么办法吗..?我也在寻找解决方案。
  • 我将继续努力。我认为没有针对它的设置 Google API,因此我正在尝试对经过身份验证的 Google url 进行手动 AFNetworking 请求。喜欢这里的网址之一:developers.google.com/+/domains/api/circles/get#request 如果您有任何突破,请发表评论或回答
  • 如果您可以在您的应用程序中访问联系人,请告诉我。我目前的项目也有同样的要求
  • 我也在寻找实现这一目标,但没有任何成功:(

标签: ios google-api google-signin


【解决方案1】:

由于过去几年 Google API 版本的数量以及用户实际使用其 Google 详细信息登录的情况,这个问题变得更加困难。这意味着由于缺乏需求,文档很少。我终于在 App Code 的 this 很棒的 swift 教程的帮助下让它工作了。本教程很少见,因为它逐步完成了整个登录过程,并涵盖了我所追求的联系人查找。

我建议从头到尾阅读本教程,但我也会在此处提供一些最重要的信息。

首先要做的是确保您已将您的应用正确添加到 Google 控制台 here。确保添加 Google+ API 并获取您的客户端 ID。

其次,您需要设置 Google 登录。这非常简单,并且有一些很好的资源可用于设置。我会推荐this Google youtube 视频,但网上还有很多其他资源。我不会详细介绍,因为这不是问题的重点。

接下来,您需要设置登录代码。

确保您已将两个代理都添加到您的 viewController

<GIDSignInDelegate, GIDSignInUIDelegate

并且还在viewDidLoad中配置了:

[GIDSignIn sharedInstance].delegate = self;
[GIDSignIn sharedInstance].uiDelegate = self;
[GIDSignIn sharedInstance].clientID = @"123456789012-thisismadeup12345678901234567890.apps.googleusercontent.com";

[[GIDSignIn sharedInstance] setScopes:@[@"https://www.googleapis.com/auth/plus.login", @"https://www.googleapis.com/auth/plus.me"]];

我在其他地方找到的答案都没有让我设置我的 clientID(来自 google 控制台),但重要的部分是添加范围代码,如果没有这个,你就没有获取联系人的正确权限。

在这个阶段,您可以检查一切是否设置正确。加载您的应用程序并单击 Google 登录按钮,它应该会加载 web 视图并要求您确认您的权限。它应该是这样的:

重要的权限是前两个。如果您只有最后两个,您将只能访问您自己的个人资料,而不能访问您朋友的个人资料。

一旦您走到这一步,您只需执行正确的 API 调用即可返回您的朋友。这说起来容易做起来难,因为在不同的谷歌网站上有不同的数量。我完成了以下内容:

NSString * urlString = [NSString stringWithFormat:@"https://www.googleapis.com/plus/v1/people/me/people/visible?access_token=%@", [GIDSignIn sharedInstance].currentUser.authentication.accessToken];

AFHTTPRequestOperationManager * manager = [AFHTTPRequestOperationManager manager];

AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
manager.responseSerializer = responseSerializer;

[manager GET:path parameters:params success:^(AFHTTPRequestOperation * operation, id responseObject) {

    if (![responseObject isEqual: [NSNull null]]) {

        if(responseObject[@"error"]) {
            NSError * error = [NSError errorWithDomain:@"" code:0 userInfo:@{NSLocalizedDescriptionKey: responseObject[@"error"]}];
        }
        else {
            // We now have our response object
        }
    }
    else {
        // response is nil
    }
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    // Failure
}];

您需要将 AFNetworking 添加到您的项目中,这是我项目的自定义功能,因此可能无法复制过去。

这应该会返回您可以使用的所有联系人的字典。

【讨论】:

  • 很好的详细问答。它对我有用。但它会在我的圈子中添加 google+ 联系人。有什么方法可以获取所有 gmail 联系人?
  • @simon_smiley 我按照您的建议获取 Google 联系人,但从 google 收到错误消息。你能检查一下吗,stackoverflow.com/questions/51614767/…
  • @AnilkumariOSdeveloper 我发现上面的整个过程很难可靠地复制。我建议将这两个问题(日历和联系人)分开,让您专注于更难的问题(联系人)。然后我将重点介绍为什么您会收到 403 错误。这个答案似乎是同一个问题,但相反(他们无法让日历工作):stackoverflow.com/questions/27130743/…
  • @simon_smiley 非常感谢您的快速回复,但是,我已经成功获取日历事件,并且即使我在谷歌开发人员设置中启用了这些 API 对我的项目的权限,也只有联系人获取的问题。
  • 但是,即使我为我的应用启用了这些 api,仍然显示权限不足。
猜你喜欢
  • 1970-01-01
  • 2015-01-08
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 2015-01-31
  • 1970-01-01
  • 2011-08-24
相关资源
最近更新 更多