2010-10-17 2 views
2

J'utilise le Facebook PHP SDK (2.1.2). Tout ce que je veux faire est ce que presque chaque application Facebook avec req_perms a. La stupide boîte de "demande d'autorisations" apparaît lorsque vous l'installez.Comment obtenir mon application Facebook pour demander automatiquement les autorisations requises après l'installation

Je ne veux pas de bouton que l'utilisateur doit pousser. Je ne veux pas qu'une fenêtre apparaisse. Je ne veux pas utiliser FBML, since they're doing away with it.

Ceci est la boîte de dialogue standard des autorisations Facebook qui indique où mon application doit apparaître dans le cadre iframe.

J'ai essayé: (! pas ce que je veux)

<?php if(!$me): ?> 
    <head> 
     <meta HTTP-EQUIV="REFRESH" content="0; <?php echo $loginUrl; ?>"> 
    </head> 
<?php die(); ?> 
<?php endif; ?> 

Ce, pour une raison quelconque, a montré un logo Facebook lié à l'URL correcte que je voulais

<?php if($me): ?> 
    window.fbAsyncInit = function() { 
     FB.init({ 
      appId : '<?php echo $appid; ?>', 
      session : <?php echo isset($session) ? "'".json_encode($session)."'" : 'null'; ?>, // don't refetch the session when PHP already has it 
      status : true, // check login status 
      cookie : true, // enable cookies to allow the server to access the session 
      xfbml : true // parse XFBML 
     }); 

     // Whenever the user logs in, we refresh the page 
     FB.Event.subscribe('auth.login', function() { 
      window.location.reload(); 
     }); 
    }; 

    (function() { 
     var e = document.createElement('script'); 
     e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
     e.async = true; 
     document.getElementById('fb-root').appendChild(e); 
    }()); 
</script> 
<fb:redirect url="<?php echo $loginUrl; ?>" /> 
<?php die("</html>"); ?> 

Celui-ci a montré une page blanche.

<?php if($me): ?> 
    window.fbAsyncInit = function() { 
     FB.init({ 
      appId : '<?php echo $appid; ?>', 
      session : <?php echo isset($session) ? "'".json_encode($session)."'" : 'null'; ?>, // don't refetch the session when PHP already has it 
      status : true, // check login status 
      cookie : true, // enable cookies to allow the server to access the session 
      xfbml : true // parse XFBML 
     }); 

     // Whenever the user logs in, we refresh the page. 
     FB.Event.subscribe('auth.login', function() { 
      window.location.reload(); 
     }); 
    }; 

    (function() { 
     var e = document.createElement('script'); 
     e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
     e.async = true; 
     document.getElementById('fb-root').appendChild(e); 
    }()); 
</script> 
<script> 
    FB.login(function(response) { 
     if (response.session) { 
      if (response.perms.indexOf('publish_stream') != -1) { 
       //User has logged in and given us publish_stream permissions 
      ); 
      else { 
       //User has logged in but not given us publish_stream 
      } 
     } 
     else { 
      //User is not logged in 
    }, {perms:'offline_access,publish_stream'}); 
</script> 

Celui-ci montre également une page blanche. Ce que je veux n'est pas impopulaire, mais la documentation Facebook est la pire que j'ai jamais vue. Rien ne fonctionne. Quelque chose d'aussi simple que cela ne devrait pas prendre deux jours pour comprendre.

Voici la solution que je fini avec:

<div id="fb-root"></div> 
<script> 
    window.fbAsyncInit = function() { 
     FB.init({ 
      appId : '<?php echo $appid; ?>', 
      session : <?php echo isset($session) ? "'".json_encode($session)."'" : 'null'; ?>, // don't refetch the session when PHP already has it 
      status : true, // check login status 
      cookie : true, // enable cookies to allow the server to access the session 
      xfbml : true  // parse XFBML 
     }); 

     FB.getLoginStatus(function(response) { 
      if (response.session) { 
       // Logged in and connected user, someone you know. 
      } else { 
       // No user session available, redirect them to login. 
       window.top.location = "<?php echo $loginUrl; ?>"; 
      } 
     }); 

     // Whenever the user logs in, we refresh the page. 
     FB.Event.subscribe('auth.login', function() { 
      window.location.reload(); 
     }); 
    }; 

    (function() { 
     var e = document.createElement('script'); 
     e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
     e.async = true; 
     document.getElementById('fb-root').appendChild(e); 
    }()); 
</script> 

Répondre

0

Fondamentalement, vous utilisez le SDK PHP pour obtenir l'URL de connexion, puis effectuez une redirection JavaScript à cette URL. L'exemple http://github.com/facebook/php-sdk/blob/master/examples/example.php fait tout pour vous sauf pour la redirection. Dans l'exemple, ils ont un lien sur lequel vous cliquez pour vous connecter. Si vous voulez que ce soit automatique, procédez comme suit.

<script> 
    FB.getLoginStatus(function(response) { 
     if (response.session) { 
      // Logged in and connected user, someone you know. 
     } 
     else { 
      // No user session available, redirect them to login. 
      window.top.location = <?php echo $loginUrl; ?> 
     } 
    }); 
</script> 
+0

Je reçois cette erreur javascript console pyromanes: étiquette invalide http://mywesite.com/facebook/plaque/?fb_sig_in_iframe=1&fb_sig_base_domain=mywebsite.com&fb_sig_locale=en_US&fb_sig_in_new_facebook=1&fb_sig_time=1287603452.3819&fb_sig_added=0&fb_sig_country=us&fb_sig_api_key = cdb7efae5da476f5da16f911d4dd47ee & fb_sig_app_id = 138890676153908 & fb_sig = c70e97233c693f13d9e18be66ab8517d Ligne 209 – user446699

+0

Génial, je l'ai eu le travail Le code final est maintenant dans ma question – user446699

Questions connexes