0

My Facebook Войти активность, если это поможет:Facebook Профиль GetName() на Android всегда возвращаются нулевой

public class LoginActivity extends AppCompatActivity { 
    private LoginButton loginButton; 
    private CallbackManager callbackManager; 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     callbackManager.onActivityResult(requestCode, resultCode, data); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
     callbackManager = CallbackManager.Factory.create(); 
     setContentView(R.layout.activity_login); 
     loginButton = (LoginButton) findViewById(R.id.login_button); 
     loginButton.setReadPermissions("public_profile", "user_friends"); 
     final Intent myIntent = new Intent(this, MapsActivity.class); 
     if (isLoggedIn()) { 
      startActivity(myIntent); 
      finish(); 
      return; 
     } 
     loginButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(final View v) { 
       // Callback registration 
       loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
        @Override 
        public void onSuccess(LoginResult loginResult) { 
         LoginManager.getInstance().logInWithReadPermissions(LoginActivity.this, Arrays.asList("public_profile", "user_friends")); 
         startActivity(myIntent); 
         finish(); 
        } 

        @Override 
        public void onCancel() { 
        } 

        @Override 
        public void onError(FacebookException exception) { 
        } 
       }); 
      } 
     }); 

    } 

    private boolean isLoggedIn() { 
     AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
     return accessToken != null; 
    } 
} 

и код, я использую, чтобы попытаться получить чье-то имя от их ID:

new Profile(creatorId, null, null, null, null, null).getFirstName() 

Я попробовал вызов getFirstName(), показанный здесь, в дополнение к getName(), и оба всегда возвращают null. Я думал, что наличие «public_profile» в моих запрошенных разрешениях Facebook позволит мне получить чье-то имя таким образом, если они разрешили мое приложение во время входа в систему через Facebook. Однако у меня не всегда было «public_profile» в моих запрошенных разрешениях на Facebook, но я заставил всех пользователей повторно войти через Facebook в мое приложение с этим текущим кодом и разрешениями, поэтому я решил, что это устранит эту проблему. Тем не менее, эта функция возвращает значение null, и я не уверен, почему.

Кроме того, creatorId может быть идентификатором FB другого пользователя, кроме текущего пользователя FB. (В прошлом они использовали авторизованное + приложение, а не только тот, кто в данный момент зарегистрировался на этом устройстве Android).

ответ

0

Таким образом, кажется, что необходим запрос графика, даже для информации общего профиля. Вот запрос Graph я использовал, чтобы получить первое имя определенного Facebook ID, creatorId:

GraphRequest request = GraphRequest.newGraphPathRequest(
      AccessToken.getCurrentAccessToken(), 
      creatorId, 
      new GraphRequest.Callback() { 
       @Override 
       public void onCompleted(GraphResponse response) { 
        try { 
         Log.e("creatorId's first name:", response.getJSONObject().getString("first_name")); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }); 
    Bundle params = new Bundle(); 
    params.putString("fields", "id,first_name"); 
    request.setParameters(params); 
    request.executeAsync(); 
0

Вы можете использовать этот код. пожалуйста, измените GraphRequest.GraphJSONObjectCallback интерфейс()

GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(),         
new GraphRequest.GraphJSONObjectCallback() { 

           @Override 
           public void onCompleted(JSONObject user, GraphResponse graphResponse) { 
            try { 
                        Log.e(TAG,"id"+user.optString("id"));            
             Log.e(TAG,"id"+user.optString("first_name")); 


            } catch (Exception e) { 
             e.printStackTrace(); 
            } 
           } 
          }); 
        Bundle parameters = new Bundle(); 
        parameters.putString("fields", "id,first_name"); 
        request.setParameters(parameters); 
        request.executeAsync();`