我正在使用以下代码让我的用户从我的swift应用程序成功登录他们的goole帐户,但之后我无法检索联系人。我究竟做错了什么? JSON响应说你的请求中有一个错误。我们所知道的只是
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
//
let idToken = user.authentication.idToken
self.getUserContacts(email: user!.profile.email!)
}
func getUserContacts(email : String){
var request = URLRequest(url: URL(string: "http://google.com/m8/feeds/contacts/\(email)/full")!)
request.timeoutInterval = 120.0
let session = URLSession.shared
let task = session.dataTask(with: request as URLRequest) {
(data, response, error) -> Void in
let httpResponse = response as! HTTPURLResponse
let statusCode = httpResponse.statusCode
let result = self.convertDataToDictionary(data: data!)
}
task.resume()
}
答案 0 :(得分:1)
我也遇到了这个问题,我找到了解决问题的方法
func doLoginGoogle() {
GIDSignIn.sharedInstance().scopes = ["https://www.google.com/m8/feeds","https://www.googleapis.com/auth/contacts.readonly"];
GIDSignIn.sharedInstance().signIn()
}
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
let urlString = "https://www.google.com/m8/feeds/contacts/default/full?access_token=\(user.authentication.accessToken!)"
print(GIDSignIn.sharedInstance().scopes)
Alamofire.request(urlString, method: .get)
.responseString { (data) in
print(data)
}
}
答案 1 :(得分:0)
401错误是"未经授权",这意味着您没有包含凭据或凭据错误。在这种情况下,它似乎是前者。
您需要对该OAuth令牌执行某些操作。我不确定究竟是什么,因为我不知道特定的Google API,但我怀疑您应该在后续请求中将其插入某个标题字段,例如。
request.addValue("Bearer " + idToken, forHTTPHeaderField: "Authorization")
或类似的。查看该API的文档,看看您实际应该使用该令牌做什么。以上是一个纯粹的猜测。 : - )