2010-07-27 6 views
8

У меня есть сайт, на котором пользователи и пользователи могут добавлять друг друга в качестве друзей. В последнее время я видел множество веб-приложений, в которых есть функция, в которой вы можете импортировать своих друзей из Facebook прямо в свое веб-приложение. Как реализуется этот тип импорта списка друзей Facebook?Как импортировать друзей Facebook на сайт

Я просмотрел документы API Facebook и не могу найти что-либо прямо по этому поводу.

Предположительно, я бы использовал API Facebook, чтобы вытащить список друзей пользователя. Оттуда, как я могу затем найти пользователей на моем сайте, которые являются членами этого списка? Этот тип схемы работает только с другими пользователями, которые уже использовали поиск друзей в Facebook, чтобы вы могли привязать к ним учетную запись Facebook?

На этой теме, похоже, не так много, хотя я видел много сайтов, которые это делают, поэтому любая помощь, независимо от того, насколько она была бы основанной, была бы высоко оценена.

+0

Вы можете сделать это, только если вы храните идентификаторы пользователей fb своих пользователей (т. Е. Пользователи вашего сайта могут связывать свои учетные записи с профилями facebook и хранить эту информацию). – serg

+0

Как насчет использования какой-либо части идентифицирующей информации, которую Facebook предоставляет, например, по электронной почте? Есть ли способ сопоставить информацию пользователя на моем сайте с их информацией на Facebook? –

ответ

28

Основы того, что вам нужно для этого центра вокруг registering your site как «приложение Facebook» и использование Graph API.

Взгляните на раздел «Войти в Facebook» this page. В принципе, когда вы регистрируете свое «приложение», у вас будет идентификатор приложения и «секрет приложения» (который представляет собой всего лишь строку символов и никогда не должен публиковаться, или кто-либо из них может обманывать ваше приложение). В примере на странице показано небольшое количество JavaScript для инициализации приложения с вашего сайта, после чего вы можете пойти на интеграцию с Facebook.

Ниже приведен пример кнопки «Вход в систему с Facebook», которую будут использовать ваши пользователи, чтобы указать, что они хотят, чтобы ваш сайт мог получить доступ к некоторым из своих данных в Facebook (например, список друзей) , Вы можете очень точно настроить specific permissions ваши запросы на сайт от пользователя в этом теге входа, а вашим пользователям будет предложено приглашение вроде this one, в котором просят разрешения разрешить вашему сайту доступ к своим данным в Facebook.

Оглядываясь назад на this page (хотя это может быть и на других страницах, документация в Facebook сильно меняется), прокручивая немного дальше, вы найдете простой пример (на PHP) для очень простой интеграции с Facebook. На странице примера представлен пользователь с кнопкой «Войти с Facebook» и перезагружается после нажатия кнопки (подписавшись на правильное событие API Facebook в JavaScript). После перезагрузки пользователь теперь имеет зашифрованный файл cookie (при условии, что пользователь согласился с запросом разрешения), который может прочитать страница примера.

«Секрет приложения» используется для дешифрования файла cookie, который содержит идентификатор пользователя Facebook и токен доступа, который разрешает вашему сайту делать запросы на информацию этого пользователя в Facebook. Использование маркера доступа в запросах Graph API предоставит вам разрешение на получение данных из этих запросов.

Запросы Graph API - это просто запросы GET, которые возвращают данные JSON, поэтому, как только у вас есть токен доступа (и идентификатор пользователя в качестве отправной точки), вы можете делать такие запросы в любом месте. Они могут быть сделаны на стороне клиента в JavaScript (наряду с использованием Social Plugins и других виджетов Facebook), чтобы «сообщать» о ваших опытах пользователей на вашем сайте, не подвергая много, если таковые вообще имеются, данных или ответственности на вашем сайте. Или запросы могут быть сделаны из вашего кода на стороне сервера на задней стороне с целью хранения запрашиваемых данных и использования его по мере соответствия вашему сайту (например, списка друзей).

Запрос API, чтобы получить список друзей будет что-то вроде этого:

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

(Тем не менее, вы бы заменить me на пути с Facebook ID пользователя, чьи друзья вы хотите получить и заменить your_access_token на фактический токен доступа. Пример ссылок для вашей собственной учетной записи при условии, что вы вошли в Facebook, находится на this page.)

