Facebook Android SDK 即使在许可后也没有电子邮件

Posted

技术标签:

【中文标题】Facebook Android SDK 即使在许可后也没有电子邮件【英文标题】:Facebook Android SDK No Email even after permission 【发布时间】:2017-05-29 10:25:06 【问题描述】:

我正在尝试通过 Facebook 应用获取用户电子邮件。但它总是将其返回为空。我什至已经授予了所需的权限。应用程序还显示应用程序将向用户发送电子邮件等的消息。

public class MainActivity extends AppCompatActivity 

private TextView info;
private LoginButton loginButton;
private CallbackManager callbackManager;
@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    if (BuildConfig.DEBUG) 
        FacebookSdk.setIsDebugEnabled(true);
        FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
    
    callbackManager = CallbackManager.Factory.create();
    setContentView(R.layout.activity_main);
    info = (TextView)findViewById(R.id.info);
    loginButton = (LoginButton)findViewById(R.id.login_button);
    loginButton.setReadPermissions(Arrays.asList("email","user_friends"));
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() 
        @Override
        public void onSuccess(LoginResult loginResult) 
        final AccessToken accessToken= loginResult.getAccessToken();
            GraphRequestAsyncTask request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() 
                @Override
                public void onCompleted(JSONObject user, GraphResponse graphResponse) 
                    info.setText(
                            "User ID: "
                                    + user.optString("email")
                                    + "\n"
                                    + user.optString("name")
                                    + "\n" +
                                    "Auth Token: "
                                    + accessToken.getToken()
                    );


                
            ).executeAsync();

        

        @Override
        public void onCancel() 
            info.setText("Login attempt canceled.");
        

        @Override
        public void onError(FacebookException e) 

            info.setText("Login attempt failed.");
        
    );



@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    callbackManager.onActivityResult(requestCode, resultCode, data);

知道我在这里做错了什么吗?

【问题讨论】:

需要权限是指-您的电子邮件权限已在 facebook 开发人员控制台中获得批准??仅供参考,由于某些帐户电子邮件中的隐私设置不公开。您是否尝试过使用不同的帐户 【参考方案1】:

代替:

executeAsync();

使用:

请求的捆绑参数:

 Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender,birthday,picture.type(small)");
request.setParameters(parameters);
request.executeAsync();

在您的代码中:

final AccessToken accessToken= loginResult.getAccessToken();
        GraphRequestAsyncTask request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() 
            @Override
            public void onCompleted(JSONObject user, GraphResponse graphResponse) 
                info.setText(
                        "User ID: "
                                + user.optString("email")
                                + "\n"
                                + user.optString("name")
                                + "\n" +
                                "Auth Token: "
                                + accessToken.getToken()
                );


            
         );

Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender,birthday,picture.type(small)");
request.setParameters(parameters);
request.executeAsync();

还要确保Email 在您的 Facebook 帐户中是公开的。

【讨论】:

以上是关于Facebook Android SDK 即使在许可后也没有电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

android facebook sdk,分享——如何检测成功?

无法在 Android 上编写 jarlist 缓存文件 Facebook SDK

AppDelegate 应用程序功能中的 Facebook SDK 错误,即使在 Xcode 6.3 中更新了 Facebook

在 Facebook SDK Android 上找不到文件“com.facebook.android.facebook”

无法使用 Facebook Android SDK 和 Facebook Audience Network SDK 编译

通过 Xamarin.Facebook.Android sdk 登录 Facebook