繁体   English   中英

Facebook Android SDK即使获得许可也没有电子邮件

[英]Facebook Android SDK No Email even after permission

我正在尝试通过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);
}

知道我在做什么错吗?

代替:

executeAsync();

采用:

请求的bundle参数:

 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帐户中是公开的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM