Facebook Login 中的取消按钮使用 Swift 崩溃了吗?
Posted
技术标签:
【中文标题】Facebook Login 中的取消按钮使用 Swift 崩溃了吗?【英文标题】:Cancel button in Facebook Login using Swift crashes? 【发布时间】:2015-12-22 05:53:46 【问题描述】:我刚刚按照教程使用 swift 和 parse 制作 Facebook 登录按钮。我按下登录按钮,第一次成功登录。之后,当我再次运行应用程序并再次按下登录按钮时,我会看到下图所示的屏幕: login page
当我按下 OK 时一切都很好,然后我转到下一个 viewContoller,问题是在我按下取消按钮后,应用程序崩溃了。您能否给我一些提示,为什么会发生这种情况?
import UIKit
import Parse
import ParseFacebookUtilsV4
import ParseTwitterUtils
var userName: String = ""
class ViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
@available(ios 8.0, *)
@IBAction func signInButtonTapped(sender: AnyObject)
PFFacebookUtils.logInInBackgroundWithReadPermissions([], block: (user: PFUser?, error: NSError?) -> Void in
if (error != nil)
//Display an alert message
var myAlert = UIAlertController(title: "Alert", message: error?.localizedDescription, preferredStyle: UIAlertControllerStyle.Alert)
let okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil)
myAlert.addAction(okAction);
self.presentViewController(myAlert, animated: true, completion: nil)
return
if(FBSDKAccessToken.currentAccessToken() != nil)
userName = (PFUser.currentUser()?.objectId)!
let protectedPage = self.storyboard?.instantiateViewControllerWithIdentifier("ProtectedPageViewController") as! ProtectedPageViewController
let protectedPageNav = UINavigationController(rootViewController: protectedPage)
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
var window = UIApplication.sharedApplication().keyWindow
window?.rootViewController = protectedPageNav
)
【问题讨论】:
【参考方案1】:在 PFFacebookUtils.logInInInBackgroundWithReadPermissions 块中仍然存在的 OK 或 Cancel 期间,当您点击它时没有问题,因为它调用了
if (error != nil)
当你点击“取消”时,下面的方法可能会被调用,
if(FBSDKAccessToken.currentAccessToken() != nil)
因为令牌已经有效,请查看!
【讨论】:
所以,如果我没记错的话,你的建议是 if(FBSDKAccessToken.currentAccessToken() != nil) 我应该有 if(FBSDKAccessToken.currentAccessToken() != nil) else ,然后在 else 部分将用户重定向到应用的第一页? 实际上,如果用户取消,Facebook 登录功能可以选择。那应该叫。我在下一个答案中显示我的代码。【参考方案2】:这里我通过objective c代码使用了Facebook登录,你可以在这里得到重点,
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login
logInWithReadPermissions: @[@"public_profile",@"email",@"user_friends"]
fromViewController:self
handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
if (error)
STOP_LOAD;
NSLog(@"Process error");
NSLog(@"%@",error);
TOAST_FOR_TRY_AGAIN;
/*
UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"Please Try Again"
message:nil
delegate:self
cancelButtonTitle:@"Ok"
otherButtonTitles: nil];
[alert show];
*/
else if (result.isCancelled)
STOP_LOAD;
NSLog(@"Cancelled");
else
NSLog(@"Logged in");
NSLog(@"Result=%@",result);
[[[FBSDKGraphRequest alloc] initWithGraphpath:@"me" parameters:@ @"fields": @"id,first_name,middle_name,last_name,name,picture,email"]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error)
NSLog(@"Facebook result=%@",result);
if (!error)
else
NSLog(@"An error occurred getting friends: %@", [error localizedDescription]);
];
];
【讨论】:
以上是关于Facebook Login 中的取消按钮使用 Swift 崩溃了吗?的主要内容,如果未能解决你的问题,请参考以下文章
错误:解组时找不到类:com.facebook.login.Login 客户端请求
Facebook Javascript SDK - Fb.login 在浏览器内置的 Facebook 上不起作用