2010-08-31 21 views
73

Używam Graph API, ale nie wiem, jak uzyskać adres e-mail zalogowanego użytkownika.Interfejs API Facebooka Graph, jak uzyskać pocztę e-mail użytkowników?

Wprowadzenie do wykresu stwierdza: "Interfejs API wykresów może zapewniać dostęp do wszystkich podstawowych danych rejestracyjnych konta, których zwykle potrzebujesz w formularzu rejestracyjnym swojej witryny, w tym imienia i nazwiska, adresu e-mail, zdjęcia profilowego i daty urodzin"

Wszystko dobrze i dobrze, ale jak uzyskać dostęp do tych informacji?

To, co mam tak daleko:

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

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

Co to jest wyjście 'var_dump ($ obj);'? – Jayrox

Odpowiedz

65

Jedynym sposobem, aby uzyskać adres e-mail użytkowników jest do żądania rozszerzone uprawnienia w zakresie poczty elektronicznej. Użytkownik musi pozwolić ci to zobaczyć i nie możesz uzyskać adresów e-mail znajomych użytkownika.

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

Można to zrobić, jeśli używasz Facebook connect przekazując zakres = email w ciągu wysiąść rozmowy do okna Auth.

Polecam używanie SDK zamiast file_get_contents, ponieważ znacznie ułatwia to uwierzytelnianie Oauth.

+0

OK, zmieniono file_get_contents. Ale jestem trochę zdezorientowany co do tego, gdzie mógłbym przekazać req_perms = email. – kylex

+10

Nieważne, odkryłem: $ facebook-> getLoginUrl (array ('req_perms' => 'email')) – kylex

+12

Nie było dla mnie całkowicie oczywiste w oparciu o tę odpowiedź ... jeśli używasz JavaScript API, chcesz użyć 'FB.api ('/ me? Scope = email', function (apiResponse) {...});' –

6

Aby uzyskać adres e-mail użytkownika, należy zalogować użytkownika za pomocą jego konta Facebook, korzystając z uprawnienia email. Użyj do tego zestawu PHP PHP Facebook (see on github) w następujący sposób.

Najpierw należy sprawdzić, czy użytkownik jest już zalogowany:

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; 
    } 
} 

Gdyby nie jego, można wyświetlić link do logowania z prośbą o pozwolenie email:

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

Kiedy jest zalogowany wiadomość e-mail można znaleźć w tablicy $user_profile.

Nadzieję, że pomaga!

19

Otwarte base_facebook.php Dodaj access_token w funkcji getLoginUrl()

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

i za pomocą zakresu mail Permission

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

+1 dzięki ..i zapomnij dać email w zakresie ... –

5

można pobrać z adresu e-mail zalogowanego w profilu użytkownika. Oto kod 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

To nie działa dla mnie. '$ user_profile' nie zawiera wiadomości e-mail –

1

wiadomości e-mail w profilu można uzyskać za pomocą rozszerzonego pozwolenia, ale myślę, że nie jest możliwe, aby uzyskać e-mail używany do logowania FB.W mojej aplikacji chciałem wyświetlić wiele kont fb użytkownika na liście, chciałem pokazać e-maile logowania na kontach fb jako unikalny identyfikator odpowiednich kont, ale nie mogłem go usunąć z fb, wszystko co miałem było podstawowy adres e-mail w profilu użytkownika, ale w moim przypadku adres e-mail logowania i główny adres e-mail są różne.

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

Czy istnieje strona odniesienia opisująca trasę'/me'? Wciąż przeglądam strony w [Graph API] (https://developers.facebook.com/docs/graph-api/reference) i nie mogę ich nigdzie znaleźć :( –

+2

/me? Locale = en_US & fields = name, email was jedyny sposób, w jaki mogłem wymyślić, aby go zwrócić adres e-mail, nie mógł znaleźć innego odniesienia do tego online – Ashley

+0

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

0

Upewnij się, że opublikowano Twoją aplikację na Facebooku. Aby otrzymać dane do wiadomości e-mail, public_profile i user_friends, Twoja aplikacja musi zostać udostępniona publicznie.

Możesz wyłączyć to później w celach programistycznych i nadal otrzymywać pole e-mail.

0

Upewnij się, aby w pełni określić numer wersji API jako coś podobnego "v2.11" i nie "2.11"

Nie jestem pewien, co to domyślnie jeśli nie jest to poprawne, ale mam jakieś dziwne błędy próbuję po prostu pobrać wiadomość e-mail, gdy przegapiłem numer v.

Powiązane problemy