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è.
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
Đ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? –