0

Я использую API контактов Google v3 для извлечения контактов google.Не удалось получить контакты с помощью API Google

Я начал с клиентской библиотеки API API для JavaScript для аутентификации и авторизации. У меня нет проблем с этой частью доступа к API.

Но после выполнения авторизационной части мне нужно найти контакты google (доступ для чтения был бы прекрасен для меня). Я использую gdata-javascript-клиент для API контактов Google v3. Я также обращаюсь к официальному документу google и скопировал код и внесли необходимые изменения для работы для меня.

Моя проблема,

  1. Его не работает. Он не входит в зарегистрированную функцию обратного вызова.
  2. Я также пробовал использовать режим только для чтения. Но это тоже не работает.

Существует два фрагмента кода, для которых я следую, один для редактируемого режима, а другой - режим только для чтения.

Редактируемый режим доступа:

function handleAuthResult(authResult){ 
    if (authResult && !authResult.error) { 
     fetch_contacts_data(authResult); 
    }; 
} 

function auth() { 
    var config = { 
     'client_id': 'CLIENT_ID', 
     'scope': 'https://www.google.com/m8/feeds' 
    }; 
    gapi.auth.authorize(config, handleAuthResult); 
} 


function fetch_contacts_data(token) { 
    $.ajax({ 
     url: "https://www.google.com/m8/feeds/contacts/default/full?access_token=" + token.access_token + "&max-results=70000&alt=json" + "&callback=?", 
     dataType: "json", 
     success:function(data) { 
      contacts = []; 
      for (var i = 0, entry; entry = data.feed.entry[i]; i++) { 
       var contact = { 
        'name' : entry['title']['$t'], 
        'id' : entry['id']['$t'], 
        'emails' : [], 
        'phoneNumber' : [] 
       }; 

       if (entry['gd$email']) { 
        var emails = entry['gd$email']; 
        for (var j = 0, email; email = emails[j]; j++) { 
         contact['emails'].push(email['address']); 
        } 
       } 
       if (entry['gd$phoneNumber']) { 
        var phoneNumber = entry['gd$phoneNumber']; 
        for (var j = 0, phone; phone = phoneNumber[j]; j++) { 
         contact['phoneNumber'].push(phone['$t']); 

        } 
       } 
       if (!contact['name']) { 
        contact['name'] = contact['emails'][0] || "<Unknown>"; 
       } 
       contacts.push(contact); 
      } 
      numContacts = contacts.length; 
      friend_list_json_str = ''; 
      for(var j=0;j<numContacts;j++) { 
       name = (contacts[j])['name']; 
       emails = (contacts[j])['emails']; 
       phone = (contacts[j])['phoneNumber']; 
       email_list= ''; 
       phone_list= ''; 
       for(var k=0;k<emails.length;k++) { 
        email_list += '"'+emails[k] + '",' ; 
       } 
       email_list = email_list.substring(0, email_list.length -1) 

       for(var k=0;k<phone.length;k++) { 
        phone_list = '"'+phone[k] + '",'; 
       } 
       phone_list += phone_list.substring(0, phone_list.length -1) 

       friend_json_str = ''; 
       friend_json_str += '{"name":"'+name + '",'; 
       friend_json_str += '"emails":['+email_list+'],'; 
       friend_json_str += '"phoneNumber":['+phone_list+']' ; 
       friend_json_str += '},'; 
       friend_list_json_str += friend_json_str; 
      } 
      friend_list_json_str = friend_list_json_str.substring(0, friend_list_json_str.length - 1); 

      var user_data = get_user_data(); 
      var len = user_data.length; 
      user_data = user_data.substring(0, len - 2); 
      user_data += friend_list_json_str + ']}'; 
      data = "invite_data="+ user_data; 
      url = '/invite'; 
      var posting = $.post(url, data); 

      posting.done(function(response_data) { 
      }); 
     } 
    }); 
} 

доступ только для чтения:

function auth() { 
    var config = { 
     'client_id': 'CLIENT_ID', 
     'scope': 'https://www.googleapis.com/auth/contacts.readonly' 
     }; 
    gapi.auth.authorize(config, handleAuthResult); 
} 

Примечание: остальная часть кода такая же, как и выше

В обоих случаях АЯКС звонок не работает,

$.ajax({ 
      url: "https://www.google.com/m8/feeds/contacts/default/full?access_token=" + token.access_token + "&max-results=70000&alt=json" + "&callback=?", 
      dataType: "json", 
      success:function(data) 

Может кто-нибудь скажет мне, почему этот код не работает?

+1

Помните, что ваш идентификатор клиента должен быть безопасным и безопасным в любое время. Я отредактировал ваш вопрос и удалил его для вас. – DaImTo

+0

Большое спасибо DalmTo! –

+0

Удалите '+ '& callback =?" 'Из запроса ajax. Я думаю, что это вызывает ответ JSONP вместо того, чтобы использовать ваш обратный вызов. И client_ids можно считать общедоступными, они все-таки включены в клиентскую сторону JS. Это ключи сервера/секреты, которые вы должны хранить в секрете. – abraham

ответ

0

Вы заблокированы блокировщиком всплывающих окон своего браузера.

Попробуйте позвонить по методу auth() после нажатия на кнопку, это должно сработать.

Чтобы аннулировать эту проблему, вам нужно:

  1. Во-первых, попытка вызова gapi.auth.authorize с параметром {immediate:true}. Он попытается получить токен в фоновом режиме, если пользователь уже дал свое разрешение.
  2. Если это не удается, отобразите пользователю кнопку для аутентификации. Когда пользователь нажмет на него, вызовите gapi.auth.authorize с параметром {immediate:false}.
+0

Привет, Дэвид, это не сработало для меня ..После дальнейшего расследования я обнаружил, что получаю данные ответа, но почему-то зарегистрированный обратный вызов не вызван. –

Смежные вопросы