由于过去几年 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 添加到您的项目中,这是我项目的自定义功能,因此可能无法复制过去。
这应该会返回您可以使用的所有联系人的字典。