2017-08-01 85 views
0

我正在实施Facebook登录,但我想将一些数据提交给另一个注册活动,我需要用户的国家,城市,州(全部)。我研究过但仍不明白如何提供这些数据。我怎样才能得到用户的国家在Facebook登录为Android?

这里是代码我使用:

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

'user_location'不'location' – jagapathi

+0

我想城市,州,国家。 User_location不会给我这些数据。 –

回答

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