2011-06-09 3 views
0

J'ai une application SL4 Out of Browser qui fonctionne depuis plusieurs mois. En ce moment, il semble qu'il ne récupérera plus un access_token de Facebook. J'utilise facebook-C# -sdk v4.1.1. Une partie du code partiel est affiché ci-dessous:L'application Facebook SL4 ne récupère plus access_token

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); 

    } 

est Ci-dessous le code de la page HTML du navigateur est redirigé vers:

<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> 

Le javascript tire alors le suivant:

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(); 
     } 
    } 

Il apparaît la chaîne de requête qui contient normalement la valeur access_token n'est plus là. En utilisant Fiddler, j'ai pu voir la redirection de facebook qui contient la valeur access_token. Je ne suis pas sûr d'où il est perdu à. Faites-moi savoir si quelqu'un a besoin d'informations supplémentaires. Merci!

Répondre

0

Il y a eu un changement dans le comportement de Facebook concernant la structure de la chaîne de requête. Ceci est discuté dans http://facebooksdk.codeplex.com/discussions/261528. Mon code utilise WPF et non Silverlight; Je ne suis pas sûr si le même problème s'applique au contrôle Silverlight.

Notez que la version actuelle de Facebook C# SDK est 5.0.40 par http://facebooksdk.codeplex.com/.

Voir aussi Does Facebook Client-Side Flow still give out access tokens?.

Questions connexes