31 votes

Comment éviter déjà autorisé dans le SDK Android Facebook

Je suis parfaitement inutile de page lorsque j'utilise la connexion Unique pour Facebook Android SDK.

"Vous avez déjà autorisé happyapp. Appuyez sur "Ok" pour continuer.

Cette page détruirait l'expérience de l'utilisateur. Comment diable puis-je me débarrasser de lui. Beaucoup de gens ont été voir, mais aucune solution n'est affiché.

Même Facebook admet que c'est un problème, voir: http://forum.developers.facebook.net/viewtopic.php?id=84548

Personne ne sait tout le travail autour?

11voto

PTG Points 811

Je l'ai fait (sans autres OAuth solution) a été à la boutique à l'extérieur de l'jeton d'accès dans les préférences comme Kieveli suggéré. Lorsque le début de l'activité, de rechercher le jeton à partir des préférences, si il n'y est pas d'initier le processus d'autorisation et de stocker le jeton dans les préférences.

La partie la plus difficile est de gérer le jeton de l'expiration ou de l'autorisation de votre application (ie. le jeton est dans les préférences, mais n'est plus valide).

Pour ce cas, avec tous les FB API/graphe d'invocation, vérifier une exception indiquant l'échec de l'authentification. Si elle échoue, lancer l'autorisation/jeton de stockage de la procédure à nouveau.

5voto

max4ever Points 2420

U

b

SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(FacebookLogin.this); 
                        String access_token = prefs.getString("access_token", null); 
                        Long expires = prefs.getLong("access_expires", -1);

                        if (access_token != null && expires != -1)
                        {
                            facebook.setAccessToken(access_token);
                            facebook.setAccessExpires(expires);
                        }

                        if (!facebook.isSessionValid())
                        {
                            facebook.authorize(FacebookLogin.this, new DialogListener() {
...

a

String token = facebook.getAccessToken();
long token_expires = facebook.getAccessExpires();

SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(FacebookLogin.this);

prefs.edit().putLong("access_expires", token_expires).commit();

prefs.edit().putString("access_token", token).commit();

1voto

Bill Mote Points 4926

I

Button button_facebook = (Button) findViewById(R.id.button_share_on_facebook);
button_facebook.setOnClickListener(new View.OnClickListener() {
    public void onClick(View arg0) {
        if (access_token != null) {
            facebook.setAccessToken(access_token);
        }

        if (expires != 0) {
            facebook.setAccessExpires(expires);
        }

        if (!facebook.isSessionValid()) {
            facebook.authorize(YourActivity.this, new String[] { "user_photos,publish_checkins,publish_actions,publish_stream" }, facebook.FORCE_DIALOG_AUTH, new DialogListener() {
                @Override
                public void onComplete(Bundle values) {
                    SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
                    SharedPreferences.Editor editor = mPrefs.edit();
                    editor.putString("access_token", facebook.getAccessToken());
                    editor.putLong("access_expires", facebook.getAccessExpires());
                    editor.commit();
                    postSomethingToFacebook();
                }

                @Override
                public void onFacebookError(FacebookError e) {
                    Log.e("Facebook-Authorize", "FacebookError Error: " + e.getMessage());
                }

                @Override
                public void onError(DialogError e) {
                    Log.e("Facebook-Authorize", "DialogError Error: "   + e.getMessage());
                }

                @Override
                public void onCancel() {
                    Log.w("Facebook-Authorize", "Cancelled.");
                }
            });
        } else {
            postSomethingToFacebook();
        }
});

0voto

Kieveli Points 7162

Contournez le SDK et utilisez votre propre solution OAuth. Enregistrez le jeton d'accès une fois acquis. Essayez de l'utiliser directement sans envoyer l'utilisateur à la page d'autorisation Facebook. Une fois le jeton expiré, vous en aurez besoin pour accorder à nouveau l'autorisation. Avec des fonctionnalités avancées vient des responsabilités de niveau inférieur (et plus de travail).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X