react - Cómo usar Facebook iOS SDK en iOS 10
install facebook sdk ios (6)
Estoy tratando de usar Xcode 8 para construir una aplicación con inicio de sesión de Facebook usando Swift 3. Cuando cambio de nuevo iOS Simulator 9.3, funciona. En iOS 10, recibo este error:
""fbauth2:/" The operation couldn’t be completed. (OSStatus error -10814.)"
y
Optional(Error Domain=com.facebook.sdk.login Code=308 "(null)")
¿Alguien tiene solución para esto?
Nota 1 :
Después de la depuración, este problema es que FBSDK no puede actualizar
expect_challange
.
La función
SecItemUpdate
dentro de
security.framework
no funciona.
Este es un problema de iOS 10
El mismo problema estaba en mi aplicación, verifiqué muchas soluciones pero no funcionó para mí. Solucioné este problema usando el siguiente método.
Vaya a este
Link
Seleccione su aplicación y configure su
info.plist
import
y agrega este código en tu
AppDelegate
import FBSDKCoreKit
import FBSDKLoginKit
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options)
}
En mi caso, el problema era Google Analytics. Por defecto, parece que está agregando su propio controlador de vista en la parte superior del controlador de vista de la aplicación. Establecer "FirebaseAppDelegateProxyEnabled" en "NO" en {Su aplicación} -Info.plist resolvió el problema.
En mi caso, la solución fue *:
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
// First, handle Facebook URL open request
if let fbSDKAppId = FBSDKSettings.appID(), url.scheme!.hasPrefix("fb/(fbSDKAppId)"), url.host == "authorize" {
let shouldOpen: Bool = FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String!, annotation: options[UIApplicationOpenURLOptionsKey.annotation])
return shouldOpen
}
// After it, handle any other response (e.g. deep links)
handlerOtherUrls(url: url)
return true
}
* Según lo recomendado por @MoridinBG en la página Github de Facebook SDK
Este error también puede ser causado si está utilizando FBSDKCoreKit o FBSDKLoginKit versión 4.39.0. Hubo un error en esta versión del SDK. Actualice a 4.39.1 o superior para solucionarlo. Detalles here
Como nota al margen, otros usuarios mencionaron que este error se ve si no tiene Facebook instalado en el simulador. Eso es cierto, pero se supone que el SDK recurrirá automáticamente al método de inicio de sesión web cuando la aplicación no esté instalada. Si eso no sucede, puede deberse a otro problema, como valores faltantes / mal configurados en su Info.plist (consulte LSApplicationQueriesSchemes) o métodos faltantes en su AppDelegate.
La razón principal por la que obtienes el siguiente error,
canOpenURL: failed for URL: "fbauth2:/" - error: "The operation couldn’t be completed. (OSStatus error -10814.)
es que su simulador de iOS no tiene instalada la aplicación de Facebook. Hasta que instale la aplicación en su simulador de iOS, continuará recibiendo el error. Intente ejecutar su aplicación iOS en un dispositivo iOS provisto con Facebook instalado y no volverá a ver el mensaje de error. ¡Espero que esto ayude!
El error OSStatus -10814 se produce
cuando
canOpenURL:
no puede encontrar ninguna aplicación
que pueda abrir esta URL (en realidad, Facebook intenta encontrar su aplicación llamando a
canOpenURL:
con el argumento "fbauth2: /").
La impresión ocurre dentro de la función, por lo que no puede hacer nada con eso.
Pero si ejecuta su aplicación en el dispositivo con la aplicación de Facebook instalada, no verá este error.
El error 308 se
produce debido a la situación, cuando el valor, almacenado en el llavero no es igual al valor, que se almacena en los parámetros de finalización de Facebook (para obtener más información, puede consultar
-[FBSDKLoginManager completeAuthentication:expectChallenge:]
).
Ocurre porque Apple cambió la forma de trabajar con el llavero en iOS 10. Para solucionar este problema, simplemente debe ir a Objetivos-> Capacidades y habilitar el intercambio de llavero (permite el acceso al llavero para su aplicación):
Si está utilizando Xamarin (lea este link para obtener más información, gracias @dynamokaj):
Solo asegúrese de habilitar el acceso al llavero en Derechos y seleccione también los derechos para las compilaciones de Simulador (Depuración). Por defecto esto no está configurado.