2015-09-19 14 views
53

Quando faccio clic sul login con il pulsante Facebook, si apre il browser safari e si chiude immediatamente. Errore notato sulla console.problema di accesso di facebook - canOpenURL: non riuscito per l'URL: "fbauth2: ///" - errore: "(null)"

App metodo delegato:

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
Lingua: Swift2
Facebook SDK: 4.6.0
Parse: 1.8.4

ho anche verificato .plist sta avendo tutte le chiavi che sono richieste. Inoltre verificato l'identificativo del bundle per errori di battitura. Tutto sembra buono. Facebook è attivo.

Qualsiasi aiuto?

+0

Qualsiasi aggiornamento su questo? Sono nella stessa barca, ho definito tutte le chiavi e i miei utenti non possono accedere a Facebook a meno che non sia la finestra di dialogo nativa di iOS. La visualizzazione Web e l'app switch falliscono entrambi. – Andrew

+0

Hai fortuna qui? La finestra di dialogo delle mie condivisioni è in disordine :( –

+0

Puoi condividere il tuo codice sul git e lo controllerò. – sfbayman

risposta

0

Hai un "/" extra nell'URL "fbauth2: ///".

Poi si può vedere "error_message = non valido + Scope" nell'URL, probabilmente si dovrebbe verificare le autorizzazioni della vostra applicazione: https://developers.facebook.com/docs/facebook-login/permissions/v2.4

+0

non ho usato qualsiasi URL. qualsiasi URL specifico che si sta parlando? ho appena usato LSApplicationQueriesSchemes \t \t \t fbauth2 \t nel file di .plist. – sfbayman

+0

il mio male. ho perso l'importazione ** FBSDKCoreKit **. Più tardi ha iniziato a lavorare sul simulatore ma ** non sul dispositivo iPhone **. Inoltre ho notato le seguenti domande frequenti sul sito di Facebook. vedo i messaggi della console come "canOpenURL: failed for URL:" fb ...: // 'or? Questo è un avviso Xcode che indica canOpenURL: chiamata restituita false.Finché hai configurato la voce LSApplicationQueriesSchemes nel tuo plist come descritto sopra, puoi ignorare questo avviso – sfbayman

2

ho perso l'importazione FBSDKCoreKit. Successivamente ha iniziato a lavorare sul simulatore ma non sul dispositivo iPhone.

Notate anche le seguenti domande frequenti sul sito di Facebook. Perché vedo messaggi di console come

'canOpenURL: failed for URL: "fb...://'

o? Questo è un avviso Xcode che indica la chiamata canOpenURL: restituita false. Finché si è configurato la voce LSApplicationQueriesSchemes nel plist come descritto in precedenza, è possibile ignorare questo avviso

Per quanto riguarda non funziona sul dispositivo iPhone, fare riferimento: Parse API - Facebook login not working on the iPhone device

+0

Posso ignorare l'avviso ma il controller di visualizzazione di Facebook non viene visualizzato. – CQM

+0

Hai importato tutti i pacchetti richiesti? – sfbayman

38

Ho lo stesso avvertimento, ma in Documenti Facebook c'è una risposta.

This is an Xcode warning indicating the the canOpenURL: call returned false. As long as you have configured the LSApplicationQueriesSchemes entry in your plist as described above, you can ignore this warning

https://developers.facebook.com/docs/ios/ios9

+2

Questa è la risposta giusta. Grazie –

4

Se stai ricompilazione con iOS SDK 9.0, aggiungere il seguente al plist dell'applicazione se si sta utilizzando una versione del V4.6 Facebook SDK.0 o superiore:

<key>LSApplicationQueriesSchemes</key> 
    <array> 
      <string>fbapi</string> 
      <string>fb-messenger-api</string> 
      <string>fbauth2</string> 
      <string>fbshareextension</string> 
    </array> 

Per preparare l'integrazione facebook supportato per iOS 9, passare attraverso Facebook Integraion for iOS 9 guidelines

Per controllare la versione di Facebook SDK, utilizzare sotto la linea di codice:

print("SDK version \(FBSDKSettings .sdkVersion())") 
27

Il " -canOpenURL: failed for URL "warning è un'aringa rossa e significa semplicemente che l'app FB non è installata sul dispositivo/simulatore su cui stai lavorando.

Sembra che tu stia richiedendo un ambito non valido (ovvero il permesso) di "Pubblico". Puoi includere il tuo codice che include quali permessi stai chiedendo? public_profile è probabilmente quello che vuoi (e ciò che l'SDK fa automaticamente se non ne viene fornito nessuno).

Ancora più importante, fare NON aggiungere fbauth2 ai CFBundleURLSchemes in quanto ciò interromperà i flussi di accesso. Come ha sottolineato Himanshu, queste voci dovrebbero essere inserite in LSApplicationQueriesSchemes nel nostro plist.

0

È necessario aggiungere questo metodo se l'app è in esecuzione su iOS9 o versioni successive.

- (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]]; 

}

Nel caso in cui è necessaria una versione 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) 
} 
0

This is an Xcode warning indicating the the canOpenURL: call returned false. As long as you have configured the LSApplicationQueriesSchemes entry in your plist as described above, you can ignore this warning.

Vai a questa Link Seleziona il tuo App, e configurare il info.plist

import e aggiungi a codice nel tuo 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) 
} 
0

Ho capito il mio problema. Era solo la sintassi nella funzione loginButtonClicked. Il messaggio di errore mi stava portando sulla strada sbagliata. Ecco il codice funzionante.

@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) 
      }) 
     } 

     }) 
}