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

sim*_*ley 6 google-api ios google-signin

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

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

有许多stackoverflow问题没有答案,要求类似的事情.

Google API已经从Google+登录信息更新为Google Signin API,这意味着之前我们可以找到共享代码,但现在他们可用的信息要少得多.

这意味着一些答案似乎现在可能会被贬值.

还有一些答案表明不可能这样做.

我的问题是,有似乎并没有成为去年和新GoogleSignIn中的任何答案或问题只是发布了刚刚超过一年前.

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

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

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

sim*_*ley 5

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

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

要做的第一件事是确定您已经正确添加您的应用程序的谷歌控制台这里.请务必添加Google+ API并获取您的客户ID.

其次,您需要设置Google登录.这非常简单,并且有一些很好的资源来设置它.我会推荐这款 Google youtube视频,但网上还有很多其他资源.我不会详细说明,因为这不是问题的重点.

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

确保已将两个委托添加到viewController

<GIDSignInDelegate, GIDSignInUIDelegate
Run Code Online (Sandbox Code Playgroud)

并在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"]];
Run Code Online (Sandbox Code Playgroud)

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

在此阶段,您可以检查是否所有设置都正确.加载您的应用并点击Google登录按钮,它应该加载webview并要求您确认您的权限.它应该如下所示:

在此输入图像描述

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

一旦你掌握了这一点,你只需要执行正确的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
}];
Run Code Online (Sandbox Code Playgroud)

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

这虽然应该返回您可以使用的所有联系人的字典.