Configuración de sesión de Android FB API 3.0 con fragmentos

Estoy utilizando FB API 3.0 para Android, y estoy tratando de establecer la sesión de manera adecuada.

Pero, parece que estoy haciendo algo malo, o decir que estoy perdiendo algo.

En mi actividad de lanzador, compruebo si ya hay una sesión y si no existe, creo una nueva (como en el ejemplo de FB):

Settings.addLoggingBehavior(LoggingBehaviors.INCLUDE_ACCESS_TOKENS); Session session = Session.getActiveSession(); if (session != null){ String sesija = session.toString(); Log.w ("ss", sesija);} if (session == null) { if (savedInstanceState != null) { session = Session.restoreSession(this, null, MyGlobals.INSTANCE.statusCallback, savedInstanceState); Log.w("No Session found", "Loading saved session as it exists"); } if (session == null) { session = new Session(this); Log.w("No Session found", "CreatingNewSession"); String sesija2 = session.toString(); Log.w ("ss2", sesija2); } Session.setActiveSession(session); if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { session.openForRead(new Session.OpenRequest(this).setCallback(MyGlobals.INSTANCE.statusCallback)); Log.w("There is an active session", "Active Session Exists"); } } 

En este punto mi registro dice esto:

 10-24 09:11:52.284: W/ss(1404): {Session state:CREATED, token:{AccessToken token: permissions:[}, appId:xxxxxx} 

(AppId es correcto)

Luego en mi fragmento, intento iniciar sesión en facebook usando este código:

  Session session = Session.getActiveSession(); if (!session.isOpened() && !session.isClosed()) { Log.w("Session is not opend", "Session is not closed"); session.openForRead(new Session.OpenRequest(getActivity()).setCallback(MyGlobals.INSTANCE.statusCallback)); } else { Session.openActiveSession(getActivity(), true, MyGlobals.INSTANCE.statusCallback); Log.w("Open Active Session", "Status Callback"); } 

En este punto, FB webview aparece, establecí nombre de usuario y pasar, que un tipo de obras, y luego desaparece.

Ahora, no estoy en ninguna parte, no veo la respuesta y TOKEN recived, y si vuelvo a hacer clic en (en el mismo botón) mi aplicación se bloquea.

En el registro tengo esto entonces:

 10-24 09:12:31.944: W/ss(1404): {Session state:OPENING, token:{AccessToken token: permissions:[}, appId:xxxxxx} 

Si lo comparo con SessionLoginExample proporcionado por FB, llego allí:

 10-24 09:08:50.004: W/ss(1356): {Session state:OPENED, token:{AccessToken token:AAAFaKtb7Pg4BALYg4B5eosa0ZAE9ZAXB0ZBMFDJdNbsDsZAkGJUfKtGs71OEJikDxT2VBfo4QMXiNASz23ZAa6D76eUxW0mZAMa013HP2kxgZDZD permissions:[}, appId:xxxxxxx} 

Lo que significa que estoy haciendo algo mal, ya que no captura el AccessToken devuelto, y no se guarda correctamente.

Eso es lo que creo que está mal, pero no entiendo cómo debo leer la información de la sesión de manera adecuada, o decir dónde recoger y guardar la información de Token dentro del fragmento.

Traté de poner en el fragmento:

 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Boolean session = Session.getActiveSession().onActivityResult(getSherlockActivity(), requestCode, resultCode, data); } 

Como este fue el "onActivityResult" en el ejemplo, pero parece que no hace nada.

Sólo para resumir las cosas: Creo sesión detrás de la actividad del lanzador. Entonces, si no hay una aplicación FB instalada, en Tab4 (configuración) el usuario debe ser capaz de iniciar sesión en FB utilizando webview. Entonces en Tab1 y tab2 el usuario debe poder compartir la imagen a FB similar como en Instagram. Si hay la aplicación instalada, desactivaré la pestaña 4 y dejaré que el usuario comparta la aplicación FB con Tab1 y Tab2.

Tnx.

RESUELTO: Una cosa que nunca se escribe pero debe ser bien conocida. Cuando se realiza la autenticación FB, se debe ejecutar el código "On Activity Result" para guardar el Token con la sesión. Sin embargo, si se trata de fragmentos y tabulaciones, como yo, la función "onActivityResult" nunca se ejecuta dentro del código de fragmento, pero debe ejecutarse en la actividad que se encarga de fragmentos / pestañas.

Así que parece que ya has trabajado en torno a esto y su solución está bien, pero quería dar otra opción aquí en caso de que sea más limpio para usted u otros para utilizar el fragmento de este lugar.

Para casos en los que no puedes o no quieres derivar de FacebookActivity, puedes usar tu Actividad o tu Fragmento para inicializar la Sesión. Actividad y Fragmento tienen onActivityResult que puede anular, y el que se utiliza depende de lo que pasa para inicializar Session.OpenRequest.

Así que si quieres que la devolución de llamada llegue al Fragmento, puedes llamar a:

 ...new Session.OpenRequest(myFragment)... 

Luego anula onActivityResult en tu Fragmento y reenvía la llamada a tu Sesión.

Esto es algo más agradable en que su fragmento ya no necesita tener un conocimiento especial de qué actividad se está ejecutando.

  • Uso del API de logro de Facebook en Android
  • Cómo obtener APP_ID para Facebook?
  • Creación de Android Gradle con subproyectos
  • CookieSyncManager :: createInstance () IllegalStateException?
  • No se puede acceder a amigos de Facebook mediante la aplicación de Android
  • Android: el inicio de sesión de Facebook provoca error de onResume sólo por primera vez
  • ¿Cómo detectar un evento de cierre de sesión con la API de Android de Facebook v4?
  • Nombre del paquete y clase Nombre de la aplicación de Facebook
  • Feed de noticias de la pared de facebook a una aplicación para Android
  • Incapaz de construir el proyecto de Android con SDK de Facebook contra Android 2.2 (Froyo)
  • Abrir una página de Facebook desde la aplicación Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.