在 iOS 上使用 API 获取 Google 联系人

Get Google contacts using API on iOS

我已将 Google 登录添加到我的应用程序,该应用程序使用 Firebase 登录社交媒体。我现在正在尝试访问 Google 用户的朋友。我想要 return 一个 friends/contacts 的列表,这样我就可以搜索以查看他们当前是否正在使用该应用程序。

到目前为止,我发现这方面的信息很少。

有许多未回答的 Whosebug 问题,提出了类似的 thing

Google API 已从 Google+ 登录更新为 Google 登录 API 这意味着之前我们可以找到共享 code now they have much less information available.

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

也有一些 answers 说不可能这样做。

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

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

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

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

由于过去几年 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"]];

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

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

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

一旦你做到这一点,你只需要执行正确的 API 呼叫 return 你的朋友。对于不同 Google 网站上的纯粹数量的不同,这说起来容易做起来难。我完成了以下内容:

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 添加到您的项目中,这是我的项目的自定义函数,因此可能无法复制过去。

虽然这应该 return 一个您可以使用的所有联系人的字典。