如果用户取消登录,Swift ios facebook登录会使应用程序崩溃

Posted

技术标签:

【中文标题】如果用户取消登录,Swift ios facebook登录会使应用程序崩溃【英文标题】:Swift ios facebook login crashes app if user cancel login 【发布时间】:2016-04-03 20:47:44 【问题描述】:

我正在使用以下代码登录 facebook:

@IBAction func fbLoginBtnDidTouch(sender: AnyObject) 
        let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
        fbLoginManager.logInWithReadPermissions(["email"], fromViewController: self)  (result, error) -> Void in
            if (error == nil)
                let fbloginresult : FBSDKLoginManagerLoginResult = result
                if(fbloginresult.grantedPermissions.contains("email"))
                
                    self.getFBUserData()
                
            
        
    

AppDelegate:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
  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)
    

这将在 web 视图中启动 FB。如果用户从 FB 帐户接受应用程序,它将按预期返回应用程序。

但是,如果用户点击 NO 或点击带有 FB 的 webview 中的 完成 按钮,应用程序将崩溃并说 (fatal error: unexpectedly found nil while展开可选值)

标记这一行:

if(fbloginresult.grantedPermissions.contains("email"))

那么,如果用户点击 No 或 Done,为什么应用会崩溃?

【问题讨论】:

【参考方案1】:

首先检查用户是否取消登录。应用程序崩溃,因为没有授予权限。 FBSDKLoginManagerLoginResult

if (error == nil)
   let fbloginresult : FBSDKLoginManagerLoginResult = result
   if result.isCancelled 
      return
   
   if(fbloginresult.grantedPermissions.contains("email"))
     
         self.getFBUserData()
     

【讨论】:

是的,当我取消登录时,应用程序会崩溃,无论是单击否还是完成按钮

以上是关于如果用户取消登录,Swift ios facebook登录会使应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 立即解析 Facebook 登录默认为用户取消登录

在用户已登录 Facebook 的设备上登录时如何跳过 Facebook 的权限页面

如果用户登录 iOS Swift,则从某个视图开始

我在 ios 应用程序中实现了谷歌登录。现在,我如何验证用户是不是已登录,如果没有 - 使用 Swift 将他返回到登录页面?

iOS 6 Game Center authenticateHandler 取消后无法登录

iOS 6 Game Center authenticateHandler取消后无法登录