2010-07-27 9 views
8

Ho un sito Web con utenti e utenti che possono aggiungersi come amici. Ultimamente, ho visto molte app Web che hanno una funzione in cui puoi importare i tuoi amici da Facebook direttamente nella loro app web. Come viene implementato questo tipo di importazione della lista di amici di Facebook?Come importare gli amici di Facebook sul sito web

Ho cercato nei documenti dell'API di Facebook e non riesco a trovare nulla direttamente sul punto.

Presumibilmente userei l'API di Facebook per estrarre un elenco di amici dell'utente. Da lì, come potrei quindi trovare utenti sul mio sito che sono membri di quella lista? Questo tipo di schema funziona solo con altri utenti che hanno già utilizzato la ricerca di amici di Facebook, in modo che sia possibile legare loro un account Facebook?

Sembra che non ci sia molto da fare su questo argomento, anche se ho visto molti siti farlo, quindi qualsiasi aiuto, non importa quanto sia fondamentale, sarebbe molto apprezzato.

+0

È possibile eseguire questa operazione solo se si memorizzano gli ID utente fb dei propri utenti (ad esempio, gli utenti sul proprio sito possono collegare i propri account ai profili Facebook e memorizzare tali informazioni). – serg

+0

Che dire dell'utilizzo di alcune informazioni identificative fornite da Facebook come l'e-mail? C'è un modo per abbinare le informazioni di un utente sul mio sito alle informazioni su Facebook? –

risposta

28

Le basi di ciò che è necessario per questo centro intorno a registering your site come "un'applicazione Facebook" e facendo uso di Graph API.

Dai uno sguardo alla sezione "Accedi con Facebook" di this page. Fondamentalmente, quando registri la tua "domanda" avrai un ID applicazione e un "segreto dell'applicazione" (che è solo una stringa di caratteri, e non deve mai essere reso pubblico o qualcuno con esso potrebbe falsificarlo come la tua applicazione). L'esempio nella pagina mostra una piccola quantità di JavaScript per inizializzare l'applicazione dal tuo sito Web, a quel punto sei pronto per l'integrazione con Facebook.