Графический API (как следует из названия) расширяет наружу через социальный график Faceb ook данные. Любой объект JSON, который возвращается с id, может быть запрошен в своем собственном запросе API, чтобы узнать больше о его информации. Любая информация, которую вы хотите, например, адреса электронной почты друзей пользователя, будет доступна , если и (надеюсь) , только если разрешений как пользователя, так и друга пользователя разрешают это. (Извините, но если друзья пользователя специально сказали, что их Друзья не могут предоставить доступ к этой информации, то они недоступны.)

Итак, как только ваши пользователи предоставят вашему сайту запрашиваемые разрешения для просмотра своих данных в Facebook, вы можете собирать любые данные, которые вы хотите (и им разрешен доступ), которые доступны в Graph API. (.. Я ненавижу использовать слово «урожай», но вы получите идею действовать ответственно, конечно), так что ваш процесс, с точки зрения пользователя, в каждом конкретном случае, будет:

  1. Спросите пользователь для входа в систему с помощью Facebook, запрашивающий определенные разрешения.
  2. Получите эти разрешения от пользователя (иначе процесс заканчивается здесь).
  3. Выполнение запросов API Графического Графа с вашего кода сервера, чтобы получить соответствующую информацию из социального графика пользователя Facebook.
  4. Представьте пользователю варианты, которые вы могли бы понять (например, сопоставление адресов электронной почты или даже имен с уже имеющимися пользователями), будь то пользователи, которых вы уже имеете (эй, этот ваш друг на нашем сайте, не могли бы вы как бы поздороваться?) или приглашает на ваш сайт (у нас нет записи вашего друга, посетившего наш сайт, нажмите здесь, чтобы пригласить их!) и т. д.
  5. Затем пользователь продолжает взаимодействовать с любой функциональностью вашего сайта представляет в этом вопросе.

Имеют смысл? Как я уже упоминал, документация для всего этого на Facebook сильно меняется (я нашел несколько мертвых ссылок на своем собственном сайте при написании этого). Их программные интерфейсы меняются довольно часто. Они могут разработать более простые способы сделать это, но как только вы настроитесь и уделите внимание вызовам Graph API, и все это, довольно просто интегрировать ваши сайты с Facebook.

0

Вы можете получить список друзей, которые вошли в ваш сайт, используя Facebook Login. HOWEVER, будут показаны только друзья, которые также зарегистрированы на вашем сайте. (В терминах Facebook только друзья, которые также используют одно и то же приложение)

С страницы разработчиков facebook вы можете получить следующие коды.

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-обратного вызова.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'); 

В login.php вы можете увидеть следующую строку

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

Это будет запрашивать у пользователя разрешение на доступ к друзьям, которые также с помощью приложения.

Этот код будет получить список друзей из графа

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

Коды все образцы и только для справки, так что вы получите представление о том, что происходит во внутреннем интерфейсе. Я настоятельно рекомендую вам взглянуть на https://developers.facebook.com/docs/php/howto/example_facebook_login

Если у вас есть дополнительные вопросы относительно потока, вы можете создать новый вопрос, чтобы получить ответы.

Update: Обработка user_friends < - это то, что вы ищете

После входа в систему с помощью Facebook на свой веб-сайт, вошедшего в элементе будет предоставлен постоянный уникальный идентификатор для вашего сайта.

Когда вы запрашиваете график user_friends этого члена, Facebook Graph вернет список пользовательских объектов для друзей, которые также используют это приложение. И эти объекты включают идентификатор пользователя (который уникален для каждого приложения), из ID вы сможете связать друзей, которые знают друг друга в вашем приложении.

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

Пример пользователя A (ID: 1234) и пользователя B (ID: 5678)

1) Пользователь А Войти на ваш сайт с помощью Facebook.

2) Вы пытаетесь запросить user_friends из Facebook пользователя A, но это ничего не возвращает.

3) Пользователь B регистрируется и регистрируется на вашем сайте с помощью Facebook.

4) Вы пытаетесь запросить user_friends пользователя В и Facebook графах возвращает идентификатор пользователя А 1234.

Оттуда вы можете понять, 5679 и 1234 являются друзьями, и вы в состоянии проектировать базы данных вокруг этого, чтобы связать своих членов как друзей.

Смежные вопросы