Codename one Facebook登录电子邮件=空
我已经通过FacebookConnect成功登录了facebook。然后我尝试提取用户的姓名和电子邮件地址。我设法得到他们的名字,但他们的电子邮件地址是空白的。我用我的Facebook账号试过了,我把我的电子邮件地址设置为公开的。我还添加了ios.facebook_permissons=“email”、“public_profile”、“user_birth”和android的权限。这是我的密码 登录Codename one Facebook登录电子邮件=空,facebook,email,facebook-graph-api,codenameone,Facebook,Email,Facebook Graph Api,Codenameone,我已经通过FacebookConnect成功登录了facebook。然后我尝试提取用户的姓名和电子邮件地址。我设法得到他们的名字,但他们的电子邮件地址是空白的。我用我的Facebook账号试过了,我把我的电子邮件地址设置为公开的。我还添加了ios.facebook_permissons=“email”、“public_profile”、“user_birth”和android的权限。这是我的密码 登录 public void facebookLogin() { final Login f
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);
}
}
公共类FacebookData实现UserData{
字符串名称,电子邮件;
公共字符串getName(){
返回名称;
}
公共字符串getEmail(){
回复邮件;
}
公共void fetchData(字符串标记,最终可运行回调){
ConnectionRequest req=新的ConnectionRequest(){
@凌驾
受保护的void readResponse(InputStream输入)引发IOException{
JSONParser=新的JSONParser();
Map parsed=parser.parseJSON(新的InputStreamReader(输入,“UTF-8”));
name=(字符串)已解析。get(“name”);
email=(字符串)已解析。获取(“email”);
}
@凌驾
受保护的void postResponse(){
callback.run();
}
@凌驾
受保护的无效handleErrorResponseCode(整数代码、字符串消息){
}
};
请求setPost(错误);
请求设置URL(“https://graph.facebook.com/v2.4/me");
请求AddArgumentNoEncode(“访问令牌”,令牌);
NetworkManager.getInstance().addToQueue(req);
}
}
来自
当您处理自己的用户列表时,用户通过
注册后,您通常可以向该用户询问任何问题。但是,什么时候?
用户通过Facebook、Google或任何其他服务登录,然后您
用户详细信息由该服务决定… 这是痛苦的
清除那些甚至不提供电子邮件地址的服务
登录时的默认设置。它有时可以在Facebook上访问,但是
仅适用于未选择隐藏它的用户
一般来说,Facebook不保证访问用户的电子邮件地址,而且通常不提供。你需要使用Facebook id作为唯一标识符,如果你没有收到电子邮件,你需要要求用户将其发送给你。那么我的代码没有问题吗?代码主要用于模拟器,而不是通过构建提示指定权限和要求的设备。你好,shai,我如何向用户申请获取电子邮件id的权限。我有上面的确切代码和相同的电子邮件问题。在facebook Api浏览器中,“这个url也提供电子邮件id,但如果我在android设备上使用它,id、姓名和电子邮件都是空的。我在聊天教程的facebook集成部分讨论了这一点。电子邮件在facebook中可以为空,据我所知,我们对此无能为力。@cbroe这是一个代号问题,不是javascript问题…@ShaiAlmog这是一个一般API版本问题,不取决于您使用的特定语言或SDK。副本包含对一般问题的解释;在使用特定SDK时如何询问字段是开发人员在这些更改中一直沉睡到现在的事情,现在至少可以自己去查阅相关文档了。