L'ouverture de session de Facebook échoue sur certains périphériques

J'ai mis en place la connexion Facebook et ça marche bien sur certains périphériques / AVD. Mon appareil de développement est un téléphone Gingerbread, mais le test avec un périphérique 4.1.1, il ne se connecte pas. Après avoir appuyé sur le bouton Facebook, il affiche un écran vide (essayant de connecter Facebook) et après 1-2 secondes Retourne à l'écran d'accueil. En outre, aucune erreur n'est affichée ou affichée dans le Logcat. Oh, et l'application Facebook est installée dans l'appareil … Des idées?

METTRE À JOUR:

  • Comment intégrer Facebook Connect avec Android
  • Exécution de l'animation et commutateur d'image en même temps
  • Facebook SSO et l'enregistrement du site tiers en une seule étape?
  • Ne peut pas vous connecter avec la nouvelle version 3.0 de Facebook sdk pour Android
  • Fb: // profile / {userid} semble ne pas fonctionner
  • Connectez-vous Facebook registerCallback non appelé
  • J'ai autorisé la journalisation comme suggéré par Mark Venzke et en utilisant cette procédure, et j'ai reçu cet avertissement (deux fois) à chaque tentative de connexion (note: test avec un téléphone HTC One S):

    07-05 20:14:50.582: W/PackageManager(605): Unable to load service info ResolveInfo{4171dbf0 com.htc.socialnetwork.facebook.remote.FacebookSyncService p=0 o=0 m=0x108000} 

    Notez la ligne com.htc.socialnetwork.facebook.remote.FacebookSyncService, de même qu'a-t-il besoin d'une étape supplémentaire pour les périphériques HTC?

    De plus, j'attache le code où la connexion est effectuée:

     private void onSessionStateChange(Session session, SessionState state, Exception exception) { if (isResumed) { FragmentManager manager = getSupportFragmentManager(); int backStackSize = manager.getBackStackEntryCount(); for (int i = 0; i < backStackSize; i++) { manager.popBackStack(); } com.facebook.Settings.addLoggingBehavior(LoggingBehavior.REQUESTS); if (state.isOpened()) { Bundle params = new Bundle(); params.putString("fields", "id"); params.putString("limit", "1"); Request request = new Request(Session.getActiveSession(), "me", params, HttpMethod.GET, new Callback() { @Override public void onCompleted(Response response) { if (response != null) { Log.d("AuthGraphResponse", response.toString()); long id; try { id = response.getGraphObject().getInnerJSONObject().getLong("id"); app.setFacebookId(id); Log.d("UserID", Long.valueOf(id).toString()); } catch (JSONException e) { e.printStackTrace(); } } } }); RequestAsyncTask task = new RequestAsyncTask(request); task.execute(); showFragment(AUTH, false); } else if (state.isClosed()) { showFragment(UNAUTH, false); } } } 

    MISE À JOUR 2:

    Est-il possible que HTC renomme le nom du package de l'application Facebook par défaut dans tous les périphériques (ou certains d'entre eux, quoi qu'il en soit) pour com.htc.socialnetwork.facebook (au lieu de com.facebook.katana) et cela conduit-il à ce conflit? Je ne pense pas vraiment que la désinstallation de l'application par défaut et l'installation de Facebook à partir de Google Play sont une solution acceptable (je pense que les applications par défaut ne peuvent pas être désinstallées).

    MISE À JOUR 3:

    Pas encore résolu. 19 heures pour attribuer la prime de 100 points de récompense!

    MISE À JOUR 4:

    Une autre ligne intéressante du LogCat:

     07-15 10:55:51.718: E/chromium(30475): external/chromium/net/disk_cache/stat_hub.cc:216: [0715/105551:ERROR:stat_hub.cc(216)] StatHub::Init - App com.facebook.katana isn't supported. 

    10 Solutions collect form web for “L'ouverture de session de Facebook échoue sur certains périphériques”

    Il existe certainement un conflit entre votre application stock et le SDK. Donc, si vous ne souhaitez pas désinstaller l'application stock HTC et utilisez encore le SDK 3.0, je pense que votre meilleur pari sans modérer le code source du sdk serait de désactiver SSO et de ne connecter que via la visionneuse web.

    Cela peut être fait facilement en ajoutant SessionLoginBehavior.SUPRESS_SSO chaque fois que vous essayez d'ouvrir une nouvelle session. Voici un exemple que j'ai changé depuis SessionLoginSample (LoginUsingActivityActivity) du SDK de Facebook pour vous montrer ce qu'il faut faire:

     @Override public void onCreate(Bundle savedInstanceState) { ... Session session = Session.getActiveSession(); if (session == null) { if (savedInstanceState != null) { session = Session.restoreSession(this, null, statusCallback, savedInstanceState); } if (session == null) { session = new Session(this); } Session.setActiveSession(session); //add the check, for if session is opened if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED) || !session.getState().isOpened()) { //Add the suppress SSO behavior to force webview auth dialog to popup session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback).setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO)); } } ... } //then put your code in the statusCallback method or keep it in the session state change listener 

    Sinon, si cela ne vous dérange pas de changer le code Facebook sdk, vous devriez vérifier cela

    L'ouverture de session de Shirley Facebook n'est pas interrompue sur tous les périphériques 4.1.1, donc c'est quelque chose avec votre implémentation.

    Êtes-vous sûr que Key Hash est le même sur ce périphérique que ce que vous avez configuré sur developer.facebook.com? Si vous avez utilisé une clé de développement différente, ou si elle a été installée par un magasin tiers, il est possible que les hachages clés ne correspondent pas.

    Activez la journalisation de débogage dans le code source Facebook SDK et reconstruisez-le. Il est généralement désactivé par défaut pour des raisons de sécurité. Selon votre version du SDK, il se peut que ce soit dans Util.java ou dans un autre emplacement, et peut être une variable appelée 'ENABLE_LOG'.

    Je pense que l'erreur de connexion au Facebook se produit pour la plupart, afin de résoudre ce problème, vous suivrez un tutoriel étape par étape avec patience.

    En d'autres termes, il est très difficile de résoudre votre problème ici. Vous pouvez donc référencer ce lien.

    http://developers.facebook.com/android/

    J'espère que vous réussirez.

    Il n'y a pas assez d'informations dans votre question. Donc, je fais quelques hypothèses ici.

    1) Regardez d'abord la réponse de Mike Venzke.

    2) Si cela ne fonctionne pas, essayez ceci: Vous devez vous connecter sur votre appareil à l'aide de SSO (Single Sign On). Voici donc les étapes que vous pouvez suivre.

    Supprimez la compilation. Réinstallez-le. Et lorsqu'on lui demande des autorisations de votre appareil, acceptez-les.

    Si vous n'êtes pas retourné à votre application, vous devez les ajouter à votre fichier manifeste:

     <activity android:name="com.facebook.LoginActivity" android:label="@string/app_name" > </activity> <meta-data android:value="@string/app_id" android:name="com.facebook.sdk.ApplicationId"/> 

    Où app_name et app_id sont votre identifiant d'application et votre nom d'application respectifs sur votre page d'application Facebook.

    Avez-vous ajouté ces Btw?

    Vous avez également besoin de cette autorisation

     <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.GET_ACCOUNTS"/> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

    Si vous publiez un peu plus d'informations, je devrais supposer le problème.

    Je pense que le problème avec votre application Android Facebook dans l'appareil. Alors, commencez à désinstaller l'application Android de Facebook à partir du périphérique et vérifiez que les identifiants de Facebook fonctionnent correctement ou non.

    Depuis Honeycomb, vous ne pouvez pas effectuer d'appels sur le fil principal, essayez d'utiliser Android AsyncTask ou créez un nouveau thread vous-même.

    http://developer.android.com/reference/android/os/AsyncTask.html

    J'ai eu cette erreur lors de l'utilisation d'un périphérique avec une ancienne version de facebook. Enlever complètement facebook ou mettre à jour l'application Facebook.

    Je suis assez sûr que cela se produise car Facebook pour Android était autrefois un WebView enveloppé du site mobile.

    Notez également que certains périphériques (mon Increible 4G LTE) réinstallent l'ancienne version (Facebook) de Facebook si vous essayez de la supprimer.

    Connectez le périphérique pour éclipser pour voir logcat. Si log cat ne s'exécute pas dans la commande cmd dans Windows et lancer redémarrage adb, (définissez le chemin AdB en premier). Alors vous pouvez voir logcat en cours d'exécution. Ouvrez maintenant votre application et cliquez sur le bouton de connexion Facebook. Vous pouvez obtenir la clé de hachage correcte en couleur jaune dans log cat. Mettez cette clé sur facebook et maintenant la connexion Facebook fonctionnera sur chaque appareil. Merci.

     List<String> permissions = new ArrayList<String>(); permissions.add("email"); //start Facebook session openActiveSession(this, true, new Session.StatusCallback() { @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() { @Override public void onCompleted(GraphUser user, Response response) { if (user != null) { String firstName = user.getFirstName(); String lastName = user.getLastName(); String id = user.getId(); String email=null; try { email = user.getProperty("email").toString(); } catch (Exception e) { // TODO: handle exception } String gender = (String) user.getProperty("gender"); String birthday = user.getBirthday(); //welcome.setText("Hello \n" + firstName+"\n"+lastName+"\n"+email+"\n"+gender+"\n"+birthday+"!"); if(firstName!=null) { SharedPreferences.Editor editor = settings.edit(); editor.putString("fligin", "1"); editor.putString("firstName", firstName); editor.putString("lastName", lastName); editor.putString("email", email); editor.putString("gender", gender); editor.putString("birthday", birthday); editor.commit(); Intent intent=new Intent(getApplicationContext(), RegistrationOneActivity.class); startActivity(intent); //overridePendingTransition( R.anim.slide_in_up, R.anim.slide_out_up ); finish(); } else { Toast.makeText(getApplicationContext(),"Person information is null", Toast.LENGTH_SHORT).show(); finish(); } } } }); } } }, permissions); 

    Essayez d'insérer cette ligne où vous définissez votre bouton de connexion dans le code source java

     LoginButton fb_button = (LoginButton)findViewById(//your resource id); fb_button.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO); 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.