2010-01-16 6 views
2

J'ai une application facebook qui peut être ajoutée aux pages fan sous forme d'onglet. L'application nécessite que les utilisateurs soient authentifiés pour pouvoir l'utiliser. Cela peut être accompli en utilisant requirelogin = 1 dans un lien qui est visible uniquement pour les utilisateurs qui n'ont pas ajouté l'application. Cette partie fonctionne bien.Onglet Application Facebook URL

Cependant, une fois que l'utilisateur a donné l'autorisation de l'application à partir de la fenêtre pop-up dhtml que l'élément requireelogin s'ouvre, je veux que l'onglet se recharge. Pour ce faire, je dois l'URL complète à inclure dans le lien comme suit:

<a href="http://www.facebook.com/pages/PAGE_NAME/PAGE_ID?v=app_APP_ID" requirelogin=1>Authorize</a> 

Je ne peux pas comprendre comment obtenir l'URL complète ou, au moins, le NOM_PAGE pour construire cette URL dynamique. On dirait que l'application devrait être capable de savoir où elle se trouve sans aucune autorisation spéciale.

Répondre

2

Si vous avez la PAGE et l'ID APP, c'est ce que vous faites:

http://www.facebook.com/profile.php?id=PAGE_ID#v=app_APP_ID 

Par exemple:

http://www.facebook.com/profile.php?id=282955631557#v=app_278523304881 
+0

... oui mais cela nécessite d'avoir l'identifiant de la page (codé en dur) à l'avance ... ce n'est pas une solution dynamique. – Paul

3

Lorsque votre Tab est chargé, l'API vous passe un Signed Request qui contient, entre autres, un tableau page contenant id, liked & admin. Vous pouvez utiliser cela pour tirer dynamiquement l'identifiant de la page qui appelle actuellement votre code.

+0

page_id ** N'EST PAS ** un ID de tabulation, donc vous ne pouvez recharger que le flux de page, et il ne se rechargera pas si vous changez d'adresse pendant le processus; – meeDamian

+0

Jetez un oeil au format d'URL fourni par Tytus - l'application id est statique et l'identificateur de page peut être extrait de la requête signed. Juste corriger la faute de frappe dans son lien (& au lieu de #). c'est-à-dire http://www.facebook.com/profile.php?id=PAGE_ID&v=app_APP_ID – 1in9ui5t

0

Dans le nouveau schéma, le # ne fonctionne pas longtemps. Il faut utiliser

http://www.facebook.com/profile.php?id=PAGE_ID#v=app_APP_ID 

Pour effectuer les paramètres à l'application, il doit être dans un paramètre appelé « App_Data »

http://www.facebook.com/profile.php?id=PAGE_ID#v=app_APP_ID&app_data="..." 

Pour transporter plusieurs paramètres, la meilleure stratégie consiste à encoder App_Data dans Json .

0

Toutes les réponses ci-dessus ne fonctionneront pas (vous rediriger uniquement vers le flux de page) ou sont maintenant obsolètes. La meilleure solution est d'utiliser JS:

// called when like button, box, etc is rendered 
FB.Event.subscribe("xfbml.render", function() { 

    // assigns click to that thing 
    FB.Event.subscribe("edge.create", function(response) { 

     window.location.reload(); // reload frame only 

    }); 
}); 

Vous devrez également charger et init JS SDK. Si vous ne savez pas comment le faire, utilisez ceci:

<script> 
    document.onload = function(){ 

     (function(d){ 
      var js,id='facebook-jssdk'; 
      if(d.getElementById(id)){return;} 
      js=d.createElement('script'); 
      js.id=id;js.async=true;js.src="//connect.facebook.net/pl_PL/all.js"; 
      d.getElementsByTagName('head')[0].appendChild(js); 
     }(document)); 

     window.fbAsyncInit = function(){ 
      FB.init({ 
       appId : <PASTE_YOUR_APP_ID_HERE>, 
       status : true, // check login status 
       cookie : true, // enable cookies to allow the server to access the session 
       xfbml : true // parse XFBML 
      }); 
      FB.Event.subscribe("xfbml.render", function() { 
       FB.Event.subscribe("edge.create", function(response) { 
        window.location.reload(); 
       }); 
      }); 
     } 
    } 
</script>