我设法通过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);
}
}
答案 0 :(得分:-1)
来自https://www.codenameone.com/blog/building-a-chat-app-with-codename-one-part-2.html
当您处理自己的用户列表并且用户登录时 注册,你一般可以问用户什么。但是,什么时候 用户通过Facebook,Google或任何其他服务登录 对于用户详细信息,这是服务的摆布......这很痛苦 明确提供甚至不提供电子邮件地址的服务 登录时默认。有时可以在Facebook上访问 仅适用于未选择隐藏它的用户。
Facebook一般不保证能够访问用户的电子邮件地址,而且通常无法提供。您需要使用Facebook ID作为唯一标识符,如果您没有收到电子邮件,则需要让用户将其提供给您。