Ios Facebook登录问题,WebView未使用关闭(Swift 3.0 FacebookLogin 0.2.0)

Ios Facebook登录问题,WebView未使用关闭(Swift 3.0 FacebookLogin 0.2.0),ios,facebook,swift3,facebook-ios-sdk,Ios,Facebook,Swift3,Facebook Ios Sdk,我正在使用的播客来自我的播客文件: 豆荚: -螺栓(1.8.4): -螺栓/接头(=1.8.4) -螺栓/任务(=1.8.4) -螺栓/接头(1.8.4): -螺栓/任务 -螺栓/任务(1.8.4) -FacebookCore(0.2.0): -螺栓(~>1.8) -FBSDKCoreKit(~>4.15) -FacebookLogin(0.2.0): -螺栓(~>1.8) -FacebookCore(~>0.2) -FBSDKCoreKit(~>4.15) -FBSDKLoginKit(~>4

我正在使用的播客来自我的播客文件:
豆荚:
-螺栓(1.8.4):
-螺栓/接头(=1.8.4)
-螺栓/任务(=1.8.4)
-螺栓/接头(1.8.4):
-螺栓/任务
-螺栓/任务(1.8.4)
-FacebookCore(0.2.0):
-螺栓(~>1.8)
-FBSDKCoreKit(~>4.15)
-FacebookLogin(0.2.0):
-螺栓(~>1.8)
-FacebookCore(~>0.2)
-FBSDKCoreKit(~>4.15)
-FBSDKLoginKit(~>4.15)
-FBSDKCoreKit(4.16.0):
-螺栓(~>1.7)
-FBSDKLoginKit(4.16.1):
-FBSDKCoreKit

My LoginViewController.swift代码:

import FacebookLogin
class LoginViewController: UIViewController, LoginButtonDelegate {
/*!
 @abstract Sent to the delegate when the button was used to login.
 @param loginButton the sender
 @param result The results of the login
 @param error The error (if any) from the login
 */


override func viewDidLoad() {
    super.viewDidLoad()
    let loginButton = LoginButton(readPermissions: [ .publicProfile ])
    loginButton.center = view.center
    loginButton.delegate = self;
    view.addSubview(loginButton)

}

/**
 Called when the button was used to login and the process finished.

 - parameter loginButton: Button that was used to login.
 - parameter result:      The result of the login.
 */
public func loginButtonDidCompleteLogin(_ loginButton: FacebookLogin.LoginButton, result: FacebookLogin.LoginResult){
    print("hello!")
}

/**
 Called when the button was used to logout.

 - parameter loginButton: Button that was used to logout.
 */
public func loginButtonDidLogOut(_ loginButton: FacebookLogin.LoginButton){
    print("goodbye")
}
我修改的AppDelegate.swift代码:

public func application(_ application: UIApplication,  didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
    // Override point for customization after application launch.
    return SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
}

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    return SDKApplicationDelegate.shared.application(application, open: url, options: [:])
}
上下文:
我用POD下载了所有东西,xcode提示我将所有代码转换为swift 3.0,所以我这样做了。我按照以下指南开始并登录: 如果我在app delegate中没有第二个函数的情况下运行,我会被迫在登录后弹出的web视图中按“done”,然后我会得到一个响应“hello”,如果我在该点设置了断点,我会看到我的登录被视为已取消。此外,我初始化的facebook按钮仍然提示我登录,因此它肯定不起作用。此外,我还得到了以下错误:

-canOpenURL:URL:“fbauth2:/”失败-错误:“操作无法完成。(OSStatus错误-10814)。”

但是,如果我保留该方法,它将关闭,但委托永远不会被调用。同时,该按钮继续提示我登录

My Info.plist:

<key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>fbMYID</string>
            </array>
        </dict>
    </array>
    <key>FacebookAppID</key>
    <string>MYID</string>
    <key>FacebookDisplayName</key>
    <string>MYAPPNAME</string>
    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>fbapi</string>
        <string>fb-messenger-api</string>
        <string>fbauth2</string>
        <string>fbshareextension</string>
    </array>
CbundleUrlTypes

. 我猜测,鉴于当前版本的swift,用于登录的文档已经过时,或者我错过了指向某些先决条件的链接。如果你对我的问题有任何想法,请告诉我。我的info.plist应该已全部设置,否则我将在尝试登录时出错。我可以进入屏幕,屏幕上显示您已授予MYAPP权限。然后我继续按ok,如果我的应用程序委托中有openURL方法,它将关闭,或者保持空白。我强烈怀疑这与我在调用SDKApplicationDelegate时在open方法中留下空白dict的选项有关。谢谢

首先从developer.facebook.com创建app,并在plist中添加您的appID

然后将一个按钮添加到情节提要中,并将此代码添加到应用程序中进行登录

 let loginManager = LoginManager()
    loginManager.logIn([.publicProfile], viewController: self) { loginResult in
        switch loginResult
        {
        case .failed(let error):
            print(error)
        case .cancelled:
            print("User cancelled login.")

        case .success(let grantedPermissions, let declinedPermissions, let accessToken):
            print("granted \(grantedPermissions.contains("email"))")
            print("Logged in user! \(loginResult)")
            print("accesstoken - \(accessToken)")
            print("user ID - \(accessToken.userId)")
           }
           }

通过Pod文件添加facebook有很多帮助,所以问题在于我的钥匙链共享。我一进入mytarget>capabilities>Keychain Share并启用它,它就工作了

检查我更新的问题,我添加了部分plist。你是说像那样吗?已经是这样了。很抱歉我误解了,但我仍然面临这个解决方案的例外。如果我对第一个应用程序id进行更改,那么我会得到一个异常,如果我将fbauth2添加到两个facebook应用程序id,那么我会得到另一个异常,如果我仅将其添加到最后一个id,那么我会得到一个异常。通过facebook,你真正想做什么,比如facebook登录和注销?是什么?你到底想做什么告诉我?很抱歉回复太晚了,但我想能够登录和注销facebook。我的登录按钮工作正常,我的密码很好,这是我的钥匙链共享。