wake-up-neo.com

Facebook Graph API, wie kann ich E-Mails an Benutzer senden?

Ich verwende die Graph-API, kann jedoch nicht herausfinden, wie ich die E-Mail-Adresse eines angemeldeten Benutzers erhalten kann.

In der Einführung zu Graph heißt es: "Die Graph-API bietet Zugriff auf alle grundlegenden Kontoregistrierungsdaten, die Sie normalerweise in einem Anmeldeformular für Ihre Website anfordern, einschließlich Name, E-Mail-Adresse, Profilbild und Geburtstag.

Alles gut und gut, aber wie kann ich auf diese Informationen zugreifen?

Das habe ich bisher:

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

$first = $json['first_name']; // gets first name
$last = $json['last_name'];
76
kylex

Die einzige Möglichkeit, die E-Mail-Adresse des Benutzers zu erhalten, besteht darin, erweiterte Berechtigungen für das E-Mail-Feld anzufordern. Der Benutzer muss Ihnen erlauben, dies zu sehen, und Sie können keine E-Mail-Adressen der Freunde des Benutzers erhalten.

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

Sie können dies tun, wenn Sie Facebook Connect verwenden, indem Sie scope = email in der get-Zeichenfolge Ihres Anrufs an den Auth-Dialog übergeben.

Ich würde empfehlen, ein SDK anstelle von file_get_contents zu verwenden, da dies die Authentifizierung mit Oauth wesentlich einfacher macht.

69
Gazler
// 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']
);
51
masakielastic

Öffne base_facebook.php Füge Access_token bei der Funktion getLoginUrl() hinzu. 

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

und Nutzungsbereich für E-Mail-Erlaubnis

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

Um die Benutzer-E-Mail zu erhalten, müssen Sie den Benutzer mit seinem Facebook-Konto mit der Berechtigung email anmelden. Verwenden Sie dazu das Facebook PHP SDK ( siehe auf github ) wie folgt.

Prüfen Sie zunächst, ob der Benutzer bereits angemeldet ist:

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

Ist dies nicht der Fall, können Sie den Login-Link anzeigen lassen, in dem Sie nach der Berechtigung email gefragt werden:

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

Wenn er eingeloggt ist, befindet sich die E-Mail im $user_profile-Array.

Hoffentlich hilft das !

6
Quentin

Sie können die E-Mail-Adresse aus dem Profil des angemeldeten Benutzers abrufen. Hier ist das 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"]);
    }
?>
5
Yash Kumar

Die E-Mail im Profil kann mit erweiterter Berechtigung abgerufen werden, aber ich denke, es ist nicht möglich, die E-Mail zum Anmelden von fb zu erhalten. In meiner App wollte ich mehrere fb-Konten eines Benutzers in einer Liste anzeigen. Ich wollte die Login-E-Mails von fb-Konten als eindeutige Kennung der jeweiligen Konten anzeigen, konnte sie aber nicht von fb abrufen die primäre E-Mail im Benutzerprofil, aber in meinem Fall unterscheiden sich meine Login-E-Mail und meine primäre E-Mail.

1
Karthik Sekar

https://graph.facebook.com/me

sie erhalten Informationen über den aktuell angemeldeten Benutzer. Sie müssen jedoch ein Oauth-Token angeben. Sehen:

http://developers.facebook.com/docs/reference/api/user

1
Bobby Jack

Fügen Sie diese Codeblöcke bei Statusrückgabe hinzu und übergeben Sie ein Abfragezeichenfolgeobjekt {}. Für JavaScript-Entwickler

Nach dem Initialisieren Ihrer SDK.

schritt 1: // Anmeldestatus abrufen

$(document).ready(function($) {
    FB.getLoginStatus(function(response) {
        statusChangeCallback(response);
        console.log(response);
    });
  });

Dadurch wird das Laden des Dokuments überprüft und der Anmeldestatus überprüft, ob Benutzer angemeldet sind.

Dann wird die Funktion checkLoginState aufgerufen und die Antwort an statusChangeCallback übergeben.

function checkLoginState() {
    FB.getLoginStatus(function(response) {
      statusChangeCallback(response);
    });
  }

Schritt 2: Lassen Sie sich die Antwortdaten aus dem Status entnehmen 

function statusChangeCallback(response) {
    // body...
    if(response.status === 'connected'){
      // setElements(true);
      let userId = response.authResponse.userID;
      // console.log(userId);
      console.log('login');
      getUserInfo(userId);

    }else{
      // setElements(false);
      console.log('not logged in !');
    }
  }

Dies hat auch die userid , die auf variable gesetzt wird. Dann wird eine getUserInfo func aufgerufen, um Benutzerinformationen über die Graph-API abzurufen.

function getUserInfo(userId) {
    // body...
    FB.api(
      '/'+userId+'/?fields=id,name,email',
      'GET',
      {},
      function(response) {
        // Insert your code here
        // console.log(response);
        let email = response.email;
        loginViaEmail(email);
      }
    );
  }

Nach dem Übergeben der userid als Argument holt die Funktion dann alle Informationen zu dieser userid . Hinweis: In meinem Fall habe ich nach der E-Mail gesucht, da ich eine Funktion ausführen konnte, die den Benutzer nur per E-Mail protokolliert.

// Login per E-Mail

function loginViaEmail(email) {
    // body...
    let token = '{{ csrf_token() }}';

    let data = {
      _token:token,
      email:email
    }

    $.ajax({
      url: '/login/via/email',    
      type: 'POST',
      dataType: 'json',
      data: data,
      success: function(data){
        console.log(data);
        if(data.status == 'success'){
          window.location.href = '/dashboard';
        }

        if(data.status == 'info'){
          window.location.href = '/create-account'; 
        }
      },
      error: function(data){
        console.log('Error logging in via email !');
        // alert('Fail to send login request !');
      }
    });
  }
1
Delino

Stellen Sie sicher, dass Ihre Facebook-Anwendung veröffentlicht ist. Um Daten für E-Mail-Nachrichten zu erhalten, müssen Sie Ihre Anwendung öffentlich zugänglich machen. 

Sie können es später für Entwicklungszwecke deaktivieren und trotzdem ein E-Mail-Feld abrufen.

0
Didzis

Stellen Sie sicher, dass Sie die Versionsnummer der API wie "v2.11" und nicht "2.11" angeben.

Ich bin mir nicht sicher, was für einen Standardwert es ist, wenn dies falsch ist, aber ich habe einige seltsame Fehler beim Abrufen der E-Mail erhalten, wenn ich die Variable v verpasst habe.

0
Simon_Weaver

Die folgenden Tools können während der Entwicklung nützlich sein:

Access Token Debugger: Fügen Sie ein Zugriffstoken für Details ein

https://developers.facebook.com/tools/debug/accesstoken/

Graph API Explorer: Testen Sie Anforderungen an die Graph-API, nachdem Sie sie in Ihr Zugriffstoken eingefügt haben

https://developers.facebook.com/tools/Explorer

0
Simon_Weaver