登录后的Swift Facebook SDK空白页

时间:2016-10-10 12:22:39

标签: ios swift facebook

在使用以下环境时,我无法解决Facebook Login组件:

Xcode 8中的Swift 3.0 Facebook SDK for Swift(0.2.0) 在iOS 10上运行

我已按照所有必要步骤(iOS Getting StartedSwift Getting Started),即使是此处未提及的步骤,例如添加默认的AppDelegate方法,如下所示:

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

至于关于Facebook部分的Info.plist内容,我假设我有所有必需的标签,甚至其他一些似乎有助于解决这种情况的其他问题,在SO上的一些问题中找到:

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

对于最后和核心部分,超级简化,我在登录控制器中附加了登录按钮逻辑。

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

我已经经历了很多SO问题,Github问题,并且有一些开发人员遇到了与我相同的情况,没有对此错误的可能结果做出任何具体的回应。到底发生了什么,是我得到了一个很大的胖LoginResult.cancelled回调,而不是我想要的。

与此相关的控制台输出是:

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

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,这是由于我的应用程序中的AppDelegate中的方法在完成登录后没有被Facebook调用。

基于tutorial here我认为您需要更改AppDelegate中的方法,如下所示:

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

进行此更改后,我发现Facebook在登录后切换回我的应用程序并且没有挂在白色屏幕上。

相关问题