根据这个question的答案,我有这样的代码,它使用谷歌登录,而不使用带有g-signin2样式的div:
<html>
<head>
<meta name="google-signin-client_id" content="APP_CLIENT_ID">
</head>
<body>
<div id="my-signin2"></div>
<a href="#" onclick="signOut();">Sign out</a>
<script>
function onSuccess(googleUser) {
console.log('Logged in as: ' + googleUser.getBasicProfile().getName());
}
function onFailure(error) {
console.log(error);
}
function renderButton() {
gapi.signin2.render('my-signin2', {
'scope': 'profile email',
'width': 240,
'height': 50,
'longtitle': true,
'theme': 'dark',
'onsuccess': onSuccess,
'onfailure': onFailure
});
}
function signOut() {
var auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function () {
console.log('User signed out.');
});
}
</script>
<script src="https://apis.google.com/js/platform.js?onload=renderButton" async defer></script>
</body>
</html>但是,我希望使用GoogleAuth.then(onInit, onFailure),以便在库初始化完成时通知我,并且可以决定更新我的视图。我也不能添加任何监听程序,以便在登录完成时得到通知。
问题是,在使用上面的代码或类引用创建按钮之前,gapi.auth2是未定义的。似乎如果没有这两个步骤中的任何一个,我就无法调用gapi.auth2.getAuthInstance()来设置侦听器,也无法获得通知我何时初始化完成的承诺。
我的问题是,我想在创建按钮之前进行初始化,看看是否需要创建登录按钮。
发布于 2016-03-14 23:25:31
我在类似领域的另一个问题回答了这个问题:How do I initialise Google Sign in with no login button?
答案是不使用platform.js,而是使用api.js并加载auth2:
<html lang="en">
<head>
<script src="https://apis.google.com/js/api.js"></script>
<script type="text/javascript">
function onSignIn(googleUser) {
console.log( "signedin");
// Useful data for your client-side scripts:
var profile = googleUser.getBasicProfile();
console.log("Name: " + profile.getName());
};
gapi.load('auth2', function() {
gapi.auth2.init({
client_id: "REPLACE_WITH_YOUR_ID",
scope: "profile email" // this isn't required
}).then(function(auth2) {
console.log( "signed in: " + auth2.isSignedIn.get() );
auth2.isSignedIn.listen(onSignIn);
var button = document.querySelector('#signInButton');
button.addEventListener('click', function() {
auth2.signIn();
});
});
});
</script>
</head>
<body>
<div id="signInButton"><img src="IMAGE_FILE" /></div>
</body>
</html>发布于 2016-03-14 22:03:02
为了获得gapi.auth2,你首先需要加载它。
gapi.load('auth2', function() {
// continuation
gapi.auth2.init();
});platform.js基本上加载api.js + .signin2名称空间。.signin2名称空间允许呈现按钮和小部件。但是如果你想要细粒度的控制,我不建议你使用它。
.signin2所做的是
根据用户的登录状态,当使用字符串clicked
g-signin2并呈现按钮https://stackoverflow.com/questions/35985616
复制相似问题