2015-04-12 15 views
11

Próbuję uzyskać adres e-mail użytkownika, gdy jest zalogowany do mojej aplikacji na Androida z Facebookiem (sdk 4.0). Czytałem wiele postów pytających o to samo, ale nadal nie mogłem tego zrobić. Ja po prostu zalogować się użytkownikowi z kodemJak uzyskać adres e-mail zalogowanego użytkownika za pomocą żądania wykresu na Facebooku Android sdk 4.0

LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends", "email")); 

Potem dokonać API wniosek wykres z

LoginManager.getInstance().registerCallback(fbCallbackManager, 
      new FacebookCallback<LoginResult>() { 
       @Override 
       public void onSuccess(LoginResult loginResult) { 
        System.out.println(loginResult.getAccessToken().toString()); 

        GraphRequest request = GraphRequest.newMeRequest(
          loginResult.getAccessToken(), 
          new GraphRequest.GraphJSONObjectCallback() { 
           @Override 
           public void onCompleted(
             JSONObject object, 
             GraphResponse response) { 
            System.out.println(object.toString()); 

           } 
          }); 
        Bundle parameters = new Bundle(); 
        parameters.putString("fields", "email"); 
        request.setParameters(parameters); 
        request.executeAsync(); 
       } 

       @Override 
       public void onCancel() { 
        // App code 
       } 

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

wyjście jest tylko

{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[public_profile, contact_email, user_friends, email, basic_info]} 
{"id":"xxxxxxxxxxxxxxx"} 

Nawet jeśli usunąć „pola” część, dostaję JSON z grupą publicznych informacji o użytkowniku, ale nigdy w polu adresu e-mail. Testuję to na moim własnym koncie na Facebooku i mam przypisany do niego adres e-mail.

+0

czy znalazłeś odpowiedź na swoje pytanie? Jeśli tak, proszę zamieścić tutaj jako odpowiedź. –

+0

Właściwie kod w ur pytanie pracował dla mnie przede wszystkich odpowiedzi poniżej, dzięki człowieku –

Odpowiedz

11

można uzyskać zalogowany e-mail użytkownika w następujący sposób: Należy jednak pamiętać, że

  1. Oni nie gwarantuje otrzymasz adres e-mail read here.

  2. W niektórych przypadkach, mimo że użytkownik dostarczył wiadomość e-mail, nie zostanie wysłany przez żądanie, jeśli wiadomość e-mail nie jest prawidłowa.

    @Override 
    public void onSuccess(LoginResult loginResult) { 
    
    
    GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), 
         new GraphRequest.GraphJSONObjectCallback() { 
          @Override 
          public void onCompleted(JSONObject object,GraphResponse response) { 
          try { 
           String email=object.getString("email"); 
           Log.d(TAG + "user email ", email); 
           } catch (JSONException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
           } 
    
          } 
    
          }); 
    
          request.executeAsync();       
    } 
    
+1

Pan pRaNay, dziękuję za montaż, docenić, że –

11

Oto kompletny kod, przez które ja dostać wszystkie potrzebne dane z Facebook

login_facebook_button = (LoginButton) findViewById(R.id.login_facebook_button); 
    login_facebook_button.setReadPermissions(Arrays.asList("public_profile", "user_friends", "email", "user_birthday")); 
    //LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends")); 
    // Callback registration 
    login_facebook_button.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      // App code 
      Log.e("onSuccess", "--------" + loginResult.getAccessToken()); 
      Log.e("Token", "--------" + loginResult.getAccessToken().getToken()); 
      Log.e("Permision", "--------" + loginResult.getRecentlyGrantedPermissions()); 
      Profile profile = Profile.getCurrentProfile(); 
      Log.e("ProfileDataNameF", "--" + profile.getFirstName()); 
      Log.e("ProfileDataNameL", "--" + profile.getLastName()); 

      Log.e("Image URI", "--" + profile.getLinkUri()); 

      Log.e("OnGraph", "------------------------"); 
      GraphRequest request = GraphRequest.newMeRequest(
        loginResult.getAccessToken(), 
        new GraphRequest.GraphJSONObjectCallback() { 
         @Override 
         public void onCompleted(
           JSONObject object, 
           GraphResponse response) { 
          // Application code 
          Log.e("GraphResponse", "-------------" + response.toString()); 
         } 
        }); 
      Bundle parameters = new Bundle(); 
      parameters.putString("fields", "id,name,link,gender,birthday,email"); 
      request.setParameters(parameters); 
      request.executeAsync(); 

     } 

     @Override 
     public void onCancel() { 
      // App code 
     } 

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

i odpowiedź na wezwanie w dzienniku jest:

{Response: responseCode: 200, graphObject: {"id":"896337040431723","name":"Aneh Thakur","link":"https:\/\/www.facebook.com\/app_scoped_user_id\/896337040431723\/","gender":"male","birthday":"08\/05\/1992","email":"[email protected]"}, error: null} 

Mam nadzieję, że to ci pomoże.

+1

Dzięki, to jest jedyne rozwiązanie, które działało w moim przypadku. – Lucia

+0

Dzięki stary .. pomógł mi też :) –

+0

Zobacz wszystkie parametry tutaj https://developers.facebook.com/docs/graph-api/reference/v2.6/user –

0
fbLoginButton.setReadPermissions("public_profile", "user_friends", "user_photos", "email", "user_birthday", "public_profile", "contact_email"); 

"contact_email" jest pozwolenie email, brakowało mi, że kiedy dodaje się je do mam rzeczy pracy.

Powiązane problemy