2010-07-27 44 views
8

Tôi có một trang web có người dùng và người dùng có thể thêm nhau làm bạn bè. Gần đây, tôi đã nhìn thấy rất nhiều ứng dụng web có chức năng mà bạn có thể nhập bạn bè của bạn từ Facebook trực tiếp vào ứng dụng web của họ. Loại nhập danh sách bạn bè trên Facebook này được triển khai như thế nào?Cách nhập bạn bè trên Facebook vào trang web

Tôi đã xem tài liệu API của Facebook và không thể tìm thấy bất kỳ điều gì trực tiếp về điểm này.

Có lẽ tôi sẽ sử dụng API Facebook để lấy danh sách bạn bè của người dùng. Từ đó, làm cách nào để tìm người dùng trên trang web của tôi là thành viên của danh sách đó? Loại lược đồ này chỉ hoạt động với những người dùng khác đã tự sử dụng tìm kiếm bạn bè trên Facebook để bạn có thể liên kết tài khoản Facebook với họ không?

Thực sự dường như không có nhiều điều về chủ đề này, mặc dù tôi đã nhìn thấy rất nhiều trang web đang thực hiện nó, vì vậy bất kỳ trợ giúp nào, dù cơ bản, sẽ được đánh giá cao như thế nào.

+0

Bạn chỉ có thể thực hiện điều này nếu bạn lưu trữ id người dùng fb của người dùng (nghĩa là người dùng trên trang web của bạn có thể liên kết tài khoản của họ với tiểu sử trên facebook và bạn lưu trữ thông tin này). – serg

+0

Điều gì về việc sử dụng một số thông tin nhận dạng mà Facebook cung cấp giống như email? Có cách nào để khớp thông tin của người dùng trên trang web của tôi với thông tin của họ trên Facebook không? –

Trả lời

28

Thông tin cơ bản về những gì bạn cần cho trung tâm này xung quanh registering your site là "ứng dụng Facebook" và sử dụng số Graph API.

Hãy xem phần "Đăng nhập bằng Facebook" của this page. Về cơ bản, khi bạn đăng ký "ứng dụng", bạn sẽ có ID ứng dụng và "bí mật ứng dụng" (chỉ là một chuỗi ký tự và không bao giờ được công khai hoặc bất kỳ ai có thể giả mạo là ứng dụng của bạn). Ví dụ trên trang hiển thị một lượng nhỏ JavaScript để khởi tạo ứng dụng từ trang web của bạn, tại thời điểm đó bạn tốt để đi tích hợp Facebook.

Dưới đây là ví dụ về nút "Đăng nhập bằng Facebook", đó là những gì người dùng của bạn sẽ sử dụng để cho biết rằng họ muốn cho phép trang web của bạn truy cập vào một số dữ liệu Facebook của họ (danh sách Bạn bè) . Bạn có thể tùy chỉnh cao các yêu cầu trang web của mình từ người dùng trong thẻ đăng nhập đó và người dùng của bạn sẽ được hiển thị với lời nhắc như this one yêu cầu quyền cho phép trang web của bạn truy cập dữ liệu Facebook của họ.

Nhìn lại tại this page một lần nữa (mặc dù nó cũng có thể ở trên các trang khác, tài liệu Facebook thay đổi nhiều), cuộn xuống thêm một chút nữa bạn tìm thấy một ví dụ đơn giản (trong PHP) để tích hợp Facebook rất cơ bản. Trang ví dụ trình bày cho người dùng nút "Đăng nhập bằng Facebook" và tải lại chính nó sau khi nút được nhấp (bằng cách đăng ký sự kiện Facebook API chính xác trong JavaScript). Sau khi tải lại, người dùng hiện có cookie được mã hóa (giả sử người dùng đã đồng ý với yêu cầu quyền) mà trang ví dụ có thể đọc.

"Bí mật ứng dụng" được sử dụng để giải mã cookie, chứa ID Facebook của người dùng và mã thông báo truy cập cho phép trang web của bạn yêu cầu thông tin Facebook của người dùng đó. Sử dụng mã thông báo truy cập trong yêu cầu API đồ thị sẽ cấp cho bạn quyền để nhận dữ liệu từ các yêu cầu đó.

Yêu cầu API đồ thị chỉ là yêu cầu GET trả về dữ liệu JSON, vì vậy khi bạn có mã thông báo truy cập (và ID người dùng làm điểm bắt đầu), bạn có thể thực hiện các yêu cầu đó ở bất cứ đâu bạn muốn. Chúng có thể được tạo phía máy khách trong JavaScript (cùng với việc sử dụng Social Plugins và các tiện ích Facebook khác) để "Facebookify" trải nghiệm của người dùng trên trang web của bạn mà không tiết lộ nhiều, nếu có, dữ liệu hoặc trách nhiệm đối với trang web của bạn. Hoặc các yêu cầu có thể được thực hiện từ mã phía máy chủ của bạn ở mặt sau cho mục đích lưu trữ dữ liệu được yêu cầu và sử dụng nó khi trang web của bạn thấy phù hợp (chẳng hạn như danh sách Bạn bè).

Một yêu cầu API để có được một danh sách bạn bè sẽ là một cái gì đó như thế này:

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

(Tuy nhiên, bạn muốn thay thế me trong đường dẫn với Facebook ID của người dùng có bạn bè bạn muốn truy xuất và thay thế your_access_token bằng mã thông báo truy cập thực tế. Các liên kết mẫu cho tài khoản của bạn, giả sử bạn đã đăng nhập vào Facebook, có thể được tìm thấy trên this page.)

