2017-05-07 62 views
7

我正在使用;facebook swift sdk 0.2.0 swift 3.1登录页面保持打开状态

  • 迅速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!") 
      } 
     } 
}  

登录按钮显示为预期,但允许后页面,白页保持打开,当我点击“完成”手动应用程序认为用户取消登录。
也有类似的线程暗示失踪的应用程序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!") 
     } 
    } 
} 
+0

您是否编写了在AppDelegate中返回应用程序的方法? –

回答

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

我也试过这个,用这个块更新问题。 –

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

希望这件事会帮助你。