我想在点击 Google Plus 按钮时调用 Google Plus 回调函数
Posted
技术标签:
【中文标题】我想在点击 Google Plus 按钮时调用 Google Plus 回调函数【英文标题】:I want to call Google Plus callback function when clicking on the Google Plus button 【发布时间】:2013-06-09 12:44:03 【问题描述】:我在我的项目中使用了一个 Google Plus 按钮 [内置 CodeIgniter]。这里我添加了以下代码。
<span id="signinButton">
<span
class="g-signin gooConnect"
data-callback="signinCallback"
data-clientid="my_project_client_id"
data-cookiepolicy="single_host_origin"
data-requestvisibleactions="http://schemas.google.com/AddActivity"
data-scope="https://www.googleapis.com/auth/userinfo.email">
</span>
</span>
然后我添加了谷歌提供的javascript代码。
<script type="text/javascript">
(function()
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
po.src = 'https://apis.google.com/js/client:plusone.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
)();
function signinCallback(authResult)
if (authResult['access_token'])
$.ajax(
url:base_url+'index.php/user/getUserProfile',
type:'POST',
data:'access':authResult['access_token'],
beforeSend : function()
$("#loadingImageBeforeResult").show('slow');
,
success : function(resp)
$("#loadingImageBeforeResult").hide('slow');
if( resp == 'exist' )
window.location.href=base_url+'index.php/user/my_deals';
else
$('#link_for_geniepage').trigger('click');
,
error : function(resp)
);
else if (authResult['error'])
// There was an error.
// Possible error codes:
// "access_denied" - User denied access to your app
// "immediate_failed" - Could not automatially log in the user
// console.log('There was an error: ' + authResult['error']);
</script>
这对我来说很好用,但是如果我在单独的选项卡中登录我的 Gmail 帐户,然后转到我的登录页面,回调函数只会使用我的 Gmail 凭据自动登录并将我重定向到我的仪表板。
我希望除非我点击那个 Google Plus 按钮,否则回调函数应该不起作用。我怎样才能做到这一点?请帮帮我。
【问题讨论】:
听起来您正在单击登录按钮,在登录时,它会将您带回旧标签页,但您希望它在同一个标签页中呈现? @aritra-chakraborty 因为我看不到与 PHP 的关系,所以我重新标记了您的问题。 好的...谢谢@SteAp...你能告诉我我该怎么做吗? 我在您的代码中没有看到 developers.google.com/+/web/+1button 中描述的“g-plusone”类。我建议您确保根据 Google 的示例使用它并从那里开始工作。 我已经从developers.google.com/+/web/signinlink复制了代码。我应该改变这个吗。 【参考方案1】:在signinCallback(authResult)
函数中,首先检查用户是否登录,然后检查方法值是AUTO
还是PROMPT
。 PROMPT
正是您想要的,因为它是在用户单击登录按钮时返回的。代码如下:
function signinCallback(authResult)
if (authResult['status']['signed_in'] && authResult['status']['method'] == 'PROMPT')
// User clicked on the sign in button. Do your staff here.
else if (authResult['status']['signed_in'])
// This is called when user is signed in to Google but hasn't clicked on the button.
else
// Update the app to reflect a signed out user
// Possible error values:
// "user_signed_out" - User is signed-out
// "access_denied" - User denied access to your app
// "immediate_failed" - Could not automatically log in the user
console.log('Sign-in state: ' + authResult['error']);
【讨论】:
【参考方案2】:从文档看来,登录按钮在以这种方式使用时,总是会尝试立即验证。由于您已登录 google 并已授权该应用,因此 google 会自动将您登录并将您发送到您的信息中心。
我建议不要使用该示例代码。相反,您可以使用 Google Javascript API (https://developers.google.com/+/web/api/javascript) 的其他部分制作一个普通按钮的 Google 登录按钮。点击后,调用gapi.auth.authorize()
让用户登录。然后在他们点击按钮之前什么都不会发生,当他们这样做时,它要么要求批准/登录,要么只是自动让用户登录。
【讨论】:
感谢@Ron,我会实施它,如果我遇到任何问题,请告诉您。以上是关于我想在点击 Google Plus 按钮时调用 Google Plus 回调函数的主要内容,如果未能解决你的问题,请参考以下文章
如何创建像 Android Google Plus App 这样的按钮