2

我对 Facebook Graph API 有点困惑。

首先,我在开发者页面上创建了一个应用程序,然后我使用如下 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_access”......但事实并非如此!

所以......我不知道如何在令牌过期时管理令牌,也不知道如何知道我是否正在使用长期令牌

4

2 回答 2

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;                
                    }                   
                }
            }
        }
    }
}
于 2012-12-19T18:51:58.920 回答
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 个月。)

于 2012-12-19T22:29:58.067 回答