ios - developers - login with facebook swift 4
Código de error de inicio de sesión FBSDK: 308 en Objective-C (18)
Sigo recibiendo
"Error Domain = com.facebook.sdk.login Code = 308" No se pudo completar la operación. (com.facebook.sdk.login error 308.) ""
al intentar iniciar sesión con Facebook desde mi dispositivo.
Mi código funciona en el simulador, pero no en un dispositivo real. ¿Alguien ha encontrado este código de error antes? Estaré más que feliz de compartir el código a pedido.
Debes habilitar Keychain Sharing en la pestaña Capacidades .
En el método FBSDKDelegate loginButtonWillLogin pon esto
- (BOOL) loginButtonWillLogin:(FBSDKLoginButton *)loginButton{
[FBSDKAccessToken setCurrentAccessToken:nil];
return YES;}
En mi caso, se solucionó actualizando al último SDK de FB. 4.10 en este momento.
Estoy obteniendo exactamente lo mismo FB SDK 4.6.0 Xcode 7.0 iOS9. Toda la configuración e instrucciones en el sitio de desarrolladores de Facebook se siguieron al pie de la letra. Ninguna de las soluciones anteriores funcionó para mí. Estoy descubriendo que el comportamiento es peor cuando se implementa en el dispositivo en vivo y se retroalimenta a la consola Xcode mientras se realiza el procedimiento de inicio de sesión. Es realmente una suerte si realmente te conecta o no. Parece que se comporta de una manera más predecible cuando simplemente reinicia su aplicación en frío después de la implementación. -¡Sí, este es el caso!
Cuando decide no iniciar sesión, aparece el siguiente error:
Error Domain=com.facebook.sdk.login Code=308 "(null)"
Investigué un poco el código de FB y parece que esto es simplemente un problema de derechos.
FB usa el llavero para almacenar un desafío de autorización durante el inicio de sesión. Al regresar, intenta obtener el valor del llavero y falla. Vea esta respuesta SO para más información.
Los derechos de seguridad pueden cambiar entre los perfiles de aprovisionamiento y, como todos sabemos, mantener nuestros perfiles y configuraciones de compilación y dispositivos / sims rectos es como criar gatos. Esto podría explicar por qué las personas experimentan un comportamiento tan inconsistente.
Por lo tanto, puede ser seguro asumir que en un entorno de producción, todo funcionará bien, y si las cosas no funcionan durante la prueba, entonces debe verificar dos veces los derechos en sus perfiles de aprovisionamiento.
La actualización al último (4.11) FB SDK también me solucionó esto. ¡No olvides limpiar tu proyecto después de actualizar para ver si te funciona!
Mismo problema FB SDK 4.5.1 y ninguna de las soluciones anteriores funcionó para mí.
Resolví esto agregando el marco de Bolts al proyecto arrastrando y soltando (desde el directorio FacebookSDK)
y luego agregar marco de tornillos a appDelegate
#import <bolts/bolts.h>
Para resolver este problema, solo tiene que habilitar "Compartir llavero" en las capacidades.
Pude lograr que el inicio de sesión vuelva a funcionar en iOS9 con SDK 4.6.0 al agregar la nueva clave / valor plist
<key>FacebookDisplayName</key>
<string>{Your App Name}</string>
También tomé los pasos en algunas otras respuestas aquí para implementar una instancia compartida de FBSDKLoginManager ().
Recibí el mismo error en xcode 7.1 ios 9.1 FB SDK 4.7.1. .
Desinstalar, instalar y probar sin xcode funciona bien por primera vez. Esto le permitirá volver a enchufar el dispositivo y ejecutarlo al menos un par de veces (parece ser un poco inconsistente ...)
Seguí a share con Xcode 9.4.1 y Swift 4.2
-
Agregar a la aplicaciónDelegar didFinishLaunchingWithOptions
SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
-
Agregar a la función delegar AppDelegate
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { return SDKApplicationDelegate.shared.application(app, open: url, options: options) }
-
Permitir llavero en capacidades.
Si está utilizando FBSDK 4.38, hay un error con el análisis de challengeExpected en FBSDKLoginManager.m.
Encontré una solución caliente de rinat-enikeev para ello:
https://github.com/facebook/facebook-sdk-swift/issues/286
Solo cambia
NSString *challengeExpected = [self loadExpectedChallenge];
a
NSString *challengeExpected = [[self loadExpectedChallenge] stringByReplacingOccurrencesOfString:@"+" withString:@" "];
Eso resolvió el problema para mí.
Solucioné el problema desinstalando la aplicación y reinstalando y funcionó de inmediato.
El error probablemente esté relacionado con iOS 9. Desde iOS 9, creo que el SDK usa SafariViewController y parece crear problemas cuando ya está conectado.
Tuve el mismo problema y lo solucioné actualizando las credenciales del sistema
[FBSDKLoginManager renewSystemCredentials:^(ACAccountCredentialRenewResult result, NSError *error) {
[[[YourAuthManager manager] facebookLoginManager] logInWithReadPermissions:@[@"email"] fromViewController:nil handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
if (error) {
// Handle error
} else if (result.isCancelled) {
// Handle cancellations
} else {
// If you ask for multiple permissions at once, you
// should check if specific permissions missing
if ([result.grantedPermissions containsObject:@"email"]) {
// Do work
}
}
}];
}];
Esta solución es menos radical que la reinstalación y asegura que sus usuarios no tendrán que hacerlo. Supongo que FBSDK 4.6 tiene algunos conflictos con las credenciales de autenticación FB del sistema iOS 9.
Editado: después de un tiempo de prueba, siguió sucediendo, no tan a menudo como antes, pero todavía era un problema, por lo que pasamos a una versión anterior de FB SDK. Esperemos que alguien encuentre una mejor solución.
Tuve exactamente el mismo problema y pude encontrar la solución modificando Info.plist
He agregado todos los esquemas posibles a
LSApplicationQueriesSchemes
La lista completa se ve así:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fbapi20130214</string>
<string>fbapi20130410</string>
<string>fbapi20130702</string>
<string>fbapi20131010</string>
<string>fbapi20131219</string>
<string>fbapi20140410</string>
<string>fbapi20140116</string>
<string>fbapi20150313</string>
<string>fbapi20150629</string>
<string>fbauth</string>
<string>fbauth2</string>
<string>fb</string>
<string>fb-messenger-api20140430</string>
<string>fb-messenger-platform-20150128</string>
<string>fb-messenger-platform-20150218</string>
<string>fb-messenger-platform-20150305</string>
<string>fb-messenger-api</string>
<string>fbshareextension</string>
</array>
Una solución, al menos para mí, es no ejecutar en el dispositivo a través del depurador Xcode. Si ejecuto la aplicación en un dispositivo fuera del depurador, el inicio de sesión de Facebook funciona bien. Si ejecuto la aplicación en el sim a través del depurador, el inicio de sesión de Facebook funciona bien.
Solo si ejecuto la aplicación en el dispositivo a través del depurador Xcode, obtengo el error 308 com.facebook.sdk.login cada vez.
La siguiente solución funciona para iOS9 + que se ejecuta en Xcode 8, para Swift3.0
Los pasos son
- Configurar el lanzamiento de Facebook
FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
-
Configurar URL abierta
guard let source = options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String else { return false } let annotation = options[UIApplicationOpenURLOptionsAnnotationKey] as? String return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: source, annotation: annotation)
- Solucione el problema de permiso del llavero como se muestra en la imagen a continuación