顯然,我錯過的是,爲了讓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()可能是一個更好的名稱。