我正在实施facebook登录,但我想将一些数据带到另一个注册活动,我需要用户的国家,城市,州(所有)。我研究过但仍然无法理解如何提供这些数据。
以下是我正在使用的代码:
private void facebookLogin() {
mAuth = FirebaseAuth.getInstance();
mCallbackManager = CallbackManager.Factory.create();
//Login com facebook arrumar um lugar melhor e mais organizado..
facebook.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.d(TAG, "facebook:onSuccess:" + loginResult);
GraphRequest graphRequest = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
Log.d("JSON", "" + response.getJSONObject().toString());
try {
nome = object.optString("first_name");
sobrenome = object.optString("last_name");
email = object.optString("email");
aniversario = object.optString("user_birthday");
idFB = object.optString("id");
sexo = object.getString("gender");
paisLogin = object.getJSONObject("location").getString("country"); //????????????
cidade = object.getJSONObject("location").getString("city"); //?????????????????
SaveSharedPreferences.setIdFacebook(getContext(),idFB);
} catch (JSONException e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields","id,first_name,last_name,email,location,gender");
graphRequest.setParameters(parameters);
graphRequest.executeAsync();
AuthCredential credential = FacebookAuthProvider.getCredential(loginResult.getAccessToken().getToken());
handleFacebookAccessToken(credential);
//handleFacebookAccessToken(loginResult.getAccessToken());
}
@Override
public void onCancel() {
Log.d(TAG, "facebook:onCancel");
// ...
}
@Override
public void onError(FacebookException error) {
Log.d(TAG, "facebook:onError", error);
// ...
}
});
如何获取此数据?
答案 0 :(得分:0)
这对我有用(参见方法getLocationUser(locationID)):
private void facebookLogin() {
mAuth = FirebaseAuth.getInstance();
mCallbackManager = CallbackManager.Factory.create();
//Login com facebook arrumar um lugar melhor e mais organizado..
facebook.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.d(TAG, "facebook:onSuccess:" + loginResult);
GraphRequest graphRequest = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
Log.d("JSON", "" + response.getJSONObject().toString());
try {
nome = object.optString("first_name");
sobrenome = object.optString("last_name");
email = object.optString("email");
aniversario = object.optString("user_birthday");
idFB = object.optString("id");
sexo = object.getString("gender");
locationID = object.getJSONObject("location").getString("id");
getLocationUser(locationID); <<<<-----
SaveSharedPreferences.setIdFacebook(getContext(),idFB);
} catch (JSONException e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields","id,first_name,last_name,email,location,gender");
graphRequest.setParameters(parameters);
graphRequest.executeAsync();
AuthCredential credential = FacebookAuthProvider.getCredential(loginResult.getAccessToken().getToken());
handleFacebookAccessToken(credential);
//handleFacebookAccessToken(loginResult.getAccessToken());
}
@Override
public void onCancel() {
Log.d(TAG, "facebook:onCancel");
// ...
}
@Override
public void onError(FacebookException error) {
Log.d(TAG, "facebook:onError", error);
// ...
}
});
}
private void getLocationUser(String id) {
Bundle params = new Bundle();
params.putString("location", "id");
new GraphRequest(
AccessToken.getCurrentAccessToken(),
id+"/?fields=location",
params,
HttpMethod.GET,
new GraphRequest.Callback() {
public void onCompleted(GraphResponse response) {
Log.e("Response 2", response + "");
try {
paisLogin = (String) response.getJSONObject().getJSONObject("location").get("country");
cidade = (String) response.getJSONObject().getJSONObject("location").get("city");
UF = (String) response.getJSONObject().getJSONObject("location").get("state");
Log.e("Location", paisLogin);
} catch (Exception e) {
e.printStackTrace();
}
}
}
).executeAsync();
}