2014-10-03 149 views
0

我有一個應用程序在Android上,我有權訪問我的個人資料,但與該數據(可能是access_token?)我想登錄到我的Symfony2項目沒有任何密碼。還是應該通過Symfony2進行登錄以及Android應用程序和我的Symfony2項目之間的交互?Facebook API通過Android和登錄到Symfony2

我該怎麼辦?

無論如何感謝任何人的提示。

回答

1

您可以使用圖形API從Facebook

從Android應用程序,你從SDK中的access_token。 爲了從SF2應用程序獲取令牌,可以調用/ login/facebook?token = [access_token] api。

$url = 'https://graph.facebook.com/me?access_token='.$token; 
$response = $this->wget($url); 
$data = json_decode($response['content'], true); 
if(isset($data['error'])){ 
    // if the response has errors 
    throw new HttpException(self::ERROR_CODE, $data['error']['message']); 
} else if(isset($data['verified']) && $data['verified'] == true){ 

    // Your user is successfully authenticated, you can retrieve is personal information from $data 
    // What you get depend of your FB app permissions 

} else { 
    throw new HttpException(self::ERROR_CODE, self::ERROR_INVALID_FACEBOOK_USER_MESSAGE); 
} 

wget的UTIL這裏:

private function wget($url) 
{ 
    $options = array(
     CURLOPT_RETURNTRANSFER => true,  // return web page 
     CURLOPT_HEADER   => false, // don't return headers 
     CURLOPT_FOLLOWLOCATION => true,  // follow redirects 
     CURLOPT_ENCODING  => "",  // handle all encodings 
     CURLOPT_USERAGENT  => "spider", // who am i 
     CURLOPT_AUTOREFERER => true,  // set referer on redirect 
     CURLOPT_CONNECTTIMEOUT => 120,  // timeout on connect 
     CURLOPT_TIMEOUT  => 120,  // timeout on response 
     CURLOPT_MAXREDIRS  => 10,  // stop after 10 redirects 
     CURLOPT_SSL_VERIFYPEER => false  // Disabled SSL Cert checks 
    ); 

    $ch  = curl_init($url); 
    curl_setopt_array($ch, $options); 
    $content = curl_exec($ch); 
    $err  = curl_errno($ch); 
    $errmsg = curl_error($ch); 
    $header = curl_getinfo($ch); 
    curl_close($ch); 

    $header['errno'] = $err; 
    $header['errmsg'] = $errmsg; 
    $header['content'] = $content; 
    return $header; 
} 
+0

感謝@VBee,該代碼爲我節省了很多時間! :) – 2014-10-07 12:20:11