2010-11-24 6 views
3

J'ai une application Facebook iFrame. J'utilise les bibliothèques Facebook C# SDK, Facebook et Facebook.Web. Lorsqu'un utilisateur vient à mon application, je crée un objet FacebookApp sur page_load(). Si le app.Session est nul, je crée un CavasAuthorizer(app) puis appelez le Authorize().Problème d'autorisation Facebook C# SDK

Deux problèmes:

d'abord, l'URL de redirection qui est généré en appelant Authorize provoque Facebook à l'erreur avec un mauvais paramètre « suivant ». Dit que le paramètre "next" n'appartient pas à l'application. Il ressemble à ceci:

next=http://localhost:4002/facebookredirect.axd/mygame_dev/mygame.aspx 

Je peux modifier le code CanvasURLBuilder pour faire le look prochain comme ceci:

next=http://localhost:4002/mygame.aspx 

A ce stade, l'URL fonctionne si je couper et coller dans un navigateur mais il m'amène à mon deuxième numéro.

Lorsque le code s'exécute l'utilisateur est présenté avec une page la plupart du temps vide avec une image Facebook de taille moyenne et un lien "aller à Facebook". Lorsque l'utilisateur clique sur le lien, il amène l'utilisateur à la page d'autorisation correcte pour mon application.

J'ai le sentiment que ce sont deux problèmes possiblement liés mais potentiellement distincts.

Toute aide ici serait grandement appréciée.

-Andy

+0

Quelle est l'adresse de votre callback dans le fichier web.config? – SRM

+0

Je ne vois pas de "callbackUrl" dans ma configuration web. J'ai un tag "canvasSettings" avec une propriété "canvasPageUrl". Si c'est ce que vous voulez dire, c'est "http://apps.facebook.com/mygame_dev/", c'est la même chose que sur la page d'installation de Facebook. –

Répondre

-1

Je pense que votre url dans votre configuration Callback Web pointe vers localhost. Vous ne pouvez pas faire cela puisque le code fonctionne réellement à l'intérieur de Facebook IFrame. Localhost est localhost pour le serveur web facebook. Vous devrez donner une url valide dans la clé de rappel de votre web.config. Si vous ne possédez pas de domaine, vous pouvez mapper à votre ip, puis consultez l'un des clients dns dynamiques gratuits là-bas. No-ip est un examen (et un que j'utilise personnellement).

+0

localhost localhost est votre navigateur pour ne pas facebook. –

+0

Techniquement localhost pour le serveur, pas pour le navigateur. – SRM

2

Pour le premier problème

Assurez-vous que le site URL dans la page de configuration de l'application est définie sur http://apps.facebook.com/[your_app]/

alt text

Pour le deuxième problème.

Lorsque vous n'êtes pas autorisé, vous êtes redirigé vers l'url de connexion mais vous ne pouvez pas le faire depuis votre iframe car il redirigera l'iframe et vous obtiendrez un Facebook sur Facebook. Vous devez utiliser window.top.location = ... pour rediriger la fenêtre parente.

EDIT

Facebook C# SDK fait déjà pour vous lorsque vous utilisez la partie Mvc du SDK. Puisque vous utilisez des formulaires Web, vous devez utiliser ce code équivalent.

protected void Page_Load(object sender, EventArgs e) 
{ 
    var fb = new FacebookApp(); 
    var auth = new CanvasAuthorizer(fb); 

    if (!auth.IsAuthorized()) 
    { 
     var url = auth.GetLoginUrl(new HttpRequestWrapper(Request)); 

     var content = CanvasUrlBuilder.GetCanvasRedirectHtml(url); 
     Response.ContentType = "text/html"; 
     Response.Write(content); 
     Response.End(); 
     return; 
    } 

    //...Go on if authorized 
} 
+0

Ok, donc j'ai essayé le code ci-dessus et l'ai utilisé sur mon serveur orienté vers l'extérieur. J'ai ma configuration Facebook correctement définie, la seule bizarrerie est que mon serveur web écoute sur un port non-par défaut, 4000. –

+0

Lorsque j'exécute le code ci-dessus, Facebook donne une erreur, l'URI de rappel n'appartient pas à l'application. L'URI ressemble à http://www.mysite.com:4000/facebookredirect.axd/mygame_dev/mygame.aspx. Si je bidouille le CanvasUrlBuilder pour faire ressembler l'UIR à http://www.mysite.com:4000/mygame.aspx, la redirection fonctionne! Cependant, quand je l'autorise, alors j'envoie au jeu mais en dehors de l'iFrame .../soupir Vous pensez que le port non par défaut me cause des problèmes? –

+0

Ok, donc je viens de répondre à ma propre question. La redirection de port est le problème. J'ai mis mon site Web pour utiliser le port par défaut, puis supprimé la redirection du paramètre Facebook et cela a fonctionné. Cependant, après avoir autorisé l'application, la redirection de retour de Facebook charge mon jeu en dehors de l'iFrame normal de Facebook et il a l'air bien mal ... –

0

Pour tester localement faire que l'URL de votre site et URL Canvas facebook est quelque chose comme http://localhost:8181/yourpage. Assurez-vous ensuite dans VS que vous définissez le paramètre sous Propriétés du projet \ Web afin que les ports ne soient pas générés dynamiquement et que vous puissiez utiliser le port 8181 (ou le port de votre choix, tant qu'il est identique au FB).

Questions connexes