2013-07-12 2 views
12

Ich integrierte Facebook Login in meiner Android-Anwendung. Ich möchte die E-Mail-ID des angemeldeten Benutzers erhalten. Wie werde ich es bekommen?Wie bekomme ich die E-Mail-ID von Facebook sdk in Android-Anwendungen?

private void loginToFacebook() { 
    Session.openActiveSession(this, true, new Session.StatusCallback() { 

     @Override 
     public void call(Session session, SessionState state, Exception exception) { 
      if (session.isOpened()) { 
       Log.i(TAG, "Access Token" + session.getAccessToken()); 
       Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { 
        @Override 
        public void onCompleted(GraphUser user, Response response) { 
         if (user != null) { 
          try { 

           userID =user.getId(); 
           provider="facebook"; 
           userName=user.getUsername(); 
           firstName=user.getFirstName(); 
           lastName=user.getLastName(); 
           Log.d("****User****", "details:" + user); 
           }catch(Exception e){ 

Hier ist mein Code. Ich benutze Request.GraphUserCallback() Methode, aber es gibt keine Antwort von E-Mail von dieser Methode.

Antwort

34

Bevor Session.openActiveSession diese Aufruf tun, um diese Berechtigungen hinzufügen zu erhalten:

in Session.openActiveSession()
List<String> permissions = new ArrayList<String>(); 
permissions.add("email"); 

Der letzte Parameter sollte permissions sein. Jetzt können Sie auf user.getProperty("email").toString() zugreifen.

EDIT:

Dies ist die Art, wie ich Facebook Genehmigung tue:

List<String> permissions = new ArrayList<String>(); 
permissions.add("email"); 

loginProgress.setVisibility(View.VISIBLE); 

//start Facebook session 
openActiveSession(this, true, new Session.StatusCallback() { 
    @Override 
    public void call(Session session, SessionState state, Exception exception) { 
     if (session.isOpened()) { 
      //make request to the /me API 
      Log.e("sessionopened", "true"); 
      Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { 
       @Override 
       public void onCompleted(GraphUser user, Response response) { 
        if (user != null) { 
         String firstName = user.getFirstName(); 
         String lastName = user.getLastName(); 
         String id = user.getId(); 
         String email = user.getProperty("email").toString(); 

         Log.e("facebookid", id); 
         Log.e("firstName", firstName); 
         Log.e("lastName", lastName); 
         Log.e("email", email); 
        } 
       } 
      }); 
     } 
    } 
}, permissions); 

diese Methode, um Ihre Aktivität hinzufügen:

private static Session openActiveSession(Activity activity, boolean allowLoginUI, Session.StatusCallback callback, List<String> permissions) { 
    Session.OpenRequest openRequest = new Session.OpenRequest(activity).setPermissions(permissions).setCallback(callback); 
    Session session = new Session.Builder(activity).build(); 
    if (SessionState.CREATED_TOKEN_LOADED.equals(session.getState()) || allowLoginUI) { 
     Session.setActiveSession(session); 
     session.openForRead(openRequest); 
     return session; 
    } 
    return null; 
} 
+0

funktioniert nicht in logcat ich bekomme null Zeiger Ausnahme – user2541633

+0

Zeigen Sie uns Ihren Code und die genaue Zeile, die NullPointerException verursacht, so können wir Sie. –

+0

Die Methode openActiveSession (Activity, boolean, Session.StatusCallback) in der Typ Sitzung ist nicht anwendbar für die Argumente (Login, Boolean, neue Session.StatusCallback() {}, Liste ) Dies ist der Fehler in Eclipse – user2541633

-1

Versuchen Sie diesen Artikel. Hoffe, dass Ihre Probleme gelöst werden Click Here

Btw, müssen Sie user.asMap().get("email").toString()); für das Empfangen der Benutzer-E-Mail-ID verwenden. Auch müssen Sie das in einige der Label wie lblEmail.setText zuweisen, wo LblEmail eine Textansicht ist.

+0

ich benutzte einfachen android Knopf. so wie ich dort die Erlaubnis geben kann. Jetzt muss ich nur die Erlaubnis für die E-Mail geben. Aber wie kann ich Erlaubnis geben und wo? – user2541633

+1

@ user2541633 'LoginButton authButton = (LoginButton) findViewById (R.id.authButton); authButton.setOnErrorListener (new OnErrorListener() { authButton.setReadPermissions (Arrays.asList ("basic_info", "email")); ' –

+0

Diese Sache funktioniert auf Emulator, aber wenn ich meine App auf dem Handy installiert hat, ist es auf Facebook Android App gerichtet aber gab mir keine Antwort – user2541633

3

Anregung von Egor N Folgen, die ich ändern mein alter Code

Session.openActiveSession(this, true, statusCallback); 

whith diese neuen:

List<String> permissions = new ArrayList<String>(); 
permissions.add("email"); 
Session.openActiveSession(this, true, permissions, statusCallback); 

Jetzt FB die Benutzer über die Genehmigung der E-Mail fragen, und ich es in der Antwort lesen.

Verwandte Themen