ios - share facebook swift
Facebook Logout no funciona en el nuevo SDK V.4.1.0 en ios? (2)
Amigos, quiero integrar Facebook en mi aplicación, para poder descargar el nuevo SDK v.4.1.0 de Facebook, para el botón de inicio de sesión de Facebook use la clase de FBSDKLoginButton
como se muestra abajo en Swift.
if (FBSDKAccessToken.currentAccessToken() != nil)
{
// User is already logged in, do work such as go to next view controller.
// Or Show Logout Button
let loginView : FBSDKLoginButton = FBSDKLoginButton()
self.view.addSubview(loginView)
loginView.center = self.view.center
loginView.readPermissions = ["public_profile", "email", "user_friends"]
loginView.delegate = self
self.returnUserData()
}
else
{
let loginView : FBSDKLoginButton = FBSDKLoginButton()
self.loginButtonDidLogOut(loginView)
self.view.addSubview(loginView)
loginView.center = self.view.center
loginView.readPermissions = ["public_profile", "email", "user_friends"]
loginView.delegate = self
}
}
Como en el código anterior, se muestra el botón "Iniciar sesión con Facebook".
Después de iniciar sesión correctamente, se muestra el botón de cierre de sesión. cuando hago clic en el botón de cierre de sesión, se llama a su delegado - delegar clase FBSDKLoginButtonDelegate
Método delegado de cierre de sesión:
func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
println("User Logged Out")
FBSDKAccessToken.setCurrentAccessToken(nil)
FBSDKProfile.setCurrentProfile(nil)
let manager = FBSDKLoginManager()
manager.logOut()
}
en delegado soy token claro y también llamada función de cierre de sesión dentro de la clase de FBSDKLoginManager
. Pero cada vez consigue pantalla autorizada de usuario. No aparece la pantalla de inicio de sesión para que otro usuario no pueda iniciar sesión con facebook. Cada vez tengo que borrar el historial del navegador.
sin un historial de navegación claro, no se muestra la página de inicio de sesión para que otro usuario no pueda iniciar sesión.
Qusetion: error de Facebook
Cada vez que se muestra la pantalla después de cerrar la sesión:
Esta respuesta me ayudó a determinar el problema de la causa raíz. Las 2 teclas son SSO y Safari. Facebook documenta mal el proceso de inicio de sesión de Facebook. Tuve que apagar el SSO. Esto se encuentra en el sitio de Facebook Developer, donde se registra su aplicación, en Configuración. Pero lo más importante es que tuve que cambiar el comportamiento del FBLoginManager para usar UIWebView y no Safari. Hice esto con el siguiente fragmento de código:
FBSDKLoginManager *loginMgr = [[FBSDKLoginManager alloc] init];
loginMgr.loginBehavior = FBSDKLoginBehaviorWeb;
Si utiliza los comportamientos predeterminados, administrará las desconexiones a través de la aplicación de Facebook o el navegador Safari, y no directamente desde la aplicación. El FBSDKLoginBehaviorWeb es usar iOS UIWebView en una ventana emergente. Esto funciona perfectamente, y se requieren credenciales cada vez que se cierra la sesión.
También estoy atrapado en el mismo lugar. Sin embargo el surf he llegado a la siguiente conclusión.
Primero vamos a saber el significado de SingleSignOn:
El inicio de sesión único (SSO) es una propiedad del control de acceso de múltiples sistemas de software relacionados, pero independientes. Con esta propiedad, un usuario inicia sesión una vez y obtiene acceso a todos los sistemas sin que se le solicite iniciar sesión nuevamente en cada uno de ellos.
Creo que hay algún punto. ¿Por qué no se nos pide de nuevo que iniciemos sesión aunque hayamos cerrado la sesión? Es porque en el simulador la credencial se ha guardado en safari (la primera vez que utiliza el inicio de sesión de facebook, su aplicación abre la aplicación de safari o facebook si está instalada).
La información que le permite ver el mensaje "ya ha autorizado ..." se encuentra en Facebook. Para revocar los permisos de su aplicación, deberá tocar la API Graph. FB docs, en la sección ''Eliminar'' de https://developers.facebook.com/docs/reference/api/user/
Revocando inicio de sesión
También puede permitir que las personas des-autoricen completamente una aplicación, o revocar el inicio de sesión, haciendo una llamada a este punto final de Graph API: DELETE / {user-id} / permissions
por ejemplo, en swift:
let deletepermission = FBSDKGraphRequest(graphPath: "me/permissions/", parameters: nil, HTTPMethod: "DELETE")
deletepermission.startWithCompletionHandler({(connection,result,error)-> Void in
println("the delete permission is /(result)")
})
Pero para cerrar la sesión de la aplicación completamente para que se le solicite al usuario que vuelva a ingresar las credenciales, vea a continuación:
Tiene que cerrar sesión en la aplicación de Facebook, entonces solo se desconectará realmente y luego solo la aplicación volverá a solicitar las credenciales. Esto se debe a que no ha iniciado sesión en ningún lugar del teléfono. Por lo tanto, la regla de SSO no se aplica aquí. En su caso, solo se desconectará de su aplicación (no de la FB), ya que se registrará debido a que inició sesión desde safari. Por este motivo, recibirá el mismo mensaje que indica que ya está autorizado para esta aplicación.
Intente probar en el simulador, mientras inserta las credenciales por primera vez, entonces se abre safari y las credenciales que ingresa se guardan en safari. Entonces, la próxima vez que cierre sesión e inicie sesión en la aplicación, no solicitará credenciales. Porque safari la proporciona (o la aplicación de Facebook si ingresó su credencial allí)
Ahora abres safari y abres facebook. Verá que Facebook ya se ha abierto y la información que toma del safari automáticamente o si tiene una aplicación de Facebook instalada, desde allí. Así que cierre sesión en safari y vuelva a abrir su aplicación y cierre sesión en la aplicación. Luego, su aplicación le pedirá nuevamente las credenciales.