web-dev-qa-db-ja.com

Facebook Graph APIはメールアドレスを返しません

編集:重複しないため、理由:

  • 私には許可があります
  • トークンをデバッグしました
  • コードはテストユーザーと連携します

読み取りなしで重複としてマークしないでください。

ユーザーの電子メールアドレスを取得しようとしていますが、取得できません。グラフAPIエクスプローラーで、送信をクリックすると、電子メールフィールドが灰色になり、次のように表示されます。

フィールドが空か、アクセストークンによって許可されていません

しかし、トークンをデバッグすると、電子メールの許可が与えられます

私のプロフィールにはメールアドレスがあります。

更新: https://developers.facebook.com/tools/console/ を試しました。別のコンピューターであっても、私のプロファイルは何も返しません。ただし、同じコードは別のアカウントのメール、名前、uidを返します。

コード:

    <fb:login-button scope="email">
  Grant Permissions to make more examples work
</fb:login-button>

<button onclick="doPost()">Post to Stream</button>

<script>
function userData() {
  FB.api('/me?fields=name,email', Log.info.bind('/me callback'));
};

FB.getLoginStatus(function(response) {
  if (response.status === 'connected') {
    userData();
  }
});
</script>

電子メールをロックダウンして、誰もそれを取得できないようにすることは可能ですか?許可を与えても?

57
joao Beno

バグレポートに重複マークを付け、そこにあるすべての投稿とリンクを読んだ後、この問題の原因と修正方法を確認しました。

問題 Facebookは、グラフAPIでのプライマリメールの内容を忘れる場合があります(ただし、設定にはまだあります)。

解決策影響を受けるユーザーは、電子メールを削除し、設定を保存してから、アドレスを再度追加し、再確認してからプライマリにする必要があります。これにより、サンドボックスアプリと、Facebookのログインが使用されなかった他のアプリの両方のアカウントが修正されました。

20
joao Beno

The Marcus ' answer は、私が直面していた実際の問題に私を導きます。

Facebook Explorerツールを使用してデバッグすると、FB.login()メソッドで 電子メールスコープを設定 する必要があることがわかりました。

FB.login(function(response) {
    if (response.status === 'connected'){
        FB.api('/me?fields=id,email,name', function(data) {
        console.log( data.email ) // it will not be null ;)
    })
}, {scope: 'email'});

Quickstartガイドでは明確ではなく、他の人にも役立つことを願っています。

38
Miere

私は同じ問題を抱えていて、理由を見つけたと思います:ユーザーがFacebookで未確認の電子メールを持っている場合(つまり、Facebookが彼の電子メールアドレスに検証メールを送信したが応答しなかった場合)Facebookはその電子メールをアプリに渡しません彼があなたに電子メールの許可を与えたとしても(!!!)。

だから、ユーザー名([email protected])がある場合は、Facebookのメールを使用しました。

32
ozba

新しいFacebookグラフでは、次のように/ meリクエストにスコープを追加する必要があります。

/ me?fields = email、birthday、location、locale、age_range、currency、first_name、last_name、name_format、gender&access_token =

6
Alin Razvan

サイトのfbログインボタンを開発しているときに、同じ問題が発生しました。私のアプリのセットアップ許可さえここにありました:

https://developers.facebook.com/apps/<my-app-ID>/permissions

また、特定の初期のケースでは問題なく機能していました。つまり、メールを送信していました(自分のアカウントでテストし、メールを送信していました)。その後、突然メールがまったく反映されなくなりました。 2時間ブラウジングした後、このリンクにアクセスしたときのように、アクセストークンに問題があることがわかりました。

https://developers.facebook.com/tools/Explorer/<your-fb-id>/?method=GET&path=100002451127858%3Ffields%3Did%2Cemail

Your-fb-idを自分のIDで更新し、上記のリンクに移動します。 [アクセストークンの取得]をクリックします。開いたタブで「拡張アクセス許可」をクリックし、その中で「電子メール」を選択して送信します。次に、クエリをもう一度テストします。コンソールとウェブサイトで間違いなく機能します。乾杯! :)

4
Sayed

これは既知のバグです。ユーザーがプライマリに設定されたメールアドレスを持っていない場合、クエリはメールに対してnullを返します。アカウントのメールアドレスをプライマリ https://www.facebook.com/settings?tab=account&section=email&view に設定してから、お試しください。

ソース: https://developers.facebook.com/bugs/298946933534016/

1
spence0021