Appena sotto questo è un esempio del pulsante "Accedi con Facebook", che è quello che i tuoi utenti userebbero per indicare che desiderano consentire al tuo sito di accedere ad alcuni dei loro dati di Facebook (l'elenco Amici, ad esempio) . È possibile personalizzare in modo ottimale le richieste del proprio sito da parte dell'utente all'interno del tag di accesso e agli utenti verrà visualizzato un prompt come this one che richiede in particolare il permesso di consentire al sito di accedere ai propri dati di Facebook.

Guardando indietro allo this page di nuovo (anche se potrebbe essere anche su altre pagine, la documentazione di Facebook cambia molto), scorrendo un po 'più avanti si trova un semplice esempio (in PHP) per l'integrazione di base di Facebook. La pagina di esempio presenta all'utente un pulsante "Accedi con Facebook" e si ricarica dopo aver fatto clic sul pulsante (sottoscrivendo l'evento dell'API di Facebook corretto in JavaScript). Al momento del ricaricamento, l'utente ha ora un cookie crittografato (supponendo che l'utente accetti le richieste di autorizzazione) che la pagina di esempio può leggere.

Il "segreto dell'applicazione" viene utilizzato per decrittografare il cookie, che contiene l'ID di Facebook dell'utente e il token di accesso che autorizza il sito a effettuare richieste per le informazioni di Facebook dell'utente. L'utilizzo del token di accesso nelle richieste dell'API Graph garantisce l'autorizzazione a ricevere i dati da tali richieste.

Le richieste dell'API grafico sono solo richieste GET che restituiscono dati JSON, quindi una volta ottenuto il token di accesso (e l'ID utente come punto di partenza) è possibile effettuare tali richieste ovunque si desideri. Possono essere realizzati lato client in JavaScript (insieme all'utilizzo di Social Plugins e altri widget di Facebook) per "Facebookify" l'esperienza dei tuoi utenti sul tuo sito senza esporre molto, se non del tutto, dati o responsabilità al tuo sito. Oppure le richieste possono essere fatte dal tuo codice lato server sul back-end allo scopo di memorizzare i dati richiesti e usarli come il tuo sito ritiene opportuno (come l'elenco Amici).

una richiesta API per ottenere una lista di amici sarebbe qualcosa di simile:

https://graph.facebook.com/me/friends?access_token=your_access_token

(Tuttavia, si dovrebbe sostituire il me nel percorso con il Facebook ID dell'utente che ha come amici voi si desidera recuperare e sostituire your_access_token con il token di accesso effettivo. È possibile trovare collegamenti di esempio per il proprio account, presupponendo di aver effettuato l'accesso a Facebook.

L'API Graph (come suggerisce il nome) si estende verso l'esterno attraverso il grafico sociale di Faceb ook data. Qualsiasi oggetto JSON che ritorna con un id può essere richiesto nella propria richiesta API per vedere più informazioni. Qualsiasi informazione richiesta, come gli indirizzi e-mail degli Amici dell'utente, sarà disponibile se e (si spera) solo se le autorizzazioni sia dell'utente sia dell'Amico dell'utente in questione lo consentono. (Scusate, ma se gli amici dell'utente hanno specificato che i loro amici non possono concedere l'accesso a queste informazioni, non è disponibile.)

Quindi, una volta che gli utenti concedono al sito le autorizzazioni richieste per visualizzare i propri dati di Facebook, puoi raccogliere tutti i dati che desideri (e sono autorizzati ad accedere) disponibili nell'API Graph. (.. Odio usare la parola "raccolta" c'è, ma si ottiene l'idea agire in modo responsabile, naturalmente) Così il vostro processo, dal punto di vista dell'utente in ogni caso, potrebbe essere:

  1. Chiedere utente per accedere con Facebook, richiedendo autorizzazioni specifiche.
  2. Ricevi queste autorizzazioni dall'utente (altrimenti il ​​processo termina qui).
  3. Creare richieste API grafico back-end dal codice server per ottenere le informazioni pertinenti dal grafico sociale Facebook dell'utente.
  4. Presenta l'utente con le opzioni che è possibile dare un senso (ad esempio abbinando indirizzi e-mail o anche nomi con gli utenti che già possiedi), sia che tu abbia già (hey, questo tuo amico è sul nostro sito, vorresti come dire ciao?) o invita al tuo sito (non abbiamo una registrazione del tuo amico che visita il nostro sito, clicca qui per invitarli!), ecc.
  5. L'utente continua quindi a interagire con qualsiasi funzionalità il tuo sito sta presentando in questa materia.

Ha senso? Come ho detto, la documentazione di tutto questo su Facebook cambia molto (ho trovato diversi link morti all'interno del proprio sito mentre scrivevo questo). Anche le loro interfacce programmatiche cambiano abbastanza spesso. Potrebbero sviluppare modi più semplici per farlo, ma una volta impostato e attivo e astratto le chiamate all'API Graph e tutto il resto, diventa piuttosto semplice integrare il/i sito/i con Facebook.

0

È possibile ottenere l'elenco di amici di membri che accedono al proprio sito Web utilizzando l'accesso di Facebook. TUTTAVIA, verranno visualizzati solo gli amici che sono anche registrati sul tuo sito web. (In termini di Facebook, solo gli amici che utilizzano la stessa app)

Dalla pagina degli sviluppatori di facebook è possibile ottenere i seguenti codici.

login.php

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

$helper = $fb->getRedirectLoginHelper(); 

$permissions = ['email','user_friends']; // Optional permissions (THIS IS WHERE YOU GET THE PERMISSION FOR FRIEND'S LIST) 
$loginUrl = $helper->getLoginUrl('https://example.com/fb-callback.php', $permissions); 

echo '<a href="' . htmlspecialchars($loginUrl) . '">Log in with Facebook!</a>'; 

Fb-callback.php

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

$helper = $fb->getRedirectLoginHelper(); 

try { 
    $accessToken = $helper->getAccessToken(); 
} catch(Facebook\Exceptions\FacebookResponseException $e) { 
    // When Graph returns an error 
    echo 'Graph returned an error: ' . $e->getMessage(); 
    exit; 
} catch(Facebook\Exceptions\FacebookSDKException $e) { 
    // When validation fails or other local issues 
    echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
    exit; 
} 

if (! isset($accessToken)) { 
    if ($helper->getError()) { 
    header('HTTP/1.0 401 Unauthorized'); 
    echo "Error: " . $helper->getError() . "\n"; 
    echo "Error Code: " . $helper->getErrorCode() . "\n"; 
    echo "Error Reason: " . $helper->getErrorReason() . "\n"; 
    echo "Error Description: " . $helper->getErrorDescription() . "\n"; 
    } else { 
    header('HTTP/1.0 400 Bad Request'); 
    echo 'Bad request'; 
    } 
    exit; 
} 

// Logged in 
echo '<h3>Access Token</h3>'; 
var_dump($accessToken->getValue()); 

// The OAuth 2.0 client handler helps us manage access tokens 
$oAuth2Client = $fb->getOAuth2Client(); 

// Get the access token metadata from /debug_token 
$tokenMetadata = $oAuth2Client->debugToken($accessToken); 
echo '<h3>Metadata</h3>'; 
var_dump($tokenMetadata); 

// Validation (these will throw FacebookSDKException's when they fail) 
$tokenMetadata->validateAppId({app-id}); // Replace {app-id} with your app id 
// If you know the user ID this access token belongs to, you can validate it here 
//$tokenMetadata->validateUserId('123'); 
$tokenMetadata->validateExpiration(); 

if (! $accessToken->isLongLived()) { 
    // Exchanges a short-lived access token for a long-lived one 
    try { 
    $accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken); 
    } catch (Facebook\Exceptions\FacebookSDKException $e) { 
    echo "<p>Error getting long-lived access token: " . $helper->getMessage() . "</p>\n\n"; 
    exit; 
    } 

    echo '<h3>Long-lived</h3>'; 
    var_dump($accessToken->getValue()); 
} 

$_SESSION['fb_access_token'] = (string) $accessToken; 

// User is logged in with a long-lived access token. 
// You can redirect them to a members-only page. 
//header('Location: https://example.com/members.php'); 

A login.php si può vedere la seguente riga

$permissions = ['email','user_friends']; 

Questo richiederà all'utente l'autorizzazione per accedere ai tuoi amici che sono anche utilizzando l'applicazione.

Questo codice otterrà la lista amico dal grafico

try { 
      // Returns a `Facebook\FacebookResponse` object 
      $response = $this->fb->get('/me?fields=id,name,email,gender,user_friends,', $this->token); 
     } catch(Facebook\Exceptions\FacebookResponseException $e) { 
      echo 'Graph returned an error: ' . $e->getMessage(); 
      exit; 
     } catch(Facebook\Exceptions\FacebookSDKException $e) { 
      echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
      exit; 
     } 

I codici sono tutti campioni e sono solo di riferimento in modo da ottenere l'idea di ciò che sta accadendo nel backend. Consiglio vivamente di dare un'occhiata a https://developers.facebook.com/docs/php/howto/example_facebook_login

In caso di ulteriori domande sul flusso, è possibile creare una nuova domanda per ottenere le risposte.

Aggiornamento: Manipolazione user_friends < - questo è quello che stai cercando per

Su login utilizzando Facebook al tuo sito web, l'utente loggato sarà dato un ID univoco permanente al tuo sito web.

Quando si richiede il profilo user_friends di tale membro, Facebook Graph restituirà un elenco di oggetti utente per gli amici che utilizzano questa app. E quegli oggetti includono l'id utente (che è unico per ogni app), dall'ID sarai in grado di collegare amici che si conoscono all'interno della tua app.

https://developers.facebook.com/docs/graph-api/reference/user/

Esempio Utente A (ID: 1234) e l'utente B (ID: 5678)

1) L'utente A login al tuo sito web utilizzando Facebook.

2) Si tenta di richiedere user_friends da Facebook dell'utente A, ma non restituisce nulla. .

3) Utente B registrati e accedi al tuo sito web utilizzando Facebook.

4) È una richiesta user_friends di utente B e grafici Facebook riporta l'ID utente di un 1234.

Da lì si è in grado di comprendere 5679 e 1234 sono amici e si è in grado di progettare il database intorno a questo per associare i tuoi membri come amici.

Problemi correlati