首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android Facebook SDK 4电子邮件返回空

Android Facebook SDK 4电子邮件返回空
EN

Stack Overflow用户
提问于 2017-07-14 17:16:47
回答 2查看 318关注 0票数 0

嗨,我正在尝试从facebook sdk 4收到电子邮件,但到目前为止还没有任何运气:(

因此,我希望这里有人可以帮助我:)

代码只是return email null,但我的facebook帐户有电子邮件,并且应用程序可以访问开发者应用程序审查中的电子邮件。

下面是我的代码:

代码语言:javascript
运行
复制
public class LoginActivity extends Activity {
private CallbackManager callbackManager;
private LoginButton loginButton;
private TextView btnLogin;
private ProgressDialog progressDialog;
User user;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    if(PrefUtils.getCurrentUser(LoginActivity.this) != null){

        Intent homeIntent = new Intent(LoginActivity.this, LogoutActivity.class);

        startActivity(homeIntent);

        finish();
    }
}

@Override
protected void onResume() {
    super.onResume();


    callbackManager=CallbackManager.Factory.create();

    loginButton= (LoginButton)findViewById(R.id.login_button);

    loginButton.setReadPermissions("public_profile", "email","user_friends", "user_location", "user_birthday", "user_photos");

    btnLogin= (TextView) findViewById(R.id.btnLogin);
    btnLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            progressDialog = new ProgressDialog(LoginActivity.this);
            progressDialog.setMessage("Loading...");
            progressDialog.show();

            loginButton.performClick();

            loginButton.setPressed(true);

            loginButton.invalidate();

            loginButton.registerCallback(callbackManager, mCallBack);

            loginButton.setPressed(false);

            loginButton.invalidate();

        }
    });
}

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


private FacebookCallback<LoginResult> mCallBack = new FacebookCallback<LoginResult>() {
    @Override
    public void onSuccess(LoginResult loginResult) {

        progressDialog.dismiss();

        // App code
        final GraphRequest request = GraphRequest.newMeRequest(
                loginResult.getAccessToken(),
                new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(
                            JSONObject object,
                            GraphResponse response) {

                        Log.e("response: ", response + "");
                            try {
                                user = new User();
                                user.facebookID = object.getString("id").toString();
                                //user.email = object.getString("email");
                                user.email = object.optString("email");
                                user.name = object.getString("name").toString();
                                user.gender = object.getString("gender").toString();
                                user.birthday = object.getString("birthday").toString();
                                PrefUtils.setCurrentUser(user,LoginActivity.this);

                            }catch (Exception e){
                                e.printStackTrace();
                            }
                          Toast.makeText(LoginActivity.this,"welcome "+user.name,Toast.LENGTH_LONG).show();
                            Intent intent=new Intent(LoginActivity.this,LogoutActivity.class);
                            startActivity(intent);
                            finish();

                    }

                });

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

    @Override
    public void onCancel() {
        progressDialog.dismiss();
    }

    @Override
    public void onError(FacebookException e) {
        progressDialog.dismiss();
    }
};

}
EN

回答 2

Stack Overflow用户

发布于 2017-07-14 17:24:10

嗯,我曾经遇到过这样的问题。在我的例子中,这是因为你使用的账号,它是在没有电子邮件的情况下注册的,只使用电话号码。由于facebook可以在没有电子邮件的情况下进行注册,所以出现了这个bug。

尝试下载Zalora应用程序,他们已经解决了这个问题,通过创建一个新的页面来重新发送电子邮件

票数 1
EN

Stack Overflow用户

发布于 2017-07-14 19:49:45

只需在注释行中添加.toString();即可。试着这样做

代码语言:javascript
运行
复制
                             try {
                                    user = new User();
                                    user.facebookID = object.getString("id").toString();
                                    user.email = object.getString("email").tostring;
                                    user.name = object.getString("name").toString();
                                    user.gender = object.getString("gender").toString();
                                    user.birthday = object.getString("birthday").toString();
                                    PrefUtils.setCurrentUser(user,LoginActivity.this);

                                 }

如果不起作用,则以数组列表形式添加登录权限

loginManager.logInWithReadPermissions((Activity) context, Arrays.asList("public_profile","email","user_friends", "user_location", "user_birthday", "user_photos"));

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45099168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档