Facebook Graph API,如何获取用户的电子邮件?
我正在使用graphicsAPI,但我不知道如何获取login用户的电子邮件地址。
Graph的介绍状态:“Graph API可以访问您通常在registry单中为您的网站请求的所有基本帐户注册数据,包括姓名,电子邮件地址,个人资料照片和生日”
一切顺利,但如何获得这些信息?
这是我迄今为止:
$json = $facebook->api('/me'); $first = $json['first_name']; // gets first name $last = $json['last_name'];
获取用户电子邮件地址的唯一方法是请求电子邮件字段的扩展权限。 用户必须允许你看到这个,你不能得到用户的朋友的电子邮件地址。
http://developers.facebook.com/docs/authentication/permissions
如果使用Facebook连接,则可以通过将调用的string中的scope = email传递给身份validation对话框来执行此操作。
我build议使用SDK而不是file_get_contents,因为它使得执行Oauth身份validation变得容易得多。
// Facebook SDK v5 for PHP // https://developers.facebook.com/docs/php/gettingstarted/5.0.0 $fb = new Facebook\Facebook([ 'app_id' => '{app-id}', 'app_secret' => '{app-secret}', 'default_graph_version' => 'v2.4', ]); $fb->setDefaultAccessToken($_SESSION['facebook_access_token']); $response = $fb->get('/me?locale=en_US&fields=name,email'); $userNode = $response->getGraphUser(); var_dump( $userNode->getField('email'), $userNode['email'] );
打开base_facebook.php在函数getLoginUrl()
添加Access_token
array_merge(array( 'access_token' => $this->getAccessToken(), 'client_id' => $this->getAppId(), 'redirect_uri' => $currentUrl, // possibly overwritten 'state' => $this->state), $params);
和使用范围的电子邮件许可
if ($user) { echo $logoutUrl = $facebook->getLogoutUrl(); } else { echo $loginUrl = $facebook->getLoginUrl(array('scope' => 'email,read_stream')); }
要获取用户电子邮件,您必须使用email
许可权以他的Facebook帐户login用户。 用于Facebook PHP SDK( 请参阅github )如下。
首先检查用户是否已经login:
require "facebook.php"; $facebook = new Facebook(array( 'appId' => YOUR_APP_ID, 'secret' => YOUR_APP_SECRET, )); $user = $facebook->getUser(); if ($user) { try { $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { $user = null; } }
如果他没有,你可以显示login链接要求的email
权限:
if (!$user) { $args = array('scope' => 'email'); echo '<a href="' . $facebook->getLoginUrl() . '">Login with Facebook</a>'; } else { echo '<a href="' . $facebook->getLogoutUrl() . '">Logout</a>'; }
当他login时,可以在$user_profile
数组中find该电子邮件。
希望有所帮助!
您可以从login用户的configuration文件中检索电子邮件地址。 这是代码片段
<?php $facebook = new Facebook(array( 'appId' => $initMe["appId"], 'secret' => $initMe["appSecret"], )); $facebook->setAccessToken($initMe["accessToken"]); $user = $facebook->getUser(); if ($user) { $user_profile = $facebook->api('/me'); print_r($user_profile["email"]); } ?>
会给你关于当前login用户的信息,但是你需要提供一个oauth标记。 看到:
在configuration文件中的电子邮件可以获得使用扩展权限,但我猜这是不可能得到用于loginfb的电子邮件。 在我的应用程序,我想显示列表中的用户多个fb帐户,我想显示fb帐户的login电子邮件作为各自帐户的唯一标识符,但我不能从fb得到它,我得到的是在用户configuration文件中的主要电子邮件,但在我的情况下,我的login电子邮件和我的主电子邮件是不同
确保您的Facebook应用程序已发布。 为了接收电子邮件,public_profile和user_friends的数据,您的应用程序必须公开。
您可以稍后为了开发目的而禁用它,并仍然收到电子邮件字段。
- 应用程序未安装:此应用程序仍处于开发模式
- 使Facebooklogin与Android Web视图一起工作
- Facebook SDK:应用程序未注册为URLscheme
- 什么是一个Ajax调用响应像“for(;;); {json data}“是什么意思?
- 有Facebook的sharer.php更改为不再接受详细的参数?
- FacebookSdk.sdkInitialize(上下文)已被弃用
- 如何在2013年2月迁移之后在朋友的时间轴上发布?
- Facebook中的shebang / hashbang(#!)和新的Twitterurl是什么?
- 如何使用Facebook PHP SDK 3.0正确处理会话和访问令牌?