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");
}
}
});
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.
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:
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
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
NATIVE_ONLY
(utilisé lorsque vous souhaitez ouvrir l'application Facebook uniquement)WEB_ONLY
(utilisé lorsque vous voulez ouvrir dans WebView
uniquement)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);
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 ..
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.
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