2012-12-19 99 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