2011-06-30 62 views
2

我有一個應用程序,需要具有獨特的設置,每個用戶的實例添加到他們的頁面(這是作爲一個選項卡添加)。Facebook應用程序實例設置

我一直沒有找到任何文件來做到這一點 - 有誰知道如何?還是有人有一個例子要跟隨或學習的地方?


SOLUTION

我做了一個應用的用戶的頁面上的標籤一節,只顯示頁的管理員的。它鏈接到我應用程序中的一個頁面,將page_id發送到我的頁面。這使我現在可以根據page_id在我的數據庫中存儲信息(和設置)。

我發現Facebook有一部分可以轉到應用程序的設置頁面(您可以在應用程序設置中通過開發人員應用程序設置),該頁面也發送page_id - 但不會以加密方式發送感覺,所以我用我的設置選項加密了page_id。

如果有人需要進一步解釋,隨時給我發消息我會很樂意幫忙。

回答

2

我很確定你在找什麼是「頁面」實例。每個頁面都有一個Facebook ID,就像每個用戶一樣。大多數情況下,您可以在用戶標識的任何位置使用頁面標識。你想要做的是捕獲頁面的ID,而不是將用戶的ID添加到頁面(管理員)。滾動幾乎所有的方式向底部,如果這個URL來看看如何抓取網頁ID: http://developers.facebook.com/docs/guides/canvas/

基本上,一個額外的參數包括呼叫「頁」將包含頁面ID。使用它與頁面交互並存儲任何會話信息。

+0

嗨布倫特 - 我已經多次閱讀該頁面,並且知道如何獲取頁面ID等,但是如何根據用戶的所有者設置與它相關的設置?來自用戶的觀點:我安裝應用程序,我想在我的頁面上設置設置(但無法從該頁面獲取頁面ID)。創建管理設置鏈接是否可以通過將它們發送回其他頁面(使用page_id)的選項卡工作? –

+0

「用戶的所有者」?在「頁面」部分,會有一個「id」參數,它是頁面的ID。如果查看該頁面的用戶已授權您的應用,則簽名請求中將出現「user_id」項目。還會有一個「用戶」部分,您可以在這裏查看他們是否是管理員。基於此,您可以「揭示」其他選項。我不確定你指的是什麼「其他頁面」。只有2個ID,當前頁面ID和當前用戶ID。 –

+0

- 正確,並且它們不會被髮送到任何一頁中。頁面標識僅在頁面(不是設置頁面)上發送,用戶標識僅在設置頁面上可靠地發送。 –

1

您可以使用數據庫來存儲每個用戶實例的設置,並使用唯一鍵(使用php的uniqid函數)。

應用程序可以根據用戶的密鑰檢索設置。

+0

我知道我可以爲用戶的每個實例做一個,但我不希望每個用戶的實例,我想要我的每個應用程序的實例。不同之處在於,當我的應用程序作爲標籤添加到某人的網頁時,其他用戶查看該標籤 - 這被視爲用戶看到的標籤。我只需要爲添加應用的人存儲信息 - 而不是看到該標籤的人。 –

1

當用戶通過訪問另一個頁面中的標籤訪問您的應用程序時,您的應用程序會收到一個名爲signed_request的POST變量。

在PHP中,該變種可以解碼我通過以下方式:

function parse_signed_request($signed_request, $secret) { 
    list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

    // decode the data 
    $sig = base64_url_decode($encoded_sig); 
    $data = json_decode(base64_url_decode($payload), true); 

    if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') { 
    error_log('Unknown algorithm. Expected HMAC-SHA256'); 
    return null; 
    } 

    // check sig 
    $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true); 
    if ($sig !== $expected_sig) { 
    error_log('Bad Signed JSON signature!'); 
    return null; 
    } 

    return $data; 
} 

function base64_url_decode($input) { 
    return base64_decode(strtr($input, '-_', '+/')); 
} 

$arr = parse_signed_request($_POST["signed_request"], "YOUR_APP_SECRET"); 

echo print_r($arr); 

也許你可以使用$ ARR [「頁」] [「ID」]知道哪個頁面訪問你的應用程序。

你可以閱讀更多有關在這裏:

http://developers.facebook.com/blog/post/462/

http://developers.facebook.com/docs/authentication/signed_request/

希望它能幫助!

+0

嗨拉斐爾 - 謝謝你的答案。我完全瞭解已簽名的請求和頁面標識,但是我如何將其與設置關聯起來,因爲頁面標識不是*發送到主應用程序頁面,在那裏我有設置。是否有另一種方式來做設置或類似的? –