成功登录swift后获取谷歌联系人

时间:2017-02-22 20:51:47

标签: json swift contact nsurlrequest google-contacts

我正在使用以下代码让我的用户从我的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()
}

2 个答案:

答案 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的文档,看看您实际应该使用该令牌做什么。以上是一个纯粹的猜测。 : - )