2013-03-22 14 views
9

Sto sviluppando un'applicazione in cui sto utilizzando il pulsante di accesso Facebook dall'SDK. Sono in grado di ottenere access_token dell'utente ma voglio anche userID. Ho provato quasi tutto ma non ha avuto successo. Ho usato il tutorial di Facebook per realizzarlo. Ecco il link: Facebook Login ButtonCome ottenere l'ID utente FB utilizzando il pulsante di accesso di Facebook nell'applicazione Android

Per favore aiutami a ottenere userID dallo stesso pulsante di accesso.

Qualsiasi tipo di aiuto sarà apprezzato.

risposta

4

Dopo il login riuscito, è necessario chiamare il seguente codice. È possibile ottenere i dati utente registrati con ID in risposta.

Session session = Session.getActiveSession(); 
Request request = Request.newGraphPathRequest(session, "me", null); 
com.facebook.Response response = Request.executeAndWait(request) 
+1

Ancora più semplice, la classe Request ha un metodo helper newMeRequest: https://developers.facebook.com/docs/reference/android/3.0/Request#newMeRequest%28Session,%20GraphUserCallback% 29 –

2

L'API del grafico di Facebook consente di effettuare chiamate che restituiscono JSON, che è possibile analizzare in Android con un JSONObject simile al seguente codice.

JSONObject me = new JSONObject(fb.request("me")); 
String id = me.getString("id"); 
+0

#RajaReddy PolamReddy: come hai definito il 'fb' variabili? E ti riferisci all'SDK 3.0 (o 2.0 con la deprecata classe Facebook)? – PeteH

+0

è un vecchio sdk di Facebook. quella volta ha lezione di Facebook nel sdk facebook –

4

Si dovrebbe essere usato nuovo facebook SDK 3.0 e

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); 
     if (Session.getActiveSession().isOpened()) { 
      // Request user data and show the results 
      Request.executeMeRequestAsync(Session.getActiveSession(), new Request.GraphUserCallback() { 

       @Override 
       public void onCompleted(GraphUser user, Response response) { 
        // TODO Auto-generated method stub 
        if (user != null) { 
         // Display the parsed user info 
         Log.v(TAG, "Response : " + response); 
         Log.v(TAG, "UserID : " + user.getId()); 
         Log.v(TAG, "User FirstName : " + user.getFirstName()); 

        } 
       } 

      }); 
     } 
    } 
+0

dove avvieremo l'attività? Hai condiviso ciò che dovremmo fare alla fine, ma potresti per favore mostrarmi da dove iniziare l'intento? – alicanbatur

+0

'executeMeRequestAsync' è deprecato. Usa 'newMeRequest' invece – Muzikant

3

Sulla base di risposta da @Ketan Mehta (https://stackoverflow.com/a/17397931/624109) che utilizza un API deprecato, è necessario utilizzare il seguente codice:

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

    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); 

    if (Session.getActiveSession().isOpened()) 
    { 
     // Request user data and show the results 
     Request.newMeRequest(Session.getActiveSession(), new GraphUserCallback() 
     { 
      @Override 
      public void onCompleted(GraphUser user, Response response) 
      { 
       if (null != user) 
       { 
        // Display the parsed user info 
        Log.v(TAG, "Response : " + response); 
        Log.v(TAG, "UserID : " + user.getId()); 
        Log.v(TAG, "User FirstName : " + user.getFirstName()); 

       } 
      } 
     }).executeAsync(); 
    } 
} 
11

Utilizzare il metodo getId della classe Profilo FB (Facebook SDK 4.0).

Profile profile = Profile.getCurrentProfile(); 
    System.out.println(profile.getFirstName()); 
    System.out.println(profile.getId()); 
+2

Questo è il modo giusto in FB SDK 4.0 –

3

Poiché queste tutte le risposte sono per SDK più anziani, per SDK 4,0 Ecco il codice

loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      // App code 
      Profile profile = Profile.getCurrentProfile(); 

      Log.d("facebook",profile.getId()); 
     } 

     @Override 
     public void onCancel() { 
      // App code 
      Log.d("facebook","failed"); 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      // App code 
      Log.d("facebook","failed"); 
     } 
    }); 

ero alla ricerca per la stessa cosa sembra l'oggetto Session non è più accessibile in modo sopra è il nuovo modo di ottenere profilo utente e ID utente.

1

È possibile ottenere l'ID utente con questo codice:

document.getElementById('status').innerHTML = 
    'Welcome ' + response.name + '!' + "<br />"+ 
    'Your user ID is : ' + response.id; 
7
loginResult.getAccessToken().getUserId() 
+0

per qualche ragione' Profilo profilo = Profile.getCurrentProfile(); 'e' profile.getUserId() 'non funziona con sdk corrente. Quindi, questa è la migliore soluzione al momento. –

Problemi correlati