2016-04-03 42 views
5

我使用下面的代碼與Facebook登錄:斯威夫特IOS 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) 
    } 

這將在網頁視圖推出FB。如果用戶從FB帳戶接受應用程序,它將按預期返回到應用程序。

但是,如果用戶點擊NO或與FB web視圖的應用程序會崩潰說點擊完成按鈕(致命錯誤:意外發現零而展開的可選值

標誌這條線:

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

那麼,爲什麼應用程序崩潰,如果用戶點擊否或完成?

回答

19

首先檢查用戶是否取消登錄。應用程序崩潰,因爲沒有授予的權限。 FBSDKLoginManagerLoginResult

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

是,當我取消登錄應用程序崩潰,通過單擊NO或完成按鈕 – user2722667

+0

檢查編輯答案 – tbilopavlovic

+0

謝謝!那樣做了 – user2722667

相關問題