首页 文章

facebook swift sdk 0.2.0 swift 3.1登录页面保持打开状态

提问于
浏览
7

我正在使用;

  • swift sdk 0.2.0和

  • swift 3.1

所以,在我的 viewcontrollerinitial.swift )我

import UIKit
import FacebookCore
import FacebookLogin
...
override func viewDidLoad() {
if let accessToken = AccessToken.current {
   print("User is already logged in")
   ...
}
else {
   let loginButton = LoginButton(readPermissions: [ .publicProfile, .email ])
   loginButton.center = view.center

   //AFTER ACTION
   let loginManager = LoginManager()
   loginManager.logIn([ .publicProfile, .email ], viewController: self)
        { loginResult in
            switch loginResult {
            case .failed(let error):
                print(error)
                break
            case .cancelled:
                print("User cancelled login.")
            case .success(let grantedPermissions, let declinedPermissions, let accessToken):
                print("Logged in!")
            }
        }
}

登录按钮按预期显示,但在权限页面后,白页保持打开状态,当我单击"done"手动应用程序认为用户取消登录时 .
有类似的线程暗示缺少app delegate 函数(34734885),但我想这是 FBSDKCoreKitFBSDKLoginKit 的解决方案,而不是新的facebook swift sdk . 我想,再一次 . 有什么建议吗?

编辑
我也试过这个;

let myLoginButton = UIButton()
myLoginButton.backgroundColor = UIColor.darkGray
myLoginButton.frame = CGRect(0, 0, 180, 40);
myLoginButton.center = view.center;
myLoginButton.setTitle("My Login Button", for: UIControlState.normal)
// Add the button to the view
view.addSubview(myLoginButton)
// Handle clicks on the button
myLoginButton.addTarget(self, action: #selector(self.FBloginButtonClicked), for: UIControlEvents.touchUpInside)


@objc func FBloginButtonClicked() {  
    //AFTER ACTION
    let loginManager = LoginManager()
    loginManager.logIn([ .publicProfile, .email ], viewController: self)
    { loginResult in
        switch loginResult {
        case .failed(let error):
            print(error)
            break
        case .cancelled:
            print("User cancelled login.")
        case .success(let grantedPermissions, let declinedPermissions, let accessToken):
            print("Logged in!")
        }
    }
}

2 回答

  • 0

    据我所知你做了相应的事情facebook guide?

    包括这部分:

    // Handle clicks on the button
      myLoginButton.addTarget(self, action: @selector(self.loginButtonClicked) forControlEvents: .TouchUpInside)
    

    // Once the button is clicked, show the login dialog
    @objc func loginButtonClicked() {
      let loginManager = LoginManager()
      ...
      }
    
  • 0

    根据你的问题,你似乎在appdelegate中写了一个方法 . 成功登录后,这将返回到您的应用程序 .

    import FacebookCore // (FBSDKCore's alternative for swift)
    
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
        let isFBOpenUrl = SDKApplicationDelegate.shared.application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
    
        if isFBOpenUrl { return true }
        return false
    }
    

    SWIFT 4:

    func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey:Any] = [:]) -> Bool {
            return SDKApplicationDelegate.shared.application(application, open: url, options: options)
        }
    

    希望这件事能对你有所帮助 .

相关问题