Facebook 登录 - 停留在白色网页 SWIFT
Facebook login - stays at white web page SWIFT
在我的 LoginViewController 中,我实现了 FBSDKLoginButtonDelegate 并导入了 FBSDKLoginKit 和 FBSDKCoreKit。我在 viewDidLoad 中的代码如下所示:
//setting up facebook login button
var facebookLogin = FBSDKLoginButton()
//want this button to conform to this protocol
facebookLogin.delegate = self
facebookLogin.readPermissions = ["public_profile", "email", "user_friends"]
facebookLogin.frame = CGRectMake(20, 359, 335, 30)
self.view.addSubview(facebookLogin)
这是按钮的代码:
public func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult
result: FBSDKLoginManagerLoginResult!, error: NSError!) {
if error != nil {
print(error.localizedDescription)
return
} else {
print("No error")
self.performSegueWithIdentifier("loginToFeed", sender: self)
}
}
登录后,页面停留在这个白屏,而不是回到应用程序。所以我继续并按 "Done" 手动返回到应用程序,我的控制台打印出没有错误,然后继续转到提要。现在有趣的下一部分是尽管登录时没有错误,但我没有登录。你知道这里发生了什么吗?我错过了一步吗?
缺少 AppDelegate:
func application(application: UIApplication,
openURL url: NSURL,
sourceApplication: String?,
annotation: AnyObject?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application,
openURL: url,
sourceApplication: sourceApplication,
annotation: annotation)
}
如上所述,缺少应用程序委托,但在两个地方。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}
和
func application(application: UIApplication,
openURL url: NSURL,
sourceApplication: String?,
annotation: AnyObject) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(
application,
openURL: url,
sourceApplication: sourceApplication,
annotation: annotation)
}
这是我的情况:我可以使用 myapp 登录 fb。然后,当我关闭应用程序(返回主屏幕)并再次进入该应用程序时,它会显示一个空白屏幕。我通过这些解决了它:
在应用委托中:
func applicationDidBecomeActive(application: UIApplication) {
FBSDKAppEvents.activateApp()
}
此外,我正在使用本文中的桥接文件:
http://www.brianjcoleman.com/tutorial-how-to-use-login-in-facebook-sdk-4-0-for-swift/
桥接文件如下所示:
#ifndef Bridging_Header_h
#define Bridging_Header_h
#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>
#endif /* Bridging_Header_h */
在我的 LoginViewController 中,我实现了 FBSDKLoginButtonDelegate 并导入了 FBSDKLoginKit 和 FBSDKCoreKit。我在 viewDidLoad 中的代码如下所示:
//setting up facebook login button
var facebookLogin = FBSDKLoginButton()
//want this button to conform to this protocol
facebookLogin.delegate = self
facebookLogin.readPermissions = ["public_profile", "email", "user_friends"]
facebookLogin.frame = CGRectMake(20, 359, 335, 30)
self.view.addSubview(facebookLogin)
这是按钮的代码:
public func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult
result: FBSDKLoginManagerLoginResult!, error: NSError!) {
if error != nil {
print(error.localizedDescription)
return
} else {
print("No error")
self.performSegueWithIdentifier("loginToFeed", sender: self)
}
}
登录后,页面停留在这个白屏,而不是回到应用程序。所以我继续并按 "Done" 手动返回到应用程序,我的控制台打印出没有错误,然后继续转到提要。现在有趣的下一部分是尽管登录时没有错误,但我没有登录。你知道这里发生了什么吗?我错过了一步吗?
缺少 AppDelegate:
func application(application: UIApplication,
openURL url: NSURL,
sourceApplication: String?,
annotation: AnyObject?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application,
openURL: url,
sourceApplication: sourceApplication,
annotation: annotation)
}
如上所述,缺少应用程序委托,但在两个地方。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}
和
func application(application: UIApplication,
openURL url: NSURL,
sourceApplication: String?,
annotation: AnyObject) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(
application,
openURL: url,
sourceApplication: sourceApplication,
annotation: annotation)
}
这是我的情况:我可以使用 myapp 登录 fb。然后,当我关闭应用程序(返回主屏幕)并再次进入该应用程序时,它会显示一个空白屏幕。我通过这些解决了它:
在应用委托中:
func applicationDidBecomeActive(application: UIApplication) {
FBSDKAppEvents.activateApp()
}
此外,我正在使用本文中的桥接文件: http://www.brianjcoleman.com/tutorial-how-to-use-login-in-facebook-sdk-4-0-for-swift/
桥接文件如下所示:
#ifndef Bridging_Header_h
#define Bridging_Header_h
#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>
#endif /* Bridging_Header_h */