我有一个网站,用户和用户可以互相添加为朋友。最近,我看到很多网络应用程序都有一个功能,你可以将你的朋友从Facebook直接导入他们的网络应用程序。如何实现这种Facebook好友列表的导入?
我查看了Facebook API文档,并且无法直接找到任何指向此的内容。
据推测,我会使用Facebook API来提取用户朋友的列表。从那里,我如何在我的网站上找到该列表成员的用户?这种类型的方案是否仅适用于已经使用Facebook好友搜索的其他用户,以便您可以将Facebook帐户绑定到他们?
在这个主题上似乎没有太多内容,尽管我已经看到很多网站在做这个,所以任何帮助,无论多么基本,都会非常感激。
答案 0 :(得分:28)
答案 1 :(得分:0)
您可以使用Facebook登录获取朋友登录您网站的会员列表。但是,只有在您网站上注册的朋友才会显示。 (在Facebook术语中,只有使用相同应用程序的朋友)
从facebooks开发者的页面,您可以获得以下代码。
<强>的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');
在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
如果您对流程有任何疑问,可以创建新问题以获得答案。
更新:处理user_friends&lt; - 这就是你要找的东西
使用Facebook登录您的网站后,登录的会员将获得永久唯一ID到您的网站。
当您请求该成员的user_friends图表时,Facebook Graph将返回正在使用此应用程序的朋友的用户对象列表。这些对象包括用户ID(每个应用程序都是唯一的),通过ID,您可以链接在您的应用中相互了解的朋友。
https://developers.facebook.com/docs/graph-api/reference/user/
示例用户A(ID:1234)和用户B(ID:5678)
1)用户A使用Facebook登录您的网站。
2)您尝试从用户A的Facebook请求user_friends但是它 没有回报。
3)用户B使用Facebook注册并登录您的网站。
4)您尝试请求User_friends用户B和Facebook图表 返回用户A的ID 1234。
从那里你可以理解5679和1234是朋友,你可以设计你的数据库,将你的成员关联为朋友。