Graph API (như tên cho thấy) mở rộng bên ngoài trên biểu đồ xã hội của Faceb ook dữ liệu. Bất kỳ đối tượng JSON nào quay lại với số id đều có thể được yêu cầu trong yêu cầu API của chính nó để xem thêm thông tin của nó. Bất kỳ thông tin nào bạn muốn, chẳng hạn như địa chỉ email của Bạn bè của người dùng, sẽ có sẵn nếu và (hy vọng) chỉ khi quyền của cả người dùng và Người bạn đang đề cập cho phép điều này. (Xin lỗi, nhưng nếu Bạn bè của người dùng đã nói cụ thể rằng Bạn bè của họ không thể cấp quyền truy cập vào thông tin này, thì nó không có sẵn.)

Vì vậy, một khi người dùng của bạn cấp quyền yêu cầu để xem dữ liệu Facebook của họ, bạn có thể thu thập bất kỳ dữ liệu nào bạn muốn (và được phép truy cập) có sẵn trong Graph API. (Tôi ghét sử dụng từ "thu hoạch" ở đó, nhưng bạn có ý tưởng. Hành động có trách nhiệm, tất nhiên.) Vì vậy, quá trình của bạn, từ quan điểm của người dùng trong bất kỳ trường hợp nào, sẽ là:

  1. người dùng Đăng nhập bằng Facebook, yêu cầu quyền cụ thể.
  2. Nhận các quyền đó từ người dùng (nếu không quá trình kết thúc tại đây).
  3. Thực hiện yêu cầu API đồ thị back-end từ mã máy chủ của bạn để nhận thông tin có liên quan từ biểu đồ xã hội Facebook của người dùng.
  4. Trình bày cho người dùng các tùy chọn mà bạn có thể hiểu (chẳng hạn như địa chỉ email trùng khớp hoặc thậm chí cả tên người dùng bạn đã có), có thể là người dùng bạn đã có (hey, người bạn này trên trang web của chúng tôi muốn nói lời chào?) hoặc mời tham gia trang web của bạn (chúng tôi không có hồ sơ về Bạn bè của bạn truy cập trang web của chúng tôi, nhấp vào đây để mời họ!), v.v.
  5. Người dùng sau đó tiếp tục tương tác với bất kỳ chức năng nào trên trang web của bạn đang trình bày trong vấn đề này.

Có ý nghĩa? Như tôi đã đề cập, tài liệu cho tất cả điều này trên Facebook thay đổi rất nhiều (tôi đã tìm thấy một số liên kết chết trong trang web của chính họ trong khi viết bài này). Giao diện lập trình của chúng thay đổi khá thường xuyên. Họ có thể phát triển các cách dễ dàng hơn để làm điều này, nhưng một khi bạn đã thiết lập và đi và trừu tượng ra các cuộc gọi API Graph và tất cả điều đó, nó trở nên khá đơn giản để tích hợp (các) trang web của bạn với Facebook.

0

Bạn có thể nhận danh sách thành viên của người bạn đăng nhập vào trang web của bạn bằng cách sử dụng Đăng nhập Facebook. BAO GIỜ, chỉ những người bạn cũng được đăng ký trên trang web của bạn sẽ được hiển thị. (Trong thuật ngữ Facebook, chỉ những người bạn cũng đang sử dụng cùng một ứng dụng)

Từ trang của nhà phát triển facebook, bạn có thể nhận được các mã sau đây.

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'); 

Tại login.php bạn sẽ nhìn thấy dòng sau

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

này sẽ nhắc nhở người dùng cho phép truy cập vào những người bạn cũng đang sử dụng ứng dụng.

Mã này sẽ nhận được danh sách bạn bè từ biểu đồ

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

Các mã được tất cả các mẫu và chỉ để tham khảo để bạn có được ý tưởng về những gì đang xảy ra trong backend. Tôi khuyên bạn nên xem xét https://developers.facebook.com/docs/php/howto/example_facebook_login

Nếu bạn có thêm câu hỏi liên quan đến luồng, bạn có thể tạo câu hỏi mới để nhận câu trả lời của mình.

Cập nhật: Xử lý user_friends < - đây là những gì bạn đang tìm kiếm

Khi đăng nhập qua tài khoản Facebook vào trang web của bạn, đăng nhập thành viên sẽ nhận được một id duy nhất vĩnh viễn cho website của bạn.

Khi bạn yêu cầu biểu đồ user_friends của thành viên đó, Biểu đồ Facebook sẽ trả về danh sách đối tượng người dùng cho bạn bè đang sử dụng ứng dụng này. Và những đối tượng đó bao gồm id người dùng (là duy nhất cho từng ứng dụng), từ ID, bạn sẽ có thể liên kết những người bạn biết nhau trong ứng dụng của bạn.

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

Ví dụ người dùng A (ID: 1234) và dùng B (ID: 5678)

1) Một người dùng đăng nhập vào trang web của bạn sử dụng Facebook.

2) Bạn cố gắng yêu cầu user_friends từ Facebook của người dùng A nhưng nó không trả về gì cả.

3) Đăng ký người dùng B và đăng nhập vào trang web của bạn bằng Facebook.

4) Bạn cố gắng để yêu cầu user_friends của Người dùng B và đồ thị Facebook trả về người dùng của một ID 1234.

Từ đó bạn có thể hiểu 5679 và 1234 là những người bạn và bạn có thể thiết kế cơ sở dữ liệu của bạn xung quanh đó để kết hợp các thành viên của bạn với tư cách là bạn bè.

Các vấn đề liên quan