2016-10-10 6 views
1

Ich habe Probleme, die Facebook Login Komponente zu lösen zu bekommen, während die folgende Umgebung mit:Swift Facebook SDK leere Seite nach dem Login

Swift 3.0 in Xcode 8 Facebook SDK für Swift (0.2.0) Laufen auf iOS 10

ich alle notwendigen Schritte befolgt haben, um es (iOS Getting Started und Swift Getting Started), auch die Schritte nicht hier erwähnt, wie das Hinzufügen der Standard AppDelegate Methoden wie folgt zu erhalten gehen:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

     FacebookCore.SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: [ 
      .sourceApplication: application, 
      ]) 
     return true 

    } 

private func application(app: UIApplication, openURL url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool { 
     return FacebookCore.SDKApplicationDelegate.shared.application(app, open: url, options: [ 
      .sourceApplication: app, 
      ]) 
    } 

@available(iOS 9.0, *) 
private func application(application: UIApplication, openURL url: URL, sourceApplication: String?, annotation: AnyObject) -> Bool { 
    return FacebookCore.SDKApplicationDelegate.shared.application(application, open: url, sourceApplication: sourceApplication, annotation: annotation) 
} 

Was die Info.plist Inhalt, über den Teil Facebook, ich nehme an, ich habe alle erforderlichen Umbauten und sogar ein paar andere, die die Situation schien hilfreich zu lösen, auf SO in einigen Fragen hier:

<key>CFBundleURLTypes</key> 
    <array> 
     <dict> 
      <key>CFBundleURLSchemes</key> 
      <array> 
       <string>fb1619016601757957</string> 
      </array> 
     </dict> 
    </array> 
<key>FacebookAppID</key> 
    <string>1619016601757957</string> 
    <key>FacebookDisplayName</key> 
    <string>Nossa Cidade</string> 
    <key>LSApplicationQueriesSchemes</key> 
    <array> 
     <string>fbapi</string> 
     <string>fb-messenger-api</string> 
     <string>fbauth2</string> 
     <string>fbshareextension</string> 
    </array> 
<key>NSAppTransportSecurity</key> 
    <dict> 
     <key>NSExceptionDomains</key> 
     <dict> 
      <key>facebook.com</key> 
      <dict> 
       <key>NSIncludesSubdomains</key> 
       <true/> 
       <key>NSExceptionRequiresForwardSecrecy</key> 
       <true/> 
      </dict> 
      <key>fbcdn.net</key> 
      <dict> 
       <key>NSIncludesSubdomains</key> 
       <true/> 
       <key>NSExceptionRequiresForwardSecrecy</key> 
       <true/> 
      </dict> 
      <key>akamaihd.net</key> 
      <dict> 
       <key>NSIncludesSubdomains</key> 
       <true/> 
       <key>NSExceptionRequiresForwardSecrecy</key> 
       <true/> 
      </dict> 
     </dict> 
    </dict> 

Für den letzten und Kernteil, super vereinfacht, füge ich die Login-Button-Logik in meinen Login-Controller ein.

override func viewDidLoad() { 
     super.viewDidLoad() 

loginButton = LoginButton(readPermissions: [.publicProfile, .userFriends, .email]) 
     loginButton.center = view.center 
     loginButton.frame.origin = CGPoint(x: loginButton.frame.origin.x,y: loginBtn.frame.origin.y + 80) 
     self.view.addSubview(loginButton) 
     loginButton.delegate = self 

} 

func loginButtonDidCompleteLogin(_ loginButton: LoginButton, result: LoginResult) { 

     switch result { 
     case .success(let grantedPermissions, _, let accessToken): 
      print("facebook success") 
      print(accessToken.authenticationToken) 
      break 
     case .cancelled: 
      print("facebook cancelled") 
      break 

     case .failed(let error): 
      print("facebook error") 
      break 
     } 
} 

func loginButtonDidLogOut(_ loginButton: LoginButton) { 
     print("User has logged out") 
} 

Ich habe durch eine Menge von SO Fragen, Github Fragen gegangen, und es gibt einige Entwickler in der gleichen Situation wie ich laufen, ohne konkrete Antwort über das mögliche Ergebnis dieses Fehlers. Was am Ende passiert, ist, dass ich einen dicken fetten LoginResult.cancelled Callback bekomme, nicht was ich vorhabe.

Die Ausgabe von der Konsole, damit verbunden ist:

-canOpenURL: failed for URL: "fbauth2:/" - error: "The operation couldn’t be completed. (OSStatus error -10814.)" 

Jede Hilfe würde geschätzt. Vielen Dank!

Antwort

1

Ich hatte ein ähnliches Problem, das durch die Methoden in AppDelegate in meiner App verursacht wurde nicht von Facebook aufgerufen, wenn es die Anmeldung abgeschlossen hatte.

Basierend auf den tutorial here Ich glaube, Sie brauchen, um die Methoden in AppDelegate wie folgt zu ändern:

import FacebookCore 

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

... 

    return FacebookCore.SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions) 
} 

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 

    return FacebookCore.SDKApplicationDelegate.shared.application(app, open: url, options: options) 
} 

Nach dieser Änderung, fand ich, dass Facebook zurück zu meiner App nach der Anmeldung eingeschaltet und auf nicht hängen ein weißer Bildschirm.

+0

Es zeigte sich, dass die Funktionssignatur in appDelegate nicht übereinstimmte. Vorsicht beim Kopieren, ich denke, der Argumentname wurde weggelassen, d. H. (_ Etwas) und wurde nicht aufgerufen. Ich kenne seine Generika, aber war lange her. Trotzdem Danke! –

Verwandte Themen