2015-04-23 10 views
6

Sto lavorando per aggiungere un pulsante di accesso a Google a un sito Web. Nei documenti, Google offre due opzioni, un pulsante "base":Pulsante di accesso dell'API di Google: Basic v. Custom

https://developers.google.com/identity/sign-in/web/sign-in

e un pulsante "personalizzato" con signin2.render():

https://developers.google.com/identity/sign-in/web/build-button

Il problema che sto incontrando è che i due pulsanti mostrano un comportamento diverso. Se accedo con uno dei due pulsanti, il "titolo" del pulsante cambia da "Accedi" a "Accesso" per riflettere lo stato di accesso. Tuttavia, se ora aggiorno la pagina, il pulsante di base mantiene il titolo "Accesso", mentre il pulsante personalizzato cambia il suo titolo in "Accedi", suggerendo (erroneamente) che lo stato di accesso è cambiato attraverso la pagina ricaricare.

Se controllo manualmente il segno-in stato di post-aggiornamento nella console del browser eseguendo:

auth = gapi.auth2.getAuthInstance() 
auth.isSignedIn.get() 

ottengo true come un ritorno, dimostrando che l'aggiornamento in effetti non ha alterato il segno-in stato di , contrariamente al cambiamento nel titolo del pulsante.

Quindi la mia domanda è: come posso ottenere che il pulsante personalizzato si comporti come il pulsante di base, in modo che il titolo non cambi durante l'aggiornamento? Un altro comportamento (correlato, presumo) del pulsante base che mi piace è che il callback "onsuccess" del pulsante viene richiamato su ogni caricamento della pagina (se l'utente è connesso), mentre il pulsante personalizzato non lo fa. Quindi mi piacerebbe anche cambiare questo comportamento sul pulsante personalizzato per abbinare quello del pulsante di base. Ogni suggerimento sarà molto apprezzato!


I parametri sto passando a rendere l'aspetto seguente:

function renderButton() { 
    gapi.signin2.render('mybutton', { 
    'scope': 'profile email', 
    'width': 125, 
    'height': 40, 
    'longtitle': false, 
    'theme': 'light', 
    'onsuccess': onSuccess, 
    'onfailure': onFailure 
    }); 
} 

risposta

7

Potrebbe fornire params che si sta passando al pulsante? Potresti confermare che non ci sono errori nella console JS e non ci sono richieste 400/403/404/4xx?

Ho provato questa funzionalità utilizzando il seguente codice e sembra funzionare perfettamente bene (devi sostituire YOUR_CLIENT_ID con il tuo client_id effettivo).

<head> 
    <meta name="google-signin-client_id" content="YOUR_CLIENT_ID"> 
</head> 
<body> 
    <script> 
    function onSuccess(googleUser) { 
     console.log('onSuccess!'); 
    } 

    function onCustomSuccess(googleUser) { 
     console.log('onCustomSignIn!'); 
    } 

    function signOut() { 
     var auth2 = gapi.auth2.getAuthInstance(); 
     auth2.signOut().then(function() { 
     console.log('User signed out.'); 
     }); 
    } 

    function onLoad() { 
     gapi.signin2.render('custom_signin_button', { 
     'onsuccess': onCustomSuccess 
     }); 
    } 
    </script> 

    <div class="g-signin2" data-onsuccess="onSuccess"></div> 
    <div id="custom_signin_button"></div> 
    <a href="#" onclick="signOut();">Sign out</a> 

    <script src="https://apis.google.com/js/platform.js?onload=onLoad" async defer></script> 
</body> 
</html> 

Edit: Dichiarare portata base come meta tag di testa è la soluzione migliore.

<meta name="google-signin-scope" content="profile email"> 
+0

Grazie, questo funziona come desiderato. Il mio codice differisce nei parametri che sto passando al pulsante (vedi sopra), compresi gli ambiti. Perché questo altera il comportamento? Posso non aggiungere questi ambiti e anche mantenere il titolo del pulsante tramite aggiornamento? C'è un mockup qui: [http://bmudd.github.io/signin/index.html](http://bmudd.github.io/signin/index.html) –

+1

Questo è un bug da parte di Google. Nel frattempo la soluzione alternativa è aggiungere allo . –

+0

Infatti, se si richiede sempre l'e-mail del profilo, utilizzare solo meta tag dovrebbe essere la soluzione migliore (non è necessario aggiungere un parametro di ambito separato nelle chiamate di signIn). –