簡體   English   中英

無法通過使用Google API獲取聯系人

[英]Unable to fetch contacts from using google APIs

我正在使用Google Contacts API v3提取Google聯系人。

我從用於JavaScript的Google API客戶端庫開始,以進行身份​​驗證和授權。 我對API訪問的那部分沒有任何問題。

但是在完成身份驗證部分后,我必須提取google聯系人(只讀訪問權限對我來說很好)。 我正在將gdata-javascript-client用於Google Contacts API 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調用均失敗,

 $.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)

有人可以告訴我為什么此代碼不起作用嗎?

您已被瀏覽器的彈出窗口阻止程序阻止。

嘗試在單擊按鈕后調用auth()方法,它應該可以工作。

要使此問題無效,您需要:

  1. 首先,嘗試使用參數{immediate:true}調用gapi.auth.authorize 如果用戶已經授予他的許可,它將嘗試在后台獲取令牌。
  2. 如果失敗,則向用戶顯示一個用於身份驗證的按鈕。 用戶單擊它時,請使用參數{immediate:false}調用gapi.auth.authorize

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM