4

Facebookログインを実装したWebサイトがあります。私のアプリには、ユーザーの電子メールに対する権限があります。ユーザーが Facebook を使用してアプリにログインしても、名前または基本情報しか取得できません。メールではありません。というわけで、Facebook Developers Web サイトから文字どおりコピーしたコードを次に示します。

 window.fbAsyncInit = function() {
FB.init({
appId      : 'xxxxxxxxxxxxxxx', // App ID
channelUrl : '//domain.org/channel.html', // Channel File
status     : true, // check login status
cookie     : true, // enable cookies to allow the server to access the session
xfbml      : true  // parse XFBML
});


FB.Event.subscribe('auth.authResponseChange', function(response) {

if (response.status === 'connected') {

  testAPI();
} else if (response.status === 'not_authorized') {

  FB.login();
} else {

  FB.login();
}
});
};

// Load the SDK asynchronously
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));


function testAPI() {
console.log('Welcome!  Fetching your information.... ');
FB.api('/me', function(response) {
  console.log('Good to see you, ' + response.email + '.');
});
}
</script>
4

7 に答える 7

25

取得するフィールドを指定する必要があります。これは「宣言型フィールド」と呼ばれます。

FB.api('/me', {fields: 'name,email'}, function(response) {
  console.log('Good to see you, ' + response.email + '.');
});

詳細については、変更ログを参照してください: https://developers.facebook.com/docs/apps/changelog#v2_4

于 2015-11-16T08:59:20.750 に答える
4

メールの許可を持っていると思っていても、持っていない可能性があります。

試す、

FB.login(function(){
    FB.api('me',
    function(response){
            console.log(response.email);
    });
},{'scope':'email'});
于 2013-08-11T02:16:06.303 に答える
2

ユーザーはおそらく、Facebook で確認されていない電子メールを持っていました。あなたができることは、Facebookの設定でメールを確認するように依頼して(Facebookはクリックするリンクが記載されたメールを送信します)、もう一度やり直してください.

于 2013-12-04T16:24:34.977 に答える
1

このhttps://developers.facebook.com/bugs/298946933534016/をチェックして、実際にはバグではないことを確認できます。いくつかの理由により、ユーザーが Facebook にメールを登録していない可能性があります。たとえば、携帯電話からアカウントを作成したり、メールを検証していない...

したがって、これは既知の問題です。最善の回避策は、fb からメールを取得できない場合、フォームでメールを要求することです。

私にとっての問題は、空のメールフィールドを再現して、提供されたソリューションをテストする方法です

編集中..これは、Facebook 開発者サイトで彼らが言っていることです。

...「ユーザー」オブジェクトの「メール」フィールドのドキュメント ( https://developers.facebook.com/docs/reference/api/user/ ) は、ここで予想される動作を明確にしています。有効なメールアドレスが利用できない場合は返されません。」

ユーザーに電子メール アドレスが返されるべきだと思われる状況がいくつかありますが、そうではありません。プライバシーとセキュリティ上の理由から、特定のユーザーのメール アドレスが返されない正確な理由を詳しく説明することはできませんので、質問しないでください。考えられる理由:

アカウントにメールアドレスがありません; アカウントに確認済みのメール アドレスがありません。アカウントに確認済みのメール アドレスがありません。ユーザーは、電子メール アドレスの再確認を要求するセキュリティ チェックポイントを入力しましたが、まだ確認していません。ユーザーの電子メール アドレスに到達できません。

ファイルに有効で確認済みの到達可能な電子メールアドレスを持っているユーザーであっても、「電子メール」拡張アクセス許可も必要です...

于 2014-05-26T13:48:40.497 に答える
0

特定のメール アカウントで問題が解決しない場合。解決策: Facebook のメール ID でログインするように人々に依頼する必要があります。私の問題は、個人アカウントに接続したときに未定義のメールでした。その後、多くのことを最終的に Facebook のメール ID でログインしようとしました。うまくいきました。

ユーザー名が定義されているFacebookアカウントは、アプリへのログインに問題を引き起こします

于 2015-07-01T10:57:22.283 に答える
0
    <html>
    <head></head>
    <div id="fb-root"></div>
    <script>
    window.fbAsyncInit = function() {
    FB.init({
        appId      : 'xxxxxxxxxxxxx',
        status     : true,
        cookie     : true, 
        xfbml      : true  
    });

    FB.Event.subscribe('auth.authResponseChange', function(response) {

        if (response.status === 'connected') {
        testAPI();
        } else if (response.status === 'not_authorized') {
        FB.login();
        } else {
        FB.login();
        }
    });
    };

    (function(d){
    var js, id = 'facebook-jssdk', ref =     d.getElementsByTagName('script')[0];
        if (d.getElementById(id)) {return;}
    js = d.createElement('script'); js.id = id; js.async = true;
    js.src = "//connect.facebook.net/en_US/all.js";
    ref.parentNode.insertBefore(js, ref);
    }(document));

    function testAPI() {
        FB.api('/me?fields=name,email', function(response) {
        console.log(response.name + '---'+response.email);
        });
    }
    </script>

    <fb:login-button show-faces="true" width="200" max-rows="1"     scope="public_profile,email"></fb:login-button>

    </body>
    </html>

ref:Facebook APIを使用して未定義のユーザーメールを取得する

于 2018-09-24T07:29:24.117 に答える