android - 无法使用 android 中的 facebook 登录将 facebook 电子邮件的值发送到服务器
问题描述
我正在尝试在我的应用程序中进行 facebook 登录,但我无法将 facebook 电子邮件的值发送到应用程序服务器。当我在 onCompleted 中调试应用程序时,我可以看到 Facebook 电子邮件,但是当我传递该值时,它显示 null.fb_login 是一个 ImageButton,它不是一个 facebooklogin 按钮。
这是我的代码:-
fb_login.setOnClickListener(v -> {
if (internetDetector.hasConnectivity()) {
flag = 1;
onFblogin();
}
else {
Toast.makeText(LoginActivity.this,"Please Check Your Internet Connection",Toast.LENGTH_LONG).show();
}
});
下面是 onfbLogin 方法,我在其中发出图形请求并尝试将电子邮件、id、名称保存到全局变量中。
private void onFblogin() {
callbackManager = CallbackManager.Factory.create();
// Set permissions
fbLoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList( "email", "public_profile"));
fbLoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
System.out.println("Success");
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject json, GraphResponse response) {
if (response.getError() != null) {
// handle error
System.out.println("ERROR");
} else {
System.out.println("Success");
try {
String jsonresult = String.valueOf(json);
System.out.println("JSON Result"+jsonresult);
facebookName = json.getString("name");
facebookEmail = json.getString("email");
facebookid = json.getString("id");
} catch (JSONException e) {
e.printStackTrace();
}
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
Log.d("facebook Login","On cancel");
}
@Override
public void onError(FacebookException error) {
Log.d("facebook Login",error.toString());
}
});
return;
}
在此之后我有 onActivityResult 方法。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
// The Task returned from this call is always completed, no need to attach
// a listener.
Task<GoogleSignInAccount> completedTask = GoogleSignIn.getSignedInAccountFromIntent(data);
handleSignInResult(completedTask);
}
else {
callbackManager.onActivityResult(requestCode, resultCode, data);
postDataToServer();
}
}
在 postDataToServer() 方法中,我试图获取 facebookEmail 的值,但我在那里得到了 null。也许我做错了。请指导我,以便我可以进行更改并获取变量的值。