Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


El inicio de sesión de Facebook falla en algunos dispositivos

He implementado el inicio de sesión de Facebook y funciona bien en algunos dispositivos / AVD. Mi dispositivo de desarrollo es un teléfono Gingerbread, pero probarlo con un dispositivo 4.1.1, simplemente no inicia sesión. Después de presionar el botón de facebook, muestra una pantalla en blanco (tratando de conectar a Facebook), y después de 1-2 segundos que Vuelve a la pantalla de inicio. Además, no se producen errores ni se muestran en el Logcat. Ah, y la aplicación de Facebook está instalada en el dispositivo … ¿Alguna idea?

ACTUALIZAR:

Hice el registro como sugerido por Mark Venzke y usando este procedimiento, y recibí esta advertencia (dos veces) en cada intento de inicio de sesión (nota: prueba con un teléfono 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} 

Tenga en cuenta la línea com.htc.socialnetwork.facebook.remote.FacebookSyncService, así que ¿hay algún paso adicional necesario para los dispositivos HTC?

Además, adjunto el código en el que se realiza el inicio de sesión:

 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); } } } 

ACTUALIZACIÓN 2:

¿Es posible que HTC cambie el nombre del paquete de la aplicación predeterminada de Facebook en todos los dispositivos (o algunos de ellos, lo que sea) a com.htc.socialnetwork.facebook (en lugar de com.facebook.katana) y conduce a este conflicto? Realmente no creo que desinstalar la aplicación predeterminada e instalar Facebook desde Google Play es una solución aceptable (también, creo que las aplicaciones predeterminadas no se pueden desinstalar).

ACTUALIZACIÓN 3:

No resuelto todavía. 19 horas para otorgar la recompensa de 100 reputación!

ACTUALIZACIÓN 4:

Otra interesante línea de la 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. 

  • "Argumento 'contexto' no puede ser nulo"
  • Facebook SDK 4.0.1 Iniciar sesión sin iniciar sesión
  • SDK de Android Facebook: el hash de clave no coincide con ningún hash de clave almacenado al cargar Google Play
  • "Argumento 'contexto' no puede ser nulo"
  • La aplicación proxy no puede solicitar permisos de publicación sin haber sido instalados previamente
  • Error al inflar la clase com.facebook.widget.LoginButton con Facebook SDK 4.0.1
  • Facebook onCompleted Email java.lang.NullPointerException
  • ¿Cómo detectar un evento de cierre de sesión con la API de Android de Facebook v4?
  • 10 Solutions collect form web for “El inicio de sesión de Facebook falla en algunos dispositivos”

    Sin duda hay un conflicto entre su aplicación de acciones y el SDK. Así que si no desea desinstalar la aplicación HTC de acciones y seguir utilizando el SDK 3.0 creo que su mejor opción sin modificar el código fuente de la sdk sería desactivar SSO y acceder sólo a través de webview.

    Esto se puede hacer fácilmente agregando SessionLoginBehavior.SUPRESS_SSO cada vez que intenta abrir una nueva sesión. Aquí hay una muestra que cambié de SessionLoginSample (LoginUsingActivityActivity) del SDK de Facebook para mostrarte qué hacer:

     @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 

    De lo contrario, si no te importa cambiar el código de Facebook sdk, debe comprobar esto

    Shirley Facebook de inicio de sesión no está roto en todos los dispositivos 4.1.1, por lo que es algo con su aplicación.

    ¿Estás seguro de que Key Hash es el mismo en ese dispositivo que lo que has configurado en developer.facebook.com? Si utilizó una clave de dev distinta o fue instalada por un almacén de terceros, es posible que los hashes de clave no coincidan.

    Active el registro de depuración en el código fuente de Facebook SDK y vuelva a crearlo. Generalmente está desactivado por defecto por razones de seguridad. Dependiendo de su versión del SDK, puede estar en Util.java o en otra ubicación, y puede ser una variable llamada 'ENABLE_LOG'.

    Creo que el error de inicio de sesión de Facebook ocurre en su mayoría para resolver este problema que sigue allí tutorial paso a paso de nuevo con paciencia.

    De otra manera es muy difícil resolver su problema aquí. Así que puede consultar este enlace.

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

    Espero que tenga éxito.

    No hay suficiente información en su pregunta. Así que, estoy haciendo algunas conjeturas aquí.

    1) Primer vistazo a la respuesta de Mike Venzke.

    2) Si esto no funciona, intente lo siguiente: Debe iniciar sesión en su dispositivo mediante SSO (Single Sign On). Así que aquí están los pasos que puede tomar.

    Eliminar la generación. Vuelva a instalarlo. Y cuando se le pidan permisos desde su dispositivo, permítales.

    Si no te llevan de vuelta a tu aplicación, debes agregarlas a tu archivo de manifiesto:

     <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"/> 

    Donde app_name y app_id son la identificación de la aplicación y el nombre de la aplicación respectivos en la página de la aplicación de Facebook.

    ¿Has agregado estos BTW?

    Usted necesita este permiso también

     <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 publicas algo más de información que podría ser adivinar el problema.

    Creo que el problema con su aplicación de Facebook android en el dispositivo. Así que primero desinstale la aplicación facebook android del dispositivo y compruebe que el inicio de sesión de Facebook funcione correctamente o no.

    Puesto que Honeycomb no puede hacer llamadas de Internet en el hilo principal, pruebe a utilizar un Android AsyncTask o crear un nuevo hilo usted mismo.

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

    Tengo este error al usar un dispositivo con una versión antigua de facebook. La eliminación de facebook por completo, o la actualización de la aplicación de facebook lo arregló.

    Estoy bastante seguro de que esto sucede porque Facebook para Android solía ser sólo un envuelto WebView del sitio móvil.

    También tenga en cuenta que algunos dispositivos (mi increíble 4G LTE) volverá a instalar la versión antigua (webview) de facebook si intenta eliminarlo.

    Conectar el dispositivo a eclipse para ver logcat. Si log cat no está ejecutando el comando cmd abierto en ventanas y ejecute reinicio de adb, (establezca primero la ruta de acceso de adb). Entonces usted puede ver logcat en ejecución. Ahora abra su aplicación y haga clic en el botón de inicio de sesión de facebook. Usted puede conseguir la llave correcta del hash en color amarillo en gato del registro. Poner esa clave en facebook y ahora facebook login funcionará en todos los dispositivos. Gracias.

     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); 

    Intente insertar esta línea donde defina su botón de inicio de sesión en el código fuente de java

     LoginButton fb_button = (LoginButton)findViewById(//your resource id); fb_button.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.