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!
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! –