2017-02-15 3 views
0

У меня проблема с доступом к данным, таким как электронная почта и дата рождения. Мне кажется, что есть что-то знак, но я ищу информацию, и я не могу видеть, что происходит on.Maybe кто-то заметит ошибку или встречались с чем-то подобнымFacebook SDK У меня есть доступ к общественным данным

public class MainActivity extends AppCompatActivity { 

    TextView txtStatus; 
    LoginButton loginButton; 
    CallbackManager callbackManager; 
    public String email,id; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
     setContentView(R.layout.activity_main); 
     initializeControls(); 
     loginWithFB(); 

    } 

    private void initializeControls(){ 
     callbackManager = CallbackManager.Factory.create(); 
     txtStatus = (TextView)findViewById(R.id.txtStatus); 
     loginButton = (LoginButton)findViewById(R.id.login_button); 

    } 

    private void loginWithFB(){ 
     LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       Log.e("Success", "Login"); 
       Bundle parameters = new Bundle(); 
       parameters.putString("fields", "id, first_name, last_name ,email, gender, birthday"); 

       GraphRequest gr = 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 "+response.getError().toString()); 
           } else { 
            //System.out.println("Success"); 

            String jsonresult = String.valueOf(json); 
            System.out.println("JSON Result"+jsonresult); 
            String resp = String.valueOf(response.getJSONObject()); 
            System.out.println("JSON resp "+resp); 


           } 
          } 

         }); 
       gr.setParameters(parameters); 
       gr.executeAsync(); 

      } 

      @Override 
      public void onCancel() { 
       txtStatus.setText("Cancelled"); 
      } 

      @Override 
      public void onError(FacebookException error) { 
       txtStatus.setText("Error " + error.getMessage()); 
      } 
     }); 
    } 

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

ответ

1

Попробуйте добавить:

loginButton.setReadPermissions("email"); 

После того, как у вас есть кнопка входа в систему.

https://developers.facebook.com/docs/facebook-login/android#addbutton

+0

Также обратите внимание на https://developers.facebook.com/docs/facebook-login/permissions/overview: «Если ваше приложение запрашивает более чем public_profile, адрес электронной почты и user_friends будет требуют обзора Facebook, прежде чем ваше приложение может использоваться людьми, отличными от разработчиков приложений ». –

+0

Это означает, что, когда вам нужно больше данных, чем общедоступное, а не выше, я должен применить 'loginButton.registerCallback (callbackManager, новый FacebookCallback ()'? Вместо 'LoginManager.getInstance(). RegisterCallback (callbackManager, new FacebookCallback () ' – programmerJavaPL

+1

, как отметил Гевин Харрис, вам нужно изменить' LoginManager.getInstance() 'на' loginButton' и 'setReadPermissions', например' loginButton.setReadPermissions (Arrayys.asList («public_profile», «email», «user_birthday», «user_friends»)); ' –

Смежные вопросы