web-dev-qa-db-fra.com

La connexion Facebook Android ne fonctionne pas avec l'application Facebook installée

J'ai mis en place un simple login facebook. Pour Android 2.3.6, tout fonctionne normalement, l'utilisateur obtient une boîte de dialogue de connexion rapide, entre les données et l'application continue. Je pensais que c’était la faute des versions Android, mais il est évident que la connexion ne fonctionne pas quand une application facebook est installée sur le téléphone!

Testé sur: Galaxy Ace 2.3.6 HTC Desire 4.1.2 Galaxy Note 4.1.2 Émulateur Android 4.1.2

Même les échantillons de facebook ne fonctionnent pas!

À chaque exécution de l'application - else { Log.d("SESSION NOT OPENED", "SESSION NOT OPENED"); }

Il semble que la session ne soit pas ouverte mais pourquoi? Suivez ce guide - https://developers.facebook.com/docs/getting-started/facebook-sdk-for-Android/3.0/

Code:

Session.openActiveSession(this, true, new Session.StatusCallback() {

        @Override
        public void call(final Session session, SessionState state, Exception exception) {

            if (session.isOpened()) {

                Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {

                    @Override
                    public void onCompleted(GraphUser user, Response response) {
                        if (user != null) {
                            Log.d("Access_token", session.getAccessToken());
                        }
                    }
                });
            } else {
                Log.d("SESSION NOT OPENED", "SESSION NOT OPENED");
            }
        }
    });
12
Karlis

Découvrez le bas de l'étape 4: https://developers.facebook.com/docs/getting-started/facebook-sdk-for-Android/3.0/

Si vous n'avez pas saisi correctement le hachage de la clé de votre application, la connexion Facebook via la fenêtre contextuelle WebView (si l'application n'est pas installée) fonctionnera toujours, mais la connexion via l'application native Facebook ne fonctionnera pas.

Vous devriez voir cette exception dans LogCat:

com.facebook.http.protocol.ApiException: remote_app_id does not match stored id

Le SDK de Facebook imprime ses exceptions, alors vérifiez quand même s'il y a d'autres problèmes.

5
antonyt

j'écris cette réponse pour ceux qui utilisent Facebook SDK 4.X

vous pouvez ouvrir le portail de connexion de facebook de l'une des deux manières suivantes:

  1. si vous avez un appareil Android avec Android 1.9.X et Facebook App est installé dans l'appareil appelé Native Login Méthode ici, vous n'avez pas besoin d'utiliser facebook WebView

  2. si vous n'avez pas installé Facebook App sur votre appareil Android, il est conseillé d'utiliser WebView

donc pour cette page Facebook, fournissez 3 Constants

  1. NATIVE_ONLY (utilisé lorsque vous souhaitez ouvrir l'application Facebook uniquement)
  2. WEB_ONLY (utilisé lorsque vous voulez ouvrir dans WebView uniquement)
  3. NATIVE_WITH_FALLBACK (recommandé par Facebook pour détecter et ouvrir webView si l'application n'est pas installée)

Vérifiez le lien ci-dessous pour plus de détails https://developers.facebook.com/docs/reference/Android/current/class/LoginButton/https: //developers.facebook .com/docs/facebook-login/Android/v2.2 # résolution des problèmes

     LoginButton.setLoginBehavior(LoginBehavior.NATIVE_WITH_FALLBACK);
     LoginButton.setLoginBehavior(LoginBehavior.NATIVE_ONLY);
     LoginButton.setLoginBehavior(LoginBehavior.WEB_ONLY);
8
ANinJa

Obtenez votre clé de hachage en utilisant cette fonction pour les deux (débogage et édition apk) et insérez-la dans votre application dans developer.facebook.com/apps

private void calculateHashKey(String yourPackageName) {
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                yourPackageName,
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:",
                    Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (NameNotFoundException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
}

cela m'aide beaucoup .. J'espère que cela vous aidera aussi ..

5
Jignesh Patel

Il semble que je ne pourrais pas obtenir les données si j'avais une session facebook active (à partir de l'application facebook).

Donc avant d’ouvrir la session, je demande la connexion forcée, même si l’utilisateur a ouvert la session facebook à partir de l’application facebook.

openRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);

Donc maintenant tout fonctionne, mais l'utilisateur doit saisir les données manuellement. Ce n'est pas idéal mais ça marche.

Même les échantillons de facebook ne fonctionnaient pas pour moi avec l'application facebook ouverte.

Si quelqu'un a une meilleure solution, n'hésitez pas à suggérer.

2
Karlis

Si la clé de hachage n’est pas générée correctement, vous pouvez faire face à des problèmes tels que

Une boîte de dialogue de connexion native s’affiche mais, une fois les autorisations acceptées, la fenêtre contextuelle disparaît et rien ne se passe dans le journal de connexion. 

Mais la connexion et le partage fonctionneront correctement si l'application native sur l'appareil est désactivée (la boîte de dialogue de connexion s'ouvre dans l'affichage Web dans ce cas et une clé de hachage appropriée n'est pas requise pour cela).

Je faisais face au même problème et ai résolu celui-ci en obtenant la clé de hachage en utilisant ce code. La clé de hachage était différente de celle générée avec openSSl et keytool

et après la mise à jour de cette clé de hachage dans l'application Facebook, tout fonctionne correctement 

//================================== To Get Facebook Hash key Programmatically =========================//
    PackageInfo info;

     try {
            info = activity.getPackageManager().getPackageInfo("com.checkmyplanner", PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md;
                md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                String something = new String(Base64.encode(md.digest(), 0));
                //String something = new String(Base64.encodeBytes(md.digest()));
                Log.e("hash key", something);
            }
        } catch (NameNotFoundException e1) {
            Log.e("name not found", e1.toString());
        } catch (NoSuchAlgorithmException e) {
            Log.e("no such an algorithm", e.toString());
        } catch (Exception e) {
            Log.e("exception", e.toString());
        }

Il suffit de changer le nom de votre paquet et d’obtenir la clé de hachage appropriée 

0
HemangNirmal