2017-05-02 8 views
1

を返さない私は、次のコードをしている:FacebookのグラフAPIは、電子メール

$のmetaData

[ 
    "app_id" => "..." 
    "application" => "My App Name" 
    "expires_at" => "2017-07-01 11:40:09.000000" 
    "is_valid" => true 
    "issued_at" => "2017-05-02 11:40:09.000000" 
    "metadata" => array:2 [ 
    "auth_type" => "rerequest" 
    "sso" => "ios" 
    ] 
    "scopes" => array:2 [ 
     0 => "email" 
     1 => "public_profile" 
    ] 
    "user_id" => "102..." 
    ] 
} 

$ graphUser

$fb = new Facebook([ 
    'app_id' => $appId, 
    'app_secret' => $appSecret, 
    'default_graph_version' => 'v2.9', 
]); 

$oAuth2Client = $fb->getOAuth2Client(); 
$tokenMetaData = $oAuth2Client->debugToken($accessToken); 
dump($tokenMetaData); 

$graphUser = $fb->get('/me?fields=first_name,last_name,email', $accessToken)->getGraphUser()->asArray(); 
dump($graphUser); 

上記の出力には、以下のとおりです。

array:3 [ 
    "first_name" => "John" 
    "last_name" => "Smith" 
    "id" => "102...", 
] 

ご覧のとおり、$metaDatascopesには、明らかにemailがあるため、許可の問題ではありません。それにもかかわらず、グラフのユーザは時々にメールを持っていません。

どうしてこの問題を解決できますか?

+3

APIは確認済みのメールアドレスのみを返します。また、これに影響を与える可能性のあるプライバシー設定など、他にもさまざまな要因があります。したがって、APIから電子メールアドレスを取得するためにアプリを書く必要はありません。彼らがモバイルだけでサインアップしていれば、多くのユーザーはFacebookにファイルを持っていない。 – CBroe

答えて

2

グラフapiのバージョンを指定してこの問題を解決しました。

私の要求されたフィールドをURLにfirst_name,last_name,email,picture

https://graph.facebook.com/me

が電子メールを返しませんでした。 URLに

https://graph.facebook.com/v2.9/me

は、電子メールを返すんでした。

これが役に立ちます。その答えに、このコンテンツが表示されない場合は、あなたのアクセストークンは、電子メール

https://graph.facebook.com/me/permissions? 
    access_token=(access-token) 
    &debug=all 

に対するユーザーのアクセス権を取得する場合

+0

バージョンを指定しましたので、問題はないようです –

0

最初のチェック:あなたのアクセストークンを取得中に多分

{ 
    "data": [ 
     { 
      "permission": "email", 
      "status": "granted" 
     }, 
     { 
      "permission": "public_profile", 
      "status": "granted" 
     } 
    ] 
} 

私はメールの所有権を要求しないでください:scope = emailをリクエストに追加

1

リクエストのURLに必要なフィールドを追加してください:

https://graph.facebook.com/me?fields=email,name 
関連する問題