ios - problema de inicio de sesión de Facebook-canOpenURL: error para URL: "fbauth2:///"-error: "(nulo)"
swift facebook-graph-api (9)
Esta es una advertencia de Xcode que indica que canOpenURL: call devuelve false. Siempre que haya configurado la entrada
LSApplicationQueriesSchemes
en su plist como se describe anteriormente, puede ignorar esta advertencia.
Vaya a este
Link
Seleccione su aplicación y configure su
info.plist
import
y agregar este código en su
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)
}
Cuando hago clic en iniciar sesión con el botón de Facebook, se abre el navegador safari y se cierra de inmediato. Error notado en la consola.
Método delegado de la aplicación:
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
print("###### URL : ")
print(url)
print("###### App : ")
print(app)
print(options["UIApplicationOpenURLOptionsSourceApplicationKey"])
return FBSDKApplicationDelegate.sharedInstance().application(app, openURL: url, sourceApplication: options["UIApplicationOpenURLOptionsSourceApplicationKey"] as! String,
annotation: nil)
}
2015-09-18 18:37:51.410 [21036:5050465] -canOpenURL: failed for URL: "fbauth2:///" - error: "(null)" 2015-09-18 18:37:51.417[21036:5050465] -canOpenURL: failed for URL: "fbauth2:///" - error: "(null)" ###### URL : fb4554284912963222://authorize/?error_code=100&error_message=Invalid+Scope%3A+public&state=%7B%22challenge%22%3A%222ZmK6R5F05d%252F060TkCqj8SjPLjc%253D%22%2C%220_auth_logger_id%22%3A%223C79F2C8-61B9-470E-AE1B-E1C68435DB83%22%2C%22com.facebook.sdk_client_state%22%3Atrue%2C%223_method%22%3A%22sfvc_auth%22%7D&e2e=%7B%22init%22%3A145973.000512302%7D#_=_ ###### App : Optional(com.apple.SafariViewService) nil ###### err: Optional(Error Domain=com.facebook.sdk.core Code=8 "(null)" UserInfo={com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCode=100, com.facebook.sdk:FBSDKErrorDeveloperMessageKey=Invalid Scope: public, com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey=0})
IDE: xcode 7
Idioma: Swift2
SDK de Facebook: 4.6.0
Parse: 1.8.4
También he verificado que .plist tiene todas las claves necesarias. También se verificó el identificador de paquete para errores tipográficos. Todos se ven bien. Facebook está activo
¿Alguna ayuda?
Debe agregar este método si su aplicación se ejecuta en iOS9 o superior.
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options {
return [[FBSDKApplicationDelegate sharedInstance] application:app
openURL:url
sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
}
En caso de que necesite una versión Swift:
@available(iOS 9.0, *)
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return SDKApplicationDelegate.shared.application(app,
open: url,
sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
annotation: options[UIApplicationOpenURLOptionsKey.annotation] as Any)
}
El problema se debe a la aplicación de seguridad de transporte introducida en iOS 9.
Hay dos soluciones, ambas tratan de arreglar su archivo info.plist
Aquí hay una guía http://discoverpioneer.com/blog/2015/09/18/updating-facebook-integration-for-ios-9/
La advertencia "-canOpenURL: error de URL" es una pista falsa y simplemente significa que la aplicación FB no está instalada en el dispositivo / simulador en el que se está ejecutando.
Parece que está solicitando un alcance no válido (también conocido como permiso) de "Público". ¿Puede incluir su código que incluye los permisos que solicita? public_profile es probablemente lo que desea (y el valor predeterminado del SDK si no se proporciona ninguno).
Más importante aún, NO agregue fbauth2 a sus CFBundleURLSchemes ya que eso interrumpirá los flujos de inicio de sesión. Como señaló Himanshu, esas entradas deben ingresarse en LSApplicationQueriesSchemes en nuestra lista.
Me di cuenta de mi problema. Era solo la sintaxis en la función loginButtonClicked. El mensaje de error me estaba llevando por el camino equivocado. Aquí está el código de trabajo.
@objc func loginButtonClicked() {
self.login = FBSDKLoginManager()
self.login.logIn(withReadPermissions: ["public_profile"], from: self, handler: {(result, error) -> Void in
if error != nil {
print("Process error")
}
else if (result?.isCancelled)! {
print("Cancelled")
}
else {
print("Logged in")
DispatchQueue.main.async(execute: {
let viewController:UIViewController = self.storyboard?.instantiateViewController(withIdentifier: "UITabBarController") as! UITabBarController
self.present(viewController, animated: true, completion: nil)
})
}
})
}
Me he perdido la importación de
FBSDKCoreKit
.
Más tarde comenzó a trabajar en el simulador pero no en el dispositivo iPhone.
También noté las siguientes preguntas frecuentes en el sitio de Facebook. ¿Por qué veo mensajes de consola como
''canOpenURL: falló para URL: "fb ...: //''
o
Esta es una advertencia de Xcode que indica
canOpenURL:
llamada devuelta es falsa.
Mientras haya configurado la entrada
LSApplicationQueriesSchemes
en su
plist
como se describe anteriormente, puede ignorar esta advertencia
Con respecto a no funcionar en el dispositivo iPhone, consulte: Parse API: el inicio de sesión de Facebook no funciona en el dispositivo iPhone
Si está volviendo a compilar con iOS SDK 9.0, agregue lo siguiente a la lista de aplicaciones si está usando una versión de Facebook SDK v4.6.0 o superior:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>
Para preparar la integración de Facebook compatible con iOS 9, consulte las https://developers.facebook.com/docs/ios/ios9
Para verificar la versión del SDK de Facebook, use la siguiente línea de código:
print("SDK version /(FBSDKSettings .sdkVersion())")
Tengo la misma advertencia, pero en Facebook Docs hay una respuesta.
Esta es una advertencia de Xcode que indica que canOpenURL: call devuelve false. Mientras haya configurado la entrada LSApplicationQueriesSchemes en su plist como se describe anteriormente, puede ignorar esta advertencia
Tiene un "/" extra en su url "fbauth2: ///".
Luego puede ver "error_message = Invalid + Scope" en la url, probablemente debería verificar los permisos de su aplicación: https://developers.facebook.com/docs/facebook-login/permissions/v2.4