pregunta de cierre de sesión de facebook-ios-sdk

He visto muchas preguntas aquí con respecto a la API Graph de Facebook, pero aún no he encontrado una solución para las operaciones simples de “inicio de sesión” / “cierre de sesión” que la utilizan. Parece que el estilo de inicio de sesión único está causando más confusión que beneficios.

Me gustaría saber si es posible tener la siguiente situación:

  1. Ingrese en la aplicación (sin accessToken / accessToken creado).
  2. Realice un inicio de sesión utilizando SSO llamando al método authorize:delegate: (la aplicación pasa a segundo plano y el inicio de sesión se realiza en el ámbito ‘global’ (Aplicación de Facebook / Mobile Safari), solicitando las credenciales del usuario.
  3. Ingrese nuevamente en la aplicación (ahora ingresó, tanto accessToken como accessToken se guardan en NSUserDefaults ).
  4. Realice un cierre de sesión llamando al método logout: (ahora se ha desconectado, tanto accessToken como accessToken se han eliminado de NSUserDefaults )
  5. Intente volver a iniciar sesión, con exactamente los mismos pasos en 2.

Me doy cuenta de que cuando llamo logout: , realmente accessToken sesión de Facebook (se invalida el accessToken ) desde el scope de mi aplicación, no desde el scope global (aplicación de Facebook / Safari móvil). En 5.) cuando trato de iniciar sesión de nuevo, la aplicación queda en segundo plano y el bash de inicio de sesión se realiza nuevamente en Facebook App / Mobile Safari como de costumbre, sin embargo, aparece una pantalla que dice que ya estoy conectado:

Ya has autorizado ... Presiona “Okay” para continuar. Ha iniciado sesión como ... (¿No?).

Es un comportamiento extraño para el usuario que acaba de cerrar sesión en mi aplicación. Mi pregunta es:

“¿ Realmente puedo desconectarme de Facebook (me refiero al scope ‘global’) desde mi aplicación? Esto afectaría a otras aplicaciones que también usan las credenciales de Facebook. Sin embargo, si no puedo hacerlo, ¿cómo puedo evitar el ‘extraño’ comportamiento ‘describir arriba?

Gracias

Me temo que la respuesta es no, no puedes hacer esto.

Su aplicación está en una caja de arena, y no puede escribir afuera, donde las cookies globales son (para safari móvil) y la configuración de la aplicación de Facebook (en preferencias de aplicaciones de Facebook / cookies, creo)

Solo puede advertir a su usuario que cierre la sesión fuera de su aplicación …

… O simplemente no puede usar Facebook api SSO, pero en el formulario web de inicio de sesión de la aplicación, como yo lo hago por otros motivos.

Si elige esa opción, esta solicitud de extracción podría ahorrarle algo de tiempo;)

Eduardo,

¡Siento tu dolor! Pasé la mayor parte del día trabajando en este tema. Descubrí que cuando usa SSO y la llamada:

Llamado desde tu código:

 [facebook logout:self]; 

Método de Facebook API:

 - (void)logout:(id)delegate { self.sessionDelegate = delegate; [_accessToken release]; _accessToken = nil; [_expirationDate release]; _expirationDate = nil; NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage]; NSArray* facebookCookies = [cookies cookiesForURL:[NSURL URLWithString:@"http://login.facebook.com"]]; for (NSHTTPCookie* cookie in facebookCookies) { [cookies deleteCookie:cookie]; } if ([self.sessionDelegate respondsToSelector:@selector(fbDidLogout)]) { [_sessionDelegate fbDidLogout]; } } 

La API de Facebook invalida las variables de token de acceso y fecha de vencimiento e intenta eliminar las cookies de Safari para dispositivos móviles, pero por alguna razón, probablemente las fallas de Apple no se borren realmente. Entonces, cuando intente iniciar sesión la próxima vez que su dispositivo Safari móvil vea la cookie, le dirá:

 "You have already authorized .... Press "Okay" to continue. Logged in as ... (Not You?)." 

Hasta que Facebook encuentre una solución o Apple solucione su API rota, debemos evitar el SSO a través de Safari. A continuación se muestran los cambios que realicé en Facebook.m para forzar el viejo diálogo de inicio de sesión. Si usaste estos cambios, es posible que no funcionen para siempre, pero creo que funcionarán durante mucho tiempo. También para estar seguro de que esto funcionó con la API de Facebook más reciente que actualicé a la más reciente a partir de esta publicación (comstackción de noviembre de 2011).

Llamado desde tu código:

 [facebook authorize:permissions]; 

Método de Facebook API:

 - (void)authorize:(NSArray *)permissions { self.permissions = permissions; // [self authorizeWithFBAppAuth:YES safariAuth:YES]; [self authorizeWithFBAppAuth:NO safariAuth:NO]; } 

Si esto te ayuda, por favor califica este hilo y mi publicación para ayudar a otros a encontrarla.

gadildafissh

Hola yo ,

no es posible, el motivo es que el inicio de sesión único (SSO) no es para hacer que el usuario inicie sesión cada vez que cierra la sesión, sino que el usuario inicia sesión en cualquiera de las aplicaciones habilitadas por FB; lo usará para iniciar sesión nuevamente. Esto se debe a que el dispositivo es utilizado principalmente por una sola persona, en este caso solo un usuario puede iniciar sesión en Facebook.

no puedes controlar ninguna aplicación fuera de tu aplicación, por ejemplo, si inicias sesión con Gmail y cuando abres google.com puedes ver tu nombre de usuario, actualmente hay sesión iniciada que tiene SSO,

En el nuevo SDK de Facebook, puede establecer el botón de inicio de sesión loginBehaviour property

Debajo del código en rápida …

 let fbButton = FBSDKLoginButton() fbButton.loginBehavior = .Web 

Respuesta ya hecha, pero solo quiero aclararla. Puede ser que haya salvado el tiempo a alguien.

Ve a Facebook.m y cambia de línea

  [self authorizeWithFBAppAuth:YES safariAuth:YES]; 

a

  [self authorizeWithFBAppAuth:YES safariAuth:NO]; 

Causará que la ventana de inicio de sesión aparezca dentro de la aplicación. El cierre de sesión funcionará perfecto. En otras palabras, funcionará como solía hacerlo en versiones anteriores del sistema operativo.

además de la respuesta kishnan94. la versión objetiva c es;

si desea que un modal se abra y solicite credenciales de Facebook por separado desde la aplicación Safari o Facebook, simplemente use el último SDK de Facebook y establezca el comportamiento de inicio de sesión

 FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; [login setLoginBehavior:FBSDKLoginBehaviorWeb]; 

esto hará que el proceso de cierre de sesión sea más conveniente y menos confuso para los usuarios sin utilizar las cuentas de aplicaciones de safari o Facebook.

Parece que este es un error de Facebook SDK. En el caso de que la aplicación de Facebook esté instalada en el dispositivo, access_token se renueva. Por otro lado, access_token y access_token no se pudieron cambiar. : (((