我在iOS应用程序中使用FBSDK时遇到问题。登录似乎工作良好,但注销立即崩溃的应用程序。
我使用的是Swift 4和fbsdk4.4版本。我怀疑我在网上找到的文档和我在谷歌上找到的其他解决方案并没有使用完全相同的版本,因为我发现的任何东西都不适合我。这是我的应用程序委派代码:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}
func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
let handled: Bool = FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: options[.sourceApplication] as? String, annotation: options[.annotation])
return handled
}
这是我的注销代码:
@IBAction func btnFbLogoutClicked(_ sender: UIButton) {
let loginManager : FBSDKLoginManager = FBSDKLoginManager()
loginManager.logOut()
self.performSegue(withIdentifier: "UnwindToLogin", sender: self)
}
它在注销时崩溃并关闭应用程序(),并且不执行segue。如果有人使用相同版本的FBSDK和Swift,我会感谢一些指针。
最佳答案
您应该在Appdelegate中添加missing方法并遵循我的按钮操作代码。对我有用。希望对你有用。
import UIKit
import FBSDKCoreKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}
func applicationWillResignActive(application: UIApplication) {
FBSDKAppEvents.activateApp()
}
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}
}
//MARK: FacebookLogin Button
@IBAction func btnFacebookLoginClicked(sender: AnyObject) {
let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
fbLoginManager.logOut()
fbLoginManager.loginBehavior = FBSDKLoginBehavior.Web //Without safari Browser
fbLoginManager.logInWithReadPermissions(["email"], fromViewController: self, handler: { (result, error) -> Void in
if (error != nil){
let fbloginresult : FBSDKLoginManagerLoginResult = result
if(fbloginresult.grantedPermissions.contains("email")){
self.getFBUserData()
fbLoginManager.logOut()
}
}else if result.isCancelled {
print("Cancelled")
}
})
}