2012-12-19 134 views
2

我對Facebook Graph API有點困惑。Facebook Graph API - offline_access已棄用

首先,我創建了開發者頁面上的應用程序,然後我autorized我的應用程序像這樣的URL:

www.facebook.com/dialog/oauth?client_id=MY_CLIENT_ID&redirect_uri=http://www.facebook.com/connect/login_success.html&type=user_agent 

好吧......在此之後,頁面返回的URL像這樣的:

www.facebook.com/connect/login_success.html#access_token=ACCESS_TOKEN&expires_in=5171411&code=CODE 

我意識到返回的ACCESS_TOKEN總是相同的。所以我用來搜索用戶,像這樣:

graph.facebook.com/search?q=QUERY_SEARCH&type=user&access_token=ACCESS_TOKEN 

我相信上面的所有網址都是正確的。

我的疑問是:我不知道如何使用長壽命標記(實際上我甚至不知道如果返回的標記是長壽命的標記)。當我使用這些URL時總會返回相同的標記,所以我總是使用相同的ACCESS_TOKEN。

但是當我在Facebook Graph頁面上閱讀時,令牌不能永遠活動了......它們現在過期了。

我怎麼知道我是否有長壽標記?當令牌過期時,我該如何「刷新」它?

我試圖跟隨文檔,但我真的完全失去了...

developers.facebook.com/roadmap/offline-access-removal/ 

此頁說,存在的高級設置菜單中的「棄用offline_acess」 ...但它好好嘗試一下!

所以......我不知道如何當他們到期或如何,如果我真的使用知道管理令牌的長期令牌

+1

Facebook的Graph API文檔有時很混亂 –

回答

1

當你的訪問令牌是要去Access Token Debugger過期您可以檢查。

在需要輸入短期訪問令牌的情況下,您可以通過使用此api來獲得長期存取令牌。

https://graph.facebook.com/oauth/access_token?    
    client_id=APP_ID& 
    client_secret=APP_SECRET& 
    grant_type=fb_exchange_token& 
    fb_exchange_token=EXISTING_ACCESS_TOKEN 

這將返回新的長期存取令牌。 (這將有2個月的有效期。)

+0

謝謝Ayush,這個是非常有用的......我會嘗試在我的代碼中使用!再次感謝! – Crasher

2

我覺得一般的想法是,你的訪問令牌將持續一個月左右,當它停止工作時,你需要申請一個新的。

我有一個這樣的方法來獲取一個新的:

public static class GraphApiRequestProcessor 
{ 
    public static string GetNewAccessToken(CancellationToken cancellationToken) 
    { 
     const string tokenUrlPattern = @"https://graph.facebook.com/oauth/access_token?client_id={0}&client_secret={1}&grant_type=client_credentials"; 
     string tokenUrl = string.Format(tokenUrlPattern, Settings.FacebookAppId, Settings.FacebookAppSecret); 

     using(var client = new WebClient()) 
     { 
      // allows cancellation while executing request 
      using(cancellationToken.Register(client.CancelAsync)) 
      { 
       using(var data = client.OpenRead(tokenUrl)) 
       { 
        using(var reader = new StreamReader(data)) 
        { 
         string response = reader.ReadToEnd(); 
         int index = response.IndexOf("=", StringComparison.InvariantCultureIgnoreCase); 
         string code = response.Substring(index + 1); 
         return code;     
        }     
       } 
      } 
     } 
    } 
} 
+0

+1。注意:即使是原始的「離線訪問」令牌也會過期(大概一年我認爲),現在它只是縮短到期時間。 –

+0

阿列克謝,感謝您的回答......但實際上,一年前我使用offline_access時,我的代幣沒有到期...我有一個直到現在,永不過期oO ...我不知道爲什麼。 ..但我正在使用它! =) – Crasher