2010-11-11 162 views
0

我有這個Facebook應用程序的個人資料頁:如何讓Facebook應用程序安裝/安裝/自動書籤

http://www.facebook.com/developers/editapp.php?app_id=122313254494566#!/apps/application.php?id=122313254494566

這是我基於iframe的Facebook應用程序相關聯,寶石微調:

http://apps.facebook.com/gemspinner/

我從閱讀最近的Facebook文檔的理解是,在過去幾個月中,Facebook改變了用戶可以「書籤」一個應用程序的方法(「書籤」,據我瞭解,是將應用程序的圖標添加到Facebook主頁左側的用戶應用程序列表的過程。我的理解是,書籤現在應該在用戶第一次使用該應用程序時自動發生。

但是,這不是我的應用程序發生。當你去那裏時,它只是顯示你的應用程序頁面,並讓你玩遊戲。沒有確認信息,就像我在其他應用程序中看到的那樣,檢查是否允許此應用程序訪問我的Facebook帳戶中的各種信息。我的主頁上沒有添加書籤/圖標到應用程序列表。

所以我很明顯缺少一些東西。我試圖按照這裏的說明進行操作:http://developers.facebook.com/docs/guides/canvas/,包括書籤上的部分,但是該部分聽起來就像是自動發生的。

我的應用程序已被批准用於Facebook目錄(儘管它尚未顯示在搜索目錄中)。它不在「沙箱」模式。

也許有一些Facebook API調用,我必須讓用戶「安裝」應用程序。如果是這樣,我很想知道這些是什麼。

回答

0

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