kmy*_*pwn 5 facebook ios facebook-sdk-4.0 swift
在此先感谢您的帮助!
我正在写一个快速的应用程序上实现facebook登录,我在登录完成后执行segue时遇到了一些麻烦.
作为FBSDKLoginButtonDelegate的一部分,我有两种方法:
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result:
FBSDKLoginManagerLoginResult!, error: NSError!)
{}
Run Code Online (Sandbox Code Playgroud)
和
func loginButtonDidLogOut(loginButton: FBSDKLoginButton!)
{}
Run Code Online (Sandbox Code Playgroud)
登录按钮被正确地实施,我能够读取权限/ FB令牌,并通过这个到亚马逊Cognito.
但奇怪的是,我无法以编程方式将登录信息转换为不同的视图(控制器).
按下FB登录按钮将用户带到Web浏览器(Facebook SDK处理所有这些),然后进行登录.
如果我放置一个segue,如:
dispatch_async(dispatch_get_main_queue(), {
self.performSegueWithIdentifier("segueLoginViewtoHome", sender: nil })
Run Code Online (Sandbox Code Playgroud)
在loginButton()中,它永远不会真正执行(即,当Web浏览器消失时,用户返回到具有登录按钮的视图,而不是segue想要的新视图).我相信该行在浏览器窗口返回到包含登录按钮(和segue)的视图之前执行,但我不知道如何告诉程序"等待"视图成为唯一一个活动且再次可见的视图执行segue.
我相信是这种情况,因为如果我将相同的segue代码放入loginButtonDidLogOut()中,那里不需要切换到浏览器,则在从"滑出"的工作表中按下"注销"后,segue执行得很好屏幕的底部.
此视图控制器已正确设置为委托,如下所示,如果编码在注销时发生,则segue正常运行.
任何帮助将不胜感激,为长期问题道歉,并谢谢!
Dee*_*lue 12
我通过创建一个名为fbLoginSuccess的全局布尔值来修复此问题,该布尔值初始化为false.如果Facebook登录成功,那么我将fbLoginSuccess设置为true,执行你的segue.然后,如果fbLoginSuccess为true,我覆盖viewDidAppear()并在那里执行segue.这解决了它,因为viewDidAppear()是在从浏览器窗口返回后执行的,这就是你想要的.
var fbLoginSuccess = false
override func viewDidAppear(animated: Bool) {
if (FBSDKAccessToken.currentAccessToken() != nil && fbLoginSuccess == true)
{
performSegueWithIdentifier("loginSegue", sender: self)
}
}
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
print("User Logged In")
if ((error) != nil) {
// Process error
print(error)
}
else if result.isCancelled {
// Handle cancellations
}
else {
fbLoginSuccess = true
// If you ask for multiple permissions at once, you
// should check if specific permissions missing
if result.grantedPermissions.contains("email") {
// Do work
}
}
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你!
| 归档时间: |
|
| 查看次数: |
2642 次 |
| 最近记录: |