簡體   English   中英

我怎么知道我的應用程序正在Facebook內運行

[英]How do I know my app is being Run inside Facebook

如果我有一個應用程序,它在Facebook內運行。 第一次加載我會得到的

$_REQUEST['signed_request'] 

但如果你點擊我的應用程序內的任何鏈接並在應用程序中導航,你將失去$_REQUEST['signed_request']

有沒有其他方法可以知道我的應用程序是在瀏覽器中運行還是在Facebook內運行?

您可以繼續傳遞signed_request 在您的應用程序中,您的所有鏈接應以?signed_request=<whatever> (或者如果已存在查詢字符串,則為&signed_request=<whatever> ),並且所有POST表單都應包含signed_request作為隱藏輸入。 然后,您將始終可以訪問signed_request

您可以在php會話中保存signed_request的值,如下所示:

session_start();
if (isset($_REQUEST['signed_request'])){
  $_SESSION['signed_request'] = $_REQUEST['signed_request'];
}

稍后您可以檢查session_request值是否保存在會話中:

if (isset($_SESSION['signed_request'])){
  //do something
}

如果您真的只需要知道您的應用程序是否通過Facebook訪問,最簡單的方法是在您的應用程序設置中使用唯一的URL - 或者像fb.yoursite.com這樣的唯一主機名,或者像www這樣的唯一目錄名。 yoursite.com/fbapp/。 然后配置服務器,使唯一的主機名/目錄指向與常規主機名/目錄相同的位置。 這樣可以通過任何一種方式訪問​​相同的文件,但是您的腳本可以檢查$ _SERVER信息以判斷它是否是Facebook請求。

但是......除非你嚴格處理非授權訪問,否則你必須考慮這是否能解決任何問題。 如果你必須“檢測”這樣的事情,你不能攜帶任何持久的狀態信息,並且你的用戶一旦進入第2頁就會失去他的“身份”。所以很可能,你需要考慮的是不是在每個頁面上告訴用戶是否在Facebook中的方式,而是在第一頁上解析您需要的所有信息然后在所有其他頁面中使用的方法。 許多人使用PHP會話。 就個人而言,我認為這是一個壞主意,並且會做更像Ben在他的回答中提出的建議(使用GET和POST來傳遞你需要的信息)。

就個人而言,我使用的一個非常簡單但有效的解決方案是一些客戶端javascript(顯然可以禁用等) - 這很適用於簡單的重定向,並且它不適用於所有情況。

// Redirect if the page is not an iframe
if (window.location == window.parent.location){
    window.top.location = '{{ facebook_tab_url }}';
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM