如何在facebook登录Android用户的国家?

时间:2017-08-01 14:49:57

标签: android facebook

我正在实施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);
            // ...
        }
    });

如何获取此数据?

1 个答案:

答案 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();
}