2011-09-23 76 views
1

Facebook測試用戶(爲應用創建)在某些方面與普通用戶的工作方式不同。 IE瀏覽器。他們不喜歡fanpage,所以你不能測試「create.edge」偵聽器是否正確設置。檢測用戶是否爲測試用戶

有沒有一種方法來檢測用戶是否認證到應用程序是測試用戶?實現僞造版本的對話將是有用的,測試用戶不能使用(即喜歡fanpage)。

我的研究:

  • 我已經檢查signed_request傳遞給應用程序,它看起來同爲測試用戶爲普通用戶。
  • 我檢查了graph.facebook.com/ [測試用戶ID],它也看起來很正常。

回答

1

根據他的Graph API詳細信息,您無法檢查用戶是否爲測試用戶。同樣,你不能檢查用戶是否喜歡特定的頁面。但是,您可以根據用戶喜歡的頁面列表檢查您的page_id。因此,爲了確定是否給予user_id是定期或測試用戶,你必須檢查它,應用測試用戶列表:

https://graph.facebook.com/APP_ID/accounts/test-users?access_token=APP_ID|APP_SECRET 

所以流量會是這樣:

  1. 驗證用戶
  2. 得到他./likes列表
  3. 找到你page_id並退出成功
  4. 讓您的應用./accounts/test-users列表
  5. 找到給定user_id並退出成功
  6. 退出失敗 - 要求用戶喜歡您的頁面。

這是一個額外的調用,但由於測試用戶無法轉換爲常規用戶,因此可以安全地緩存結果以提高性能。我建議在一段時間內緩存「喜歡」檢查,但YMMV。

+0

你實際上可以檢查用戶是否是粉絲:http://developers.facebook.com/docs/reference/rest/pages.isFan/。這是比取他的喜歡更可靠的方法(我已經測試了一段時間,FB有時會返回用戶的空白頁面列表)。你測試用戶是否是測試用戶的想法很好。 –

0

是Facebook的用戶是測試您可以更改名稱和密碼,否則返回錯誤代碼(#200)您沒有足夠的權限來執行此操作

**我的解決方案:**

public function isTestUser($facebook_uid){ 
    FacebookSession::setDefaultApplication(config_item('APP_ID'), config_item('APP_SECRET')); 

    $session = FacebookSession::newAppSession(); 

    try { 
     $session->validate(); 
    } catch (FacebookRequestException $ex) { 
     // Session not valid, Graph API returned an exception with the reason. 
     return FALSE; 
    } catch (\Exception $ex) { 
     // Graph API returned info, but it may mismatch the current app or have expired. 
     return FALSE; 
    } 

    $request = new FacebookRequest(
     $session, 
     'POST', 
     '/'.facebook_uid, 
     array(
      'password' => 'password', 
      'name' => 'Test Username' 
     ) 
    ); 

    try { 
     $response = $request->execute(); 
    } catch (FacebookRequestException $ex) { 
     // (#200) You do not have sufficient permissions to perform this action 
     // (#100) Invalid password 
     // (#100) Invalid name 
     return ($ex->getCode() == 100) ? TRUE : FALSE; 

    } catch (\Exception $ex) { 
     return FALSE; 
    } 

    /* 
    object(Facebook\GraphObject)#1714 (1) { 
    ["backingData":protected]=> 
    array(1) { 
     ["success"]=> 
     bool(true) 
    } 
    } 
    */ 

    $graphObject = $response->getGraphObject(); 

    return ($graphObject) ? TRUE : FALSE; 
}