API grafico di Facebook, come ricevere email degli utenti?
-
26-09-2019 - |
Domanda
Sto usando l'API grafico, ma non riesco a capire come ottenere un indirizzo e-mail degli utenti accessibile.
L'introduzione al grafico afferma "L'API grafica può fornire l'accesso a tutti i dati di registrazione dell'account di base che in genere richiederesti in un modulo di iscrizione per il tuo sito, inclusi nome, indirizzo e-mail, immagine del profilo e compleanno"
Tutto bene, ma come accedo a queste informazioni?
Questo è quello che ho finora:
$json = $facebook->api('/me');
$first = $json['first_name']; // gets first name
$last = $json['last_name'];
Soluzione
L'unico modo per ottenere l'indirizzo e-mail degli utenti è richiedere autorizzazioni estese sul campo e-mail. L'utente deve permetterti di vedere questo e non è possibile ottenere gli indirizzi e-mail degli amici dell'utente.
http://developers.facebook.com/docs/authentication/permissions
Puoi farlo se stai utilizzando Facebook Connect passando Email = Email nella stringa di Get della tua chiamata alla finestra di dialogo Auth.
Consiglierei di usare un SDK invece di file_get_contents in quanto rende molto più facile eseguire il Oauth autenticazione.
Altri suggerimenti
// 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']
);
Open Base_Facebook.php Aggiungi accesso_token alla funzione getLoginUrl()
array_merge(array(
'access_token' => $this->getAccessToken(),
'client_id' => $this->getAppId(),
'redirect_uri' => $currentUrl, // possibly overwritten
'state' => $this->state),
$params);
e utilizzare l'ambito per l'autorizzazione e -mail
if ($user) {
echo $logoutUrl = $facebook->getLogoutUrl();
} else {
echo $loginUrl = $facebook->getLoginUrl(array('scope' => 'email,read_stream'));
}
Per ricevere l'e -mail dell'utente, devi accedere all'utente con il suo account Facebook utilizzando il email
autorizzazione. Utilizza per questo Facebook PHP SDK (Vedi su GitHub) come segue.
Prima controlla se l'utente è già effettuato l'accesso:
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;
}
}
Se lui non è, puoi visualizzare il link di accesso che chiede il email
autorizzazione :
if (!$user) {
$args = array('scope' => 'email');
echo '<a href="' . $facebook->getLoginUrl() . '">Login with Facebook</a>';
} else {
echo '<a href="' . $facebook->getLogoutUrl() . '">Logout</a>';
}
Quando viene registrato nell'e -mail è disponibile in $user_profile
Vettore.
Spero possa aiutare !
È possibile recuperare l'indirizzo e -mail dal profilo dell'utente accessibile. Ecco lo snippet di codice
<?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"]);
}
?>
Basta aggiungere questo blocco di codice al ritorno di stato e iniziare a passare un oggetto stringa di query {}. Per gli sviluppatori JavaScript
Dopo aver inizializzato l'SDK.
Passaggio 1: // Ottieni lo stato di accesso
$(document).ready(function($) {
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
console.log(response);
});
});
Ciò verificherà il caricamento del documento e riceverà il controllo dello stato di accesso se gli utenti hanno effettuato l'accesso.
Quindi la funzione checkloginstate è chiamato e la risposta è passata a StatusChangeCallback
function checkLoginState() {
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});
}
Passaggio 2: consentire di ottenere i dati di risposta dallo stato
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 !');
}
}
Questo ha anche il ID utente che viene impostato su variabile, quindi a getuserinfo Func è chiamato per recuperare le informazioni dell'utente utilizzando il grafico-API.
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);
}
);
}
Dopo aver superato il ID utente Come argomento, la funzione quindi recupera tutte le informazioni relative a questo ID utente. Nota: nel mio caso stavo cercando l'e -mail, in quanto mi ha permesso di eseguire una funzione in grado di registrare l'utente solo via e -mail.
// Accedi via 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 !');
}
});
}
Ti darà informazioni sull'utente attualmente accessibile, ma dovrai fornire un token OAuth. Vedere:
L'e -mail nel profilo può essere ottenuta utilizzando l'autorizzazione estesa, ma immagino che non sia possibile utilizzare l'e -mail per accedere a FB. Nella mia app volevo visualizzare gli account Mulitple FB di un utente in un elenco, volevo mostrare le e -mail di accesso degli account FB come un identificatore univoco dei rispettivi account, ma non sono riuscito a toglierlo da FB, tutto ciò che ho ottenuto è stato L'e -mail principale nel profilo utente ma nel mio caso la mia e -mail di accesso e la mia e -mail principale sono diverse.
Assicurati che la tua applicazione Facebook sia pubblicata. Per ricevere dati per e -mail, public_profile e user_friends, la tua app deve essere resa disponibile al pubblico.
Puoi disabilitarlo in seguito a fini di sviluppo e ottenere comunque un campo e -mail.
I seguenti strumenti possono essere utili durante lo sviluppo:
Access token debugger: incolla in un token di accesso per i dettagli
https://developers.facebook.com/tools/debug/accessToken/
Graph API Explorer: test Richieste all'API grafico dopo aver incollato il token di accesso
Assicurati di specificare completamente il numero di versione dell'API come qualcosa di simile "v2.11"
e non "2.11"
Non sono sicuro a cosa sia impostata predefinita se questo non è corretto, ma ho avuto alcuni strani errori che hanno cercato di recuperare l'e -mail quando ho perso il v
.