SL4 Facebook应用程序不再检索access_token

时间:2011-06-09 00:26:28

标签: facebook-c#-sdk

我有一个SL4 Out of Browser应用程序已经工作了几个月。截至目前,它似乎不会再从Facebook检索access_token。我正在使用facebook-c#-sdk v4.1.1。部分代码发布在下面:

    void FacebookLoginBrowser_Loaded(object sender, RoutedEventArgs e)
    {
        if (!loggedIn)
        {
            LoginToFacebook();
        }
    }

    private void LoginToFacebook()
    {

        dynamic parms = new System.Dynamic.ExpandoObject();
        parms.display = "popup";
        parms.client_id = appId;
        parms.redirect_uri = successUrl;
        parms.cancel_url = failedUrl;
        parms.scope = requestedFbPermissions;
        parms.type = "user_agent";

        loggingInUri = fbApp.GetLoginUrl(parms);

        FacebookLoginBrowser.Source = (loggingInUri);

    }

以下是浏览器重定向到的html页面的代码:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    Complete
</body>
<script type="text/javascript">
    window.external.notify(window.location.href);
</script>
</html>

然后javascript触发以下内容:

    private void FacebookLoginBrowser_ScriptNotify(object sender, NotifyEventArgs e)
    {

        if (e.Value != "Failed")
        {
            string url = e.Value.Replace('#', '?');

            url = HttpUtility.UrlDecode(url);

            Uri ur = new Uri(url);

            string[] str = ur.Query.Split('&');
            access_token =  str[0].Split('=')[1];

            if(!String.IsNullOrEmpty(access_token)){
                fbApp = new FacebookApp(access_token);

                App app = (App)Application.Current;
                app.Fuid.fbApp = fbApp;

                loggedIn = true;
                loginSucceeded(e);
            }

        }

        if (fbApp.Session == null)
        {

            failedLogin();
        }
    }

通常包含access_token值的查询字符串不再存在。使用Fiddler,我能够看到来自facebook的重定向,其中包含access_token值。我不知道它在哪里丢失了。如果有人需要任何其他信息,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:0)

关于查询字符串结构的Facebook行为发生了变化。这在http://facebooksdk.codeplex.com/discussions/261528中讨论。我的代码使用WPF而不是Silverlight;我不确定相同的问题是否适用于Silverlight控件。

请注意,当前版本的Facebook C#SDK每个http://facebooksdk.codeplex.com/为5.0.40。

另见Does Facebook Client-Side Flow still give out access tokens?