web-dev-qa-db-fra.com

Android: Facebook reçoit le "Jeton d'accès utilisateur", après une connexion réussie

J'ai participé à un projet de connexion via le dernier SDK de Facebook, à savoir 3.0. J'obtiens un moment difficile pour obtenir un jeton d'accès utilisateur. J'ai cherché sur Internet et tous, les résultats maximum utilisaient l'ancien SDK. Voici quelques extraits de code que j'ai extraits de Facebook Android SDK Tutorial :

public class LoginActivity extends Activity implements OnClickListener {

Button login;
TextView accessToken;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    login = (Button) findViewById(R.id.login);
    accessToken = (TextView) findViewById(R.id.accessToken);

    login.setOnClickListener(this);

}

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

@Override
public void onClick(View v) {
    // start Facebook Login
    Session.openActiveSession(this, true, new Session.StatusCallback() {

        // callback when session changes state
        @Override
        public void call(Session session, SessionState state,
                Exception exception) {
            if (session.isOpened()) {

                // make request to the /me API
                Request.executeMeRequestAsync(session,
                        new Request.GraphUserCallback() {

                            // callback after Graph API response with user
                            // object
                            @Override
                            public void onCompleted(GraphUser user,
                                    Response response) {
                                if (user != null) {
                                    TextView welcome = (TextView) findViewById(R.id.welcome);
                                    welcome.setText("Hello "
                                            + user.getName() + "!");
                                }
                            }
                        });
            }
        }
    });

}

}

La connexion a réussi et je peux voir le nom d'utilisateur dans l'application, comme suggéré par le tutoriel Facbeook.

J'ai essayé d'anciennes méthodes, mais celles-ci sont maintenant obsolètes. Veuillez me guider pour obtenir un jeton d’accès utilisateur. L'aide sera appréciée.

Merci. 

16
Anupam

Dans la méthode onResume (), ajoutez le code suivant (dans ce cas, j'ai utilisé Toast.makeText pour voir l'accès au jeton après la connexion):

    Session session = Session.getActiveSession();
    if (session.isOpened()) {
        Toast.makeText(getActivity(), session.getAccessToken(), Toast.LENGTH_LONG).show();
    }

J'ai utilisé getActivity parce que c'est dans un fragment dans mon cas, si vous avez votre bouton de connexion dans une activité, utilisez "this" au lieu de "getActivity ()"

40
Erick Reátegui Diaz

Remarque: la classe de session est supprimée dans le nouveau sdk de Facebook

Après Facebook SDK version 4.X, vous devriez utiliser ce qui suit:

AccessToken token = AccessToken.getCurrentAccessToken();
if (token != null) {
    Toast.makeText(getActivity(), token, Toast.LENGTH_LONG).show();
}

Changer la référence du journal est ici.

Migrer la référence de Sdk 3.x à 4.x

32
abhilvare

Je suis nouveau dans Android ..
J'utilise le code ci-dessus uniquement pour obtenir le jeton.

Pour Facebook SDK 4.21.0
compiler 'com.facebook.Android:facebook-Android-sdk:4.21.0'

FacebookSdk.setIsDebugEnabled(true);              
FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);

AccessToken token = AccessToken.getCurrentAccessToken();
Log.d("access only Token is", String.valueOf(token.getToken()));
String facebook_id_token = String.valueOf(token.getToken());
4
Sujeet Kumar

Pour obtenir le accessToken pour facebook-sdk 4. * ou supérieur . Ajoutez ces lignes après facebookSDKInitialize ()

FacebookSdk.setIsDebugEnabled(true);
FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKEN);

Après cela, utilisez ces lignes de codes,

AccessToken token = AccessToken.getCurrentAccessToken();
Log.d("Access Token is",token);

Échantillon:

 GraphRequestAsyncTask graphRequestAsyncTask = new GraphRequest(
    login_result.getAccessToken(),
    //AccessToken.getCurrentAccessToken(),
    "/me/friends",
    bundle,
    HttpMethod.GET,
    new GraphRequest.Callback() {
    public void onCompleted(GraphResponse response) {
    try {
    JSONArray rawName = response.getJSONObject().getJSONArray("data");
    Log.d("rawName friendList",String.valueOf(rawName));
    AccessToken token = AccessToken.getCurrentAccessToken();
    Log.d("access token is: ",String.valueOf(token));
    } catch (JSONException e) {
    e.printStackTrace();
    }
    }
    }
).executeAsync();
3
Mukul Aggarwal

Le code ci-dessous est mis à jour:

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

    /** This block obtains Facebook UserID and Token */
    AccessToken token = AccessToken.getCurrentAccessToken();
    if (token != null) {
        Toast.makeText(this, token.toString(), Toast.LENGTH_SHORT).show();
        Log.e(TAG, "Token: " + token.getToken());
        Log.e(TAG, "UserID: " + token.getUserId());
    }
    /***/
}
0
Marcelo Gumiero