Facebook Graph API - 不推荐使用offline_access

时间:2012-12-19 17:44:53

标签: c# facebook-graph-api

我对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_acess”...但它确实没有!

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

2 个答案:

答案 0 :(得分: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;                
                    }                   
                }
            }
        }
    }
}

答案 1 :(得分: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个月。)