2016-06-13 59 views
8

Sono nei guai per l'autenticazione a Google Analytics Reporting API v4 utilizzando Node.js client library. Ho provato tutti i metodi, iniziando con JWT (Service Token: JSON & P12), API Keys e OAuth 2.0, ma non sono mai stato autenticato con successo.Come autenticare l'API di reporting di Google Analytics v4

Ho attivato l'API nella console degli sviluppatori, ho creato gli ID e ho concesso i diritti sulla mia proprietà google analytics e vista. Ricevo con successo l'autorizzazione e un token di accesso per il mio account di servizio, ma non so come usarlo per autenticarsi in Analytics Reporting API v4.

Sono bloccato davanti a un messaggio di errore 401: "La richiesta non ha credenziali di autenticazione valide". Ho provato a utilizzare l'utente di rappresentazione JWT, ma l'account di servizio non è autorizzato.

Utilizzando libreria client Node.js e autenticazione JWT:

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); 
    } 
); 
}); 

Le versioni precedenti di libreria client Node.js sembra avere un metodo per specificare il client ma è scomparsa, forse deprecato.

withAuthClient(oauth2Client) 

Ho cercato di passare il cliente o il token nella chiamata API o nella richiesta, ma nessuno funziona.

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

Forse è una domanda niubbo, ma non so come farlo, non vedo tutto ciò che riguarda l'autenticazione Analytics Segnalazione v4 nella API o libreria client di documentazione google, e la maggior parte esempi che ho trovato impieghi API di Google Analytics v3.

Se qualcuno è riuscito ad autenticare con successo ad Analytics reporting API v4, per favore aiutatemi:/

risposta

7

scoperto quello che mi mancava:

  • Google API client di librerie "Opzioni":

    google.options({ auth: oauth2Client }); //this one is not very optional 
    
  • A differenza della documentazione API di reportistica di Google Analytics v4, le query che utilizzano la libreria client devono avere intestazioni per specificare un client per ciascuna richiesta (th anks a CVarisco che notano che, client library documentation non è davvero accurata ..):

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

Sto cercando di fare la stessa cosa in .net ma sembra che in API v4, non c'è modo di accedere utilizzando solo la chiave API, ho sbagliato? http://stackoverflow.com/questions/43685261/analytics-reporting-v4-with-api-key – Giox

+0

Questo può essere fatto tramite una chiamata http url? – shzyincu

0

Si noti inoltre che il modo consigliato di fare l'autenticazione con un account di servizio sul lato server utilizza auth.getApplicationDefault.

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

Si consiglia di utilizzare le credenziali applicazione predefinita in una qualsiasi delle seguenti circostanze:
... snip ...
- si accede API con i dati associati a un progetto di nuvola o in altro modo ambito all'intera applicazione piuttosto che ai dati utente personali. Per le chiamate che coinvolgono i dati dell'utente, è preferibile utilizzare un flusso di autorizzazione in cui l'utente finale fornisce il consenso esplicito per l'accesso (vedere Utilizzo di OAuth 2.0 per accedere alle API di Google).