代号一个Facebook登录电子邮件= null

时间:2016-04-28 15:30:20

标签: facebook email facebook-graph-api codenameone

我设法通过Facebook使用Facebook连接登录。然后我尝试提取用户的姓名和电子邮件地址。我设法得到他们的名字,但他们的电子邮件地址是空白的。我尝试使用我的Facebook帐户,我已将我的电子邮件地址设置为公开。我还添加了权限ios.facebook_permissons =" email"," public_profile"," user_birthday"和Android一样。这是我的代码

登录

public void facebookLogin() {
    final Login fb = FacebookConnect.getInstance();
    fb.setClientId("964865683621261");
            fb.setClientSecret("1fb729a93d96bb8700f2c879f520052b");
            fb.setRedirectURI("http://kyven.co.za");
            FaceBookAccess.setPermissions(new String[]{"user_birthday", "email", "public_profile"});
            fb.setCallback(new LoginCallback(){
                @Override
                public void loginFailed(String errorMessage) {
                    Dialog dg = new Dialog();
                    dg.setTitle("Login failed");
                    dg.show();
                }
                @Override
                public void loginSuccessful() {
                    InfiniteProgress ip = new InfiniteProgress();
                            ip.setUIID("InfiniteProgress");
                            final Dialog d = ip.showInifiniteBlocking();
                    Preferences.set("token", fb.getAccessToken().getToken());
                    final FacebookData data = new FacebookData();
                    data.fetchData(Preferences.get("token", (String) null), new Runnable(){

                        public void run() {
                            String email = data.getEmail();
                            Dialog.show("hello " + data.getName(), data.getEmail(), "OK", null);
                            String fullName = data.getName();
                            String[] args = { email, fullName};
                            String[] keys = { "email", "password"};
                            int id = postRequest(args, keys, "facebook_login.php");
                            if (id != 0) {
                                Preferences.set("userId", id);
                                setUpMainPage();
                                Hashtable meta = new Hashtable();
                                meta.put(com.codename1.push.Push.GOOGLE_PUSH_KEY,
                                    1276);
                                Display.getInstance().registerPush(meta, true);
                            } else {
                                Dialog.show("Error", "There was an error logging you in"
                                    + " please try again later", "OK", null);

                                d.dispose();
                    }
                        } 
                    });
                }
            });
            fb.doLogin();
}

获取数据

public class FacebookData implements UserData {

String name, email;

public String getName() {
    return name;
}

public String getEmail() {
    return email;
}

public void fetchData(String token, final Runnable callback) {
    ConnectionRequest req = new ConnectionRequest() {
            @Override
            protected void readResponse(InputStream input) throws IOException {
                JSONParser parser = new JSONParser();
                Map<String, Object> parsed = parser.parseJSON(new InputStreamReader(input, "UTF-8"));
                name = (String) parsed.get("name");
                email = (String) parsed.get("email");
            }

            @Override
            protected void postResponse() {
                callback.run();
            }

            @Override
            protected void handleErrorResponseCode(int code, String message) {

            }
        };
        req.setPost(false);
        req.setUrl("https://graph.facebook.com/v2.4/me");
        req.addArgumentNoEncoding("access_token", token);
        NetworkManager.getInstance().addToQueue(req);
}

}

1 个答案:

答案 0 :(得分:-1)

来自https://www.codenameone.com/blog/building-a-chat-app-with-codename-one-part-2.html

  

当您处理自己的用户列表并且用户登录时   注册,你一般可以问用户什么。但是,什么时候   用户通过Facebook,Google或任何其他服务登录   对于用户详细信息,这是服务的摆布......这很痛苦   明确提供甚至不提供电子邮件地址的服务   登录时默认。有时可以在Facebook上访问   仅适用于未选择隐藏它的用户。

Facebook一般不保证能够访问用户的电子邮件地址,而且通常无法提供。您需要使用Facebook ID作为唯一标识符,如果您没有收到电子邮件,则需要让用户将其提供给您。