如何使用 google 联系人 api 在 iOS 应用程序中获取 gmail 联系人?

Posted

技术标签:

【中文标题】如何使用 google 联系人 api 在 iOS 应用程序中获取 gmail 联系人?【英文标题】:How to fetch gmail Contacts in iOS application using google contacts api? 【发布时间】:2015-01-08 19:32:18 【问题描述】:

在我的应用程序中,我们保留了通过 gmail 登录的选项。我需要检索 gmail 联系人。

在以下方法中,我使用身份验证对象(一旦成功)通过使用 url 创建请求来获取 gmail 联系人:“https://www.google.com/m8/feeds/contacts/default/full”

- (void)finishedWithAuth:(GTMOAuth2Authentication *)auth
               error:(NSError *)error 
if(!error) 

auth.clientID  =myClientId;
auth.clientSecret  =myClientSecret;
auth.scope= @"https://www.googleapis.com/auth/contacts.readonly";

NSString *urlStr = @"https://www.google.com/m8/feeds/contacts/default/full";

NSURL *url = [NSURL URLWithString:urlStr];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"3.0" forHTTPHeaderField:@"GData-Version"];
[auth authorizeRequest:request
          completionHandler:^(NSError *error) 
              NSString *output = nil;
              if (error) 
                  output = [error description];
               else 
                  NSURLResponse *response = nil;
                  NSData *data = [NSURLConnection sendSynchronousRequest:request
                                                       returningResponse:&response
                                                                   error:&error];
                  if (data) 
                      // API fetch succeeded :Here I am getti
                      output = [[NSString alloc] initWithData:data
                                                     encoding:NSUTF8StringEncoding];
                      NSLog(@"%@",output);
                   else 
                      // fetch failed
                      output = [error description];
                  
              
          ];
 

我收到客户端错误 (401)。我的请求有什么遗漏的吗?

【问题讨论】:

查看这个答案:***.com/a/23091506/1604312 @CKT 您好,请您更新您的答案,以便其他人可以从您的答案中受益。我有类似的查询并面临同样的问题.. 谢谢 嗨@CKT,如果你解决了这个问题。然后请分享您的解决方案或建议要执行的步骤。谢谢。 我也遇到了同样的问题,但我得到了解决方案。看看我的回答,它正在工作***.com/questions/40163529/… 【参考方案1】:

正确的范围是"https://www.google.com/m8/feeds"

迅速

class func getContactsFromUser() 
        let urlStr = "https://www.google.com/m8/feeds/contacts/default/full"
        let url = NSURL(string: urlStr);

        var request = NSMutableURLRequest(URL: url!)

        let appd = UIApplication.sharedApplication().delegate as! AppDelegate
        let error: NSError!
        appd.service.authorizer.authorizeRequest!(request, completionHandler:  (error) -> Void in

            if error != nil 
                println("error getting contacts is \(error.localizedDescription)")
             else 
                let response: AutoreleasingUnsafeMutablePointer<NSURLResponse?>=nil

                let data = NSURLConnection.sendSynchronousRequest(request, returningResponse: response, error: nil)

                if data != nil 
                    let stringResponse = NSString(data: data!, encoding: NSUTF8StringEncoding)
                    println("**** stringResponse **** \(stringResponse!)")
                 else 
                    println("error 2 getting contacts is ")
                
            
        )
    

在目标c中

- (void)doAnAuthenticatedAPIFetch 
NSString *urlStr = @"https://www.google.com/m8/feeds/contacts/default/full";
NSURL *url = [NSURL URLWithString:urlStr];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[self.auth authorizeRequest:request
          completionHandler:^(NSError *error) 
              NSString *output = nil;
              if (error) 
                  output = [error description];
               else 
                  NSURLResponse *response = nil;
                  NSData *data = [NSURLConnection sendSynchronousRequest:request
                                                       returningResponse:&response
                                                                   error:&error];
                  if (data) 
                      // API fetch succeeded :Here I am getti
                      output = [[NSString alloc] initWithData:data
                                                     encoding:NSUTF8StringEncoding];
                   else 
                      // fetch failed
                      output = [error description];
                  
              
          ];

【讨论】:

什么是 self.auth ?

以上是关于如何使用 google 联系人 api 在 iOS 应用程序中获取 gmail 联系人?的主要内容,如果未能解决你的问题,请参考以下文章

Google Contacts API v3:如何使用全文查询?

使用 Google Scripts 从 Google People API 获取 google 联系人电子邮件目录中的电子邮件列表

使用 JSON 更新 Google 的联系人 API

将Google People API与服务帐户配合使用

如何使用 google-api-ruby-client People API 传递 OAuth 令牌?

Google API/获取目录联系人