2010-08-31 2 views
73

J'utilise l'API Graph, mais je n'arrive pas à comprendre comment obtenir une adresse e-mail d'utilisateur connecté. L'intro de Graph indique "L'API Graph peut fournir l'accès à toutes les données de base d'enregistrement de compte que vous demanderiez généralement dans un formulaire d'inscription pour votre site, y compris le nom, l'adresse email, l'image de profil et l'anniversaire"Facebook Graph API, comment obtenir des utilisateurs email?

Tout va bien, mais comment puis-je accéder à cette information?

C'est ce que j'ai jusqu'à présent:

$json = $facebook->api('/me'); 

$first = $json['first_name']; // gets first name 
$last = $json['last_name']; 
+3

Que fait 'var_dump ($ obj);' output? – Jayrox

Répondre

65

La seule façon d'obtenir l'adresse e-mail des utilisateurs est de demander des autorisations étendues sur le champ email. L'utilisateur doit vous permettre de voir ceci et vous ne pouvez pas obtenir les adresses e-mail des amis de l'utilisateur.

http://developers.facebook.com/docs/authentication/permissions

Vous pouvez le faire si vous utilisez Facebook par email = champ passage dans la chaîne get de votre appel à la boîte de dialogue Auth.

Je recommande d'utiliser un SDK au lieu de file_get_contents, car il est beaucoup plus facile d'effectuer l'authentification Oauth.

+0

D'accord, a changé file_get_contents. Mais je suis un peu confus quant à l'endroit où je passerais le req_perms = email. – kylex

+10

Nevermind, je l'ai compris: $ facebook-> getLoginUrl (array ('req_perms' => 'email')) – kylex

+12

Ce n'était pas complètement évident pour moi basé sur cette réponse ... si vous utilisez le API JavaScript, vous voulez utiliser 'FB.api ('/ moi? Scope = email', fonction (apiResponse) {...});' –

6

Pour obtenir le courrier électronique de l'utilisateur, vous devez vous connecter à l'utilisateur avec son compte Facebook en utilisant la permission email. Utilisez pour cela le Facebook SDK PHP (see on github) comme suit.

Vérifiez d'abord si l'utilisateur est déjà connecté:

require "facebook.php"; 
$facebook = new Facebook(array(
    'appId' => YOUR_APP_ID, 
    'secret' => YOUR_APP_SECRET, 
)); 

$user = $facebook->getUser(); 
if ($user) { 
    try { 
     $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
     $user = null; 
    } 
} 

S'il le pas, vous pouvez afficher le lien de connexion demandant la permission email:

if (!$user) { 
    $args = array('scope' => 'email'); 
    echo '<a href="' . $facebook->getLoginUrl() . '">Login with Facebook</a>'; 
} else { 
    echo '<a href="' . $facebook->getLogoutUrl() . '">Logout</a>'; 
} 

Quand il est connecté l'email peut être trouvé dans le tableau $user_profile.

Espérons que ça aide!

19

base_facebook.php Ouvrir Ajouter access_token à la fonction getLoginUrl()

array_merge(array(
        'access_token' => $this->getAccessToken(), 
        'client_id' => $this->getAppId(), 
        'redirect_uri' => $currentUrl, // possibly overwritten 
        'state' => $this->state), 
      $params); 

et utiliser la portée de permission par courriel

if ($user) { 
    echo $logoutUrl = $facebook->getLogoutUrl(); 
} else { 
    echo $loginUrl = $facebook->getLoginUrl(array('scope' => 'email,read_stream')); 
} 
+0

+1 merci ..j'oublie de donner l'email dans la portée ... –

5

Vous pouvez récupérer l'adresse e-mail de l'utilisateur connecté dans le profil de l'utilisateur. Voici le code snippet

<?php 

    $facebook = new Facebook(array(
     'appId' => $initMe["appId"], 
     'secret' => $initMe["appSecret"], 
    )); 

    $facebook->setAccessToken($initMe["accessToken"]); 
    $user = $facebook->getUser(); 

    if ($user) { 
     $user_profile = $facebook->api('/me'); 
     print_r($user_profile["email"]); 
    } 
?> 
+4

Cela ne fonctionne pas pour moi. '$ user_profile' ne contient pas d'email –

1

L'e-mail dans le profil peut être obtenu en utilisant l'autorisation prolongée mais je suppose que ce n'est pas possible d'obtenir l'e-mail utilisé pour se connecter fb.Dans mon application, je voulais afficher plusieurs comptes fb d'un utilisateur dans une liste, je voulais montrer les e-mails de connexion des comptes fb comme un identifiant unique des comptes respectifs, mais je ne pouvais pas le retirer de fb, tout ce que je devais l'email principal dans le profil d'utilisateur mais dans mon cas mon email de connexion et mon email principal sont différents.

46
// Facebook SDK v5 for PHP 
// https://developers.facebook.com/docs/php/gettingstarted/5.0.0 

$fb = new Facebook\Facebook([ 
    'app_id' => '{app-id}', 
    'app_secret' => '{app-secret}', 
    'default_graph_version' => 'v2.4', 
]); 

$fb->setDefaultAccessToken($_SESSION['facebook_access_token']); 
$response = $fb->get('/me?locale=en_US&fields=name,email'); 
$userNode = $response->getGraphUser(); 
var_dump(
    $userNode->getField('email'), $userNode['email'] 
); 
+2

Y a-t-il quelque part une page de référence décrivant la route'/me'? Je continue à parcourir les pages sur [Graph API] (https://developers.facebook.com/docs/graph-api/reference) et ne peux pas le trouver n'importe où :( –

+2

/moi? Locale = en_US & fields = nom, email était la seule façon que je pourrais comprendre pour l'obtenir pour retourner l'adresse e-mail, n'a pas pu trouver toute autre référence à ce en ligne – Ashley

+0

voici docs - https://developers.facebook.com/docs/graph-api/reference/user/@RaduMurzea – arku

0

Assurez-vous que votre application Facebook est publiée. Afin de recevoir des données pour email, public_profile et user_friends, votre application doit être mise à la disposition du public.

Vous pouvez le désactiver plus tard à des fins de développement et toujours recevoir le champ de courrier électronique.

0

Assurez-vous de spécifier pleinement le numéro de version de l'API comme quelque chose comme "v2.11" et non "2.11"

Je ne suis pas sûr de ce que la valeur par défaut si cela est incorrect, mais j'ai quelques erreurs étranges essayer de récupérer l'e-mail lorsque j'ai raté le v.

Questions connexes