显然,我错过的是,为了让Facebook为用户“自动”书签应用程序,需要在JavaScript代码中调用FB.login()。我想这样做有一定的意义,因为在您的应用程序(或代表您的应用程序的Facebook)可以对用户帐户进行任何更改(如添加书签)之前,用户必须先通过应用程序进行“验证”。尽管如此,它似乎可能有的情况下,它添加书签没有身份验证,并肯定阅读Facebook的文档,人们会认为,简单地访问应用程序将创建书签,无论身份验证。
无论如何,另一个问题是如何使验证顺利进行。这可能是因为使用页面重定向有更巧妙和更实用的方式,但它似乎像这个新API想要显示登录UI的弹出窗口。如果该弹出是由按钮按下(即,说/意味着“点击此处用此应用程序进行验证”的按钮)触发的,那么您将看到没有可怕浏览器弹出警告的弹出窗口。但是,如果你只是自己调用FB.login()函数,就会得到可怕的警告。
所以,为了解决这个问题,我让我的代码触发按钮事件,并且它工作(至少在Firefox上)。该代码是:
<body>
<div id="fb-root">
</div>
<script src="http://connect.facebook.net/en_US/all.js" type="text/javascript"></script>
<script type="text/javascript">
FB.init({
appId : 'your app id here',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : false // parse XFBML
});
function fblogin() {
FB.getLoginStatus(function(response) {
if (response.session) {
// logged in and connected user, someone you know
} else {
// no user session available, someone you dont know
FB.login(
function(response)
{
if (response.session)
{
// user successfully logged in *or* user was already logged in
// *and* user has now been successfully authenticated for this app
// *and* a bookmark added by Facebook for this app
}
else
{
// user cancelled login
}
});
}
});
}
</script>
<a id="clickme" href="#" onclick="fblogin();return false;"></a>
... the rest of your page here ...
<script type="text/javascript">
document.getElementById("clickme").onclick();
</script>
</body>
这一切似乎相当hackish的,但我不知道一个更好的方法,使同时避免弹出警告验证自动发生。
在我看来FB.login()函数被命名为混淆。这似乎意味着,“如果用户没有登录,请提供登录UI。但是,如果用户已经登录,或者用户使用用户界面成功登录,还需要为该应用程序验证用户身份,包括为该用户自动为该应用程序添加书签。“因此,至少loginAndAuthenticate()可能是一个更好的名称。