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

时间:2016-05-16 06:09:18

标签: ios google-api google-signin

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

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

有许多stackoverflow问题没有答案,要求类似thing

Google API已从Google+登录信息更新为Google Signin API,这意味着之前我们可以找到共享code,但现在信息更少available

这意味着现在有些answers可能会被折旧。

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

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

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

Facebook API允许用户返回已登录应用但未登录所有用户的用户的详细信息。是否存在类似于Google所缺少的内容,或者目前还没有办法使用官方API执行此操作。

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

1 个答案:

答案 0 :(得分:5)

过去几年Google API版本的数量以及用户实际使用Google详细信息登录的频率很低,这个问题变得更加困难。这意味着由于缺乏需求,几乎没有文档。我终于设法在应用程序代码的this伟大的快速教程的帮助下工作了。本教程很少见,因为它逐步完成整个登录过程,并覆盖了我所追求的联系人查找。

我建议完成本教程,但我也会在这里提供一些最重要的信息。

首先要确保您已将应用正确添加到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登录按钮,它应该加载webview并要求您确认您的权限。它应该是这样的:

enter image description here

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

一旦你到目前为止,你只需要执行正确的API调用就可以回复你的朋友。对于不同的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添加到您的项目中,这是我项目的自定义功能,因此可能无法复制过去。

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