2011-05-25 50 views
9

與我用這個登錄有人offline_access老(2.X)SDK:如何使用新的Facebook PHP SDK 3.0.0使用OFFLINE_ACCESS登錄?

$session = array 
(
    'uid' => $userdata['fb_uid'], 
    'sig' => $userdata['fb_sig'], 
    'access_token' => $userdata['fb_access_token'] 
); 

$facebook->setSession($session); 

在新的SDK此功能犯規存在了。我想我需要使用登錄:

setPersistentData($鍵,$值)

不過這個功能受到保護,我不知道什麼是「代碼」是什麼?我是否需要這個來登錄用戶? 'sig'怎麼回事?我不需要這個了嗎?

希望有人已經知道這一點,因爲文檔真的沒有幫助!

+0

mhhh ...似乎你只需要使用$ facebook-> setAccessToken()來設置access_token,就是這樣... – Martin 2011-05-25 11:46:37

回答

21

使用Facebook PHP SDK v3(see on github),它非常簡單。要記錄具有offline_access權限的用戶,請在生成登錄URL時提問。這是你如何做到的。

下載離線訪問令牌

首先,你檢查,如果用戶登錄或不:

require "facebook.php"; 
$facebook = new Facebook(array(
    'appId' => YOUR_APP_ID, 
    'secret' => YOUR_APP_SECRET, 
)); 

$user = $facebook->getUser(); 

if ($user) { 
    try { 
    $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    // The access token we have is not valid 
    $user = null; 
    } 
} 

如果他不是,你產生了「使用Facebook登入」 URL請求的offline_access許可:

if (!$user) { 
    $args['scope'] = 'offline_access'; 
    $loginUrl = $facebook->getLoginUrl($args); 
} 

,然後顯示在你的模板的鏈接:

<?php if (!$user): ?> 
    <a href="<?php echo $loginUrl ?>">Login with Facebook</a> 
<?php endif ?> 

然後,您可以檢索脫機訪問令牌並將其存儲。爲了得到它,請致電:

$facebook->getAccessToken() 

使用離線訪問令牌

要使用離線訪問令牌時未登錄的用戶:

require "facebook.php"; 
$facebook = new Facebook(array(
    'appId' => YOUR_APP_ID, 
    'secret' => YOUR_APP_SECRET, 
)); 

$facebook->setAccessToken("..."); 

現在你可以進行API調用對於此用戶:

$user_profile = $facebook->api('/me'); 

希望有所幫助!

+0

這很有用,謝謝,但是PHP代碼記錄在代碼以外的地方嗎? – Brenden 2011-06-17 22:26:53

+0

[Facebook開發者文檔](https://developers.facebook.com/docs/)中沒有關於PHP SDK的文檔。您可以閱讀代碼,閱讀SDK提供的示例並在Internet上查找其他示例。你需要其他具體的東西嗎? – Quentin 2011-06-17 23:20:01

+0

如何在不手動登錄的情況下生成'offline_access'令牌? – Andrew 2012-02-19 01:45:00

0

隨着PHP SDK 2.0(我猜),我只是用它像

$data = $facebook->api('/me', 'GET', array('access_token' => $userdata['fb_access_token'])); 

這應與較新的一個工作,因爲它似乎是更清潔的方式不是由我們自己而建立的會話。你能試一下嗎?

0

昆汀的答案相當不錯,但不完整,我想。它工作的很好,但我例如getUser()在那時不工作,因爲userId(這是getUser()返回)被緩存。

我已經創建了一個新方法來清除所有緩存並持久保存。

public function setPersistentAccessToken($access_token) { 
    $this->setAccessToken($access_token); 
    $this->user = $this->getUserFromAccessToken(); 
    $this->setPersistentData('user_id', $this->user); 
    $this->setPersistentData('access_token', $access_token); 
    return $this; 
} 
相關問題