2016-06-13 20 views
8

Node.js client library kullanarak Google Analytics Reporting API v4 kimlik doğrulaması yapmakta sorun yaşıyorum. JWT (Hizmet Simgeleri: JSON & P12), API Anahtarları ve OAuth 2.0 ile başlayan tüm yöntemleri denedim, ancak hiçbir zaman doğrulanmadı.Google Analytics Raporlama API'sı için kimlik doğrulaması nasıl yapılır v4

API'yi geliştirici konsolumda, oluşturulan kimliklerimde etkinleştirdim ve google Analytics mülkümde ve görünümünde hakları verdim. Hizmet hesabım için yetki ve erişim belirtecini başarıyla alıyorum ancak Analytics Raporlama API'sı v4'te kimlik doğrulaması yapmak için nasıl kullanılacağını bilmiyorum.

401 hata iletisinin önüne takıldım: "İsteğin geçerli kimlik doğrulama bilgileri yok". JWT kimliğine bürünmüş kullanıcı kullanmayı denedim, ancak hizmet hesabı yetkisiz.

kullanma node.js istemci kütüphanesi ve JWT Kimlik Doğrulama: node.js istemci kütüphanesinin

var google = require('googleapis.js'); 

var viewID = 'XXXXXXXXX'; // Google Analytics view ID 
var key = require('service_account.json'); // Service account 

var jwtClient = new google.auth.JWT(key.client_email, null, key.private_key, ['https://www.googleapis.com/auth/analytics.readonly'], null); 
var oauth2Client = new google.auth.OAuth2(); 

jwtClient.authorize(function(err, result) { 
    if (err) { 
    console.log('Unauthorize'); 
    console.log(err); 
    return; 
    } 

    oauth2Client.setCredentials({ 
    access_token: result.access_token 
    }); 

    //Need to authenticate somewhere near here 
    var analytics = google.analyticsreporting('v4'); 
    //Or here 

    var req = { 
    reportRequests: [ 
     { 
     viewId: viewID, 
     dateRanges: [ 
      { 
      startDate: '2016-05-01', 
      endDate: '2016-06-30', 
      },], 
     metrics: [ 
      { 
      expression: 'ga:users', 
      }, { 
      expression: 'ga:sessions', 
      },], 
     },], 
    }; 

    //Maybe here 
    analytics.reports.batchGet(req, 
    function(err, response) { 
     if (err) { 
     console.log('Fail'); 
     console.log(err); 
     return; 
     } 
     console.log('Success'); 
     console.log(response); 
    } 
); 
}); 

Önceki sürümler müşteri belirlemek için bir yöntem var gibi görünüyor ama belki kullanımdan kaldırıldı, kayboldu.

withAuthClient(oauth2Client) 

İstemci veya belirteci API çağrısı veya isteğinde iletmeye çalıştım ancak hiçbiri işe yaramıyor.

google.analyticsreporting({ version: 'v4', auth: oauth2Client }); 
google.analyticsreporting({ version: 'v4', access_token: result.access_token }); 

Belki bir çaylak soru ama bunu nasıl, Google API veya istemci kitaplığı belgelerinde v4 kimlik Raporlama Analytics ile ilgili bir şey görmüyorum bilmiyorum ve çoğu örnekler i kullanır bulduk Google Analytics API v3. Birisi başarıyla Analytics Raporları API v4 kimlik doğrulaması için yönettiyseniz

, lütfen yardım:/

cevap

7

öğrendim ne eksikti:

  • Google API İstemci Kitaplığı "Seçenekler":

    google.options({ auth: oauth2Client }); //this one is not very optional 
    
  • Google Analytics Raporlama API'sı v4 belgelerinden farklı olarak, istemci kitaplığını kullanarak sorguların, her istek için bir istemci belirtmesi gerekir. client library documentation gerçekten doğru değil, fark CVarisco için anks ..): sunucu tarafında bir hizmet hesabı ile kimlik doğrulaması yapmak için önerilen yol auth.getApplicationDefault kullandığını da

    var request ={ 
        'headers': {'Content-Type': 'application/json'}, 
        'auth': oauth2Client, 
        'resource': req, 
    }; 
    
+0

Aynı şeyi .net içinde yapmaya çalışıyorum ama API v4'te, yalnızca api anahtarını kullanarak erişmenin bir yolu yok gibi görünüyor, yanlış mıyım? http://stackoverflow.com/questions/43685261/analytics-reporting-v4-with-api-key – Giox

+0

Bu bir http url çağrısıyla yapılabilir mi? – shzyincu

0

Not.
... kesik ...
- Sen aksi bir bulut proje veya ilişkili verilerin bulunduğu API'leri erişme:

https://developers.google.com/identity/protocols/application-default-credentials

Biz aşağıdaki koşulların herhangi Uygulama Varsayılan Kimlik kullanılması önerilir kişisel kullanıcı verileri yerine tüm uygulama kapsamına alındı. Kullanıcı verilerini içeren çağrılarda, son kullanıcının erişim için açık bir şekilde izin verdiği bir yetkilendirme akışını kullanmak en iyisidir (bkz. Google API'lerine Erişmek için OAuth 2.0'ı kullanma).

İlgili konular