2017-02-15 2 views
0

Ich habe ein Problem mit dem Zugriff auf Daten wie E-Mail und Geburtsdatum. Es scheint mir, dass es so etwas wie ein Zeichen ist, aber ich bin auf der Suche nach Informationen, und ich kann nicht sehen, was los on.Maybe jemand einen Fehler oder traf sich mit etwas ähnlichesFacebook SDK Ich habe nur Zugriff auf öffentliche Daten

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

Antwort

1

Versuchen feststellen, fügt hinzu:

loginButton.setReadPermissions("email"); 

Nachdem Sie den Login-Button aktiviert haben.

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

+0

Werfen Sie auch einen Blick auf https://developers.facebook.com/docs/facebook-login/permissions/overview: „Wenn Ihre App für mehr fragt als als public_profile, E-Mail und user_friends wird eine Überprüfung durch Facebook erfordern, bevor Ihre App von anderen Personen als den Entwicklern der App verwendet werden kann. " –

+0

Das heißt, wenn Sie mehr Daten als die öffentliche anstelle der oben genannten benötigen, muss ich die 'loginButton.registerCallback (callbackManager, neue FacebookCallback ()'? Statt "LoginManager.getInstance(). RegisterCallback (CallbackManager, neue FacebookCallback () ' – programmerJavaPL

+1

wie Gavin Harris erwähnt, müssen Sie' LoginManager.getInstance() 'in' loginButton' und 'setReadPermissions' ändern, zB' loginButton.setReadPermissions (Arrays.asList ("public_profile", "email", "user_birthday", "user_friends")); ' –

Verwandte Themen