2010-11-01 3 views
3

J'ai déjà une application FBML dans Facebook et je passe maintenant à une application IFrame dans FB, en utilisant l'API graphique. (sous le même nom, même compte de jeu. Il suffit de passer de FBML à iFrame).Comment obtenir l'adresse email de l'utilisateur sur Facebook (Facebook Connect ou Graph API)?

J'ai reçu une liste de personnes avec Permission Étendue acceptée pour les courriels. Depuis que je change en IFrame, je peux obtenir leur email ... par ce que l'API est dit.

Cependant, voici le problème.

1) Quand c'était en FBML, je n'ai pas leur email. Seulement avec leur permission d'email. (C'est ce que je bondis)

2) Je peux obtenir l'email de l'utilisateur lors de leur connexion et visiter ma demande

3) Cependant, je ne peux pas obtenir l'email quand ils ne visitent pas ma demande de l'utilisateur. Parce que certains d'entre eux ne reviendront peut-être pas mais je veux leur parler de la mise à jour.

4) J'ai essayé de lancer l'application en utilisant l'adresse e-mail que j'inscris pour l'application (c'est-à-dire le compte du développeur), mais je n'arrive toujours pas à récupérer leurs emails.

Il semble que l'application ne peut obtenir que l'utilisateur de connexion actuel. Je ne peux pas obtenir leur email même si je suis l'administrateur.

Y at-il un moyen de le faire?

Par exemple: Si un utilisateur 12345678 et aller à ma demande, je peux courir cela peut obtenir son email:

$fql = "select email from user where uid=12345678"; 

De toute évidence, cet utilisateur ne peut pas exécuter et obtenir des informations pour l'utilisateur 23456.

e.g. $fql = "select email from user where uid=23456"; <--- Fail 

Donc, voici le problème venir. J'ai des milliers de personnes qui se sont déjà inscrites et acceptent la permission prolongée, comment puis-je recevoir leurs courriels maintenant? Je ne peux pas courir ce ...

$fql = "select email from user where uid=1000001"; 
$fql = "select email from user where uid=1000002"; 
$fql = "select email from user where uid=1000003"; 
// assum 1000001 ... 1000003 are those users. 

J'ai essayé de vous connecter en utilisant mon compte facebook dev et le faire, mais encore il ne fonctionnera pas. Appréciez si quelqu'un a la solution. Merci.

+0

un coup d'oeil, j'ai informé les étapes, pour obtenir des informations utilisateur facebook connecter et en utilisant facebook php sdk http://stackoverflow.com/questions/2718722/how-i-can-get-utilisateur-email-et-nom-avec-facebook-connect-new-platform/10766525 # 10766525 – Rafee

Répondre

1

L'idée est d'obtenir le courrier électronique de l'utilisateur lorsqu'il se connecte, puis de le stocker dans votre propre base de données pour référence ultérieure.

+0

je sais. mais mon problème est de savoir comment obtenir tous les emails. – murvinlai

+0

Vous ne pouvez pas obtenir l'email d'un utilisateur qui n'a pas autorisé votre application ... c'est ce que vous entendez par "tous les emails"? Ou est votre question, comment puis-je obtenir l'email d'un utilisateur lorsque cet utilisateur autorise l'application? – Domenic

+0

Non. Veuillez lire attentivement mon courriel. J'ai obtenu les utilisateurs autorisés et ils ont également accepté l'autorisation étendue AVANT de passer à l'application IFrame. Donc, maintenant, je suis dans l'application iFrame, comment puis-je récupérer leur e-mail? – murvinlai

1
You can get user email address and details in Facebook (Facebook Connect or Graph API) 
<?php 

require '../src/facebook.php'; 

$facebook = new Facebook(array(
    'appId' => '344617158898614', 
    'secret' => '6dc8ac871858b34798bc2488200e503d', 
)); 

// See if there is a user from a cookie 
$user = $facebook->getUser(); 

if ($user) { 
    try { 
    // Proceed knowing you have a logged in user who's authenticated. 
    $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
     echo "FacebookApiException"; 
    echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>'; 
    $user = null; 
    } 
} 

?> 
<!DOCTYPE html> 
<html xmlns:fb="http://www.facebook.com/2008/fbml"> 
    <body> 
    <?php if ($user) { ?> 
     Your user profile is 
     <pre> 
     <?php print htmlspecialchars(print_r($user_profile, true)) ?> 
     </pre> 
    <?php } else { ?> 


     <div class="fb-login-button" data-scope="email,user_checkins"> 
     Login with Facebook 
     </div> 
    <?php } ?> 
    <div id="fb-root"></div> 
    <script> 
     window.fbAsyncInit = function() { 
     FB.init({ 
      appId: '<?php echo $facebook->getAppID() ?>', 
      cookie: true, 
      xfbml: true, 
      oauth: true 
     }); 
     FB.Event.subscribe('auth.login', function(response) { 
      window.location.reload(); 
     }); 
     FB.Event.subscribe('auth.logout', function(response) { 
      window.location.reload(); 
     }); 
     }; 
     (function() { 
     var e = document.createElement('script'); e.async = true; 
     e.src = document.location.protocol + 
      '//connect.facebook.net/en_US/all.js'; 
     document.getElementById('fb-root').appendChild(e); 
     }()); 
    </script> 
    </body> 
</html> 
0

Tout d'abord, assurez-vous que vous incluez e-mail dans le champ d'application des autorisations comme ceci:

https://www.facebook.com/dialog/oauth?client_id=595603433841467&redirect_uri=http://127.0.0.1:8000/faceb_login/&scope=email

Suivant récupérer le jeton OAuth comme documenté ailleurs. Ensuite, pour récupérer le courrier électronique d'une personne, vous pouvez effectuer la demande suivante:

https://graph.facebook.com/1162321772?fields=email&access_token=XXXXXXXXXXXXXXXXXXXXXX ...

La documentation de l'API graphique est ici:

https://developers.facebook.com/docs/graph-api/using-graph-api