2016-08-03 119 views
0

在我的應用程序中,我整合了facebook登錄,並將所有需要的設置。但是,當我試圖登錄,我得到這個錯誤ios9的facebook登錄問題

-canOpenURL: failed for URL: "fbauth2:/" - error: "(null)"

但我已經把

<key>LSApplicationQueriesSchemes</key> 
<array> 
    <string>fbapi</string> 
    <string>fb-messenger-api</string> 
    <string>fbauth2</string> 
    <string>fbshareextension</string> 

中的.plist文件,反正是有,我可以找到這個問題?

編輯

self.loginButton.delegate = self; 
     if (FBSDKAccessToken.currentAccessToken() != nil) 
     { 
      // User is already logged in, do work such as go to next view controller. 
     } 
     else 
     { 

      loginButton.center = self.view.center 
      loginButton.readPermissions = ["public_profile", "email", "user_friends"] 
      loginButton.delegate = self 
     } 


    //MARK : facebook integration 
    func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) { 

     print(result); 
     if ((error) != nil) 
     { 
      // Process error 
      self.showCancelAlert("Error", message: "Error occured") 
     } 
     else if result.isCancelled { 
      // Handle cancellations 
     } 
     else { 
      // If you ask for multiple permissions at once, you 
      // should check if specific permissions missing 
      if result.grantedPermissions.contains("email") 
      { 
       // Do work 
       self.returnUserData(); 

      }else{ 
       self.showCancelAlert("Error", message: "Cannot process with your email address") 

      } 
     } 
    } 

    func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) { 

    } 

    // accessToken is your Facebook id 
    func returnUserProfileImage(accessToken: NSString) -> String 
    { 
     let userID = accessToken as NSString 
     let facebookProfileUrl = NSURL(string: "http://graph.facebook.com/\(userID)/picture?type=large") 

     if facebookProfileUrl?.absoluteString != nil{ 
      return (facebookProfileUrl?.absoluteString)!; 
     }else{ 
      return ""; 
     } 

    } 




    func returnUserData() 
    { 
     let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil) 
     graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in 

      if ((error) != nil) 
      { 
       // Process error 
       print("error \(error)") 

      } 
      else 
      { 
       let userName : NSString = result.valueForKey("name") as! NSString 

       UserDefaults.sharedInstace.setUsername(userName as String) 

       if result.valueForKey("email") != nil{ 

        let userEmail : NSString = result.valueForKey("email") as! NSString 

        if let id: NSString = result.valueForKey("id") as? NSString { 
         print("ID is: \(id)") 

         self.showLoading("Signin...") 
         WebClient.sharedInstace.socialLogin(SocialLogin(uid:String(id) , name: userName as String, imageUrl: self.returnUserProfileImage(id), email: userEmail as String, provider: "facebook")) 

        } else { 
         print("ID es null") 

         self.showCancelAlert("Error", message: "Cannot process with your email address") 

         self.loginButtonDidLogOut(self.loginButton) 
        } 
       }else{ 

        FBSDKLoginManager().logOut() 

        self.loginButtonDidLogOut(self.loginButton) 

        print("email es null") 

        self.showCancelAlert("Error", message: "Cannot process with your email address") 

       } 

      } 
     }) 
    } 
+0

您可以將代碼發佈到登錄按鈕後面嗎? –

+0

@AhmedBaracat我已經更新了代碼 –

+1

您是否檢查了這個答案? http://stackoverflow.com/a/36290094/826926 –

回答

1

我認爲有幾件事情,可能會導致您的問題。

1)你確定你已經添加了最新的FBSDKCoreKit和FBSDKLoginKit並添加這些行到你的SWIFT文件的頂部:

import FBSDKCoreKit 
import FBSDKLoginKit 

2)我已閱讀,這只是一個錯誤模擬器應該被忽略。確保您在真實設備上測試此功能。

3)您是否在您的類聲明的標題中包含了FBSDKLoginButtonDelegate

4)我會確保你的info.plist源代碼都包括在內並且是正確的。這裏是我在我的應用程序中爲Facebook添加的內容:

<key>LSApplicationQueriesSchemes</key> 
<array> 
    <string>fbapi</string> 
    <string>fb-messenger-api</string> 
    <string>fbauth2</string> 
    <string>fbshareextension</string> 
</array> 
<key>CFBundleURLTypes</key> 
<array> 
    <dict> 
     <key>CFBundleURLSchemes</key> 
     <array> 
      <string> fb + FACEBOOKAPPIDFROMTHEFACEBOOKDEVCONSOLE </string> 
     </array> 
    </dict> 
</array> 
<key>FacebookAppID</key> 
<string>FACEBOOKAPPIDFROMTHEFACEBOOKDEVCONSOLE</string> 
<key>FacebookDisplayName</key> 
<string>NAME OF YOUR APP</string> 

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSExceptionDomains</key> 
    <dict> 
     <key>facebook.com</key> 
     <dict> 
      <key>NSIncludesSubdomains</key> <true /> 
      <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> 
     </dict> 
     <key>fbcdn.net</key> 
     <dict> 
      <key>NSIncludesSubdomains</key> <true/> 
      <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> 
     </dict> 
     <key>akamaihd.net</key> 
     <dict> 
      <key>NSIncludesSubdomains</key> <true/> 
      <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> 
     </dict> 
    </dict> 
</dict> 
+0

aparently沒有任何錯誤,如果我在一個真正的用戶在設備中測試它,那麼它完美的作品。我有一個問題,爲什麼你需要添加 facebook.com在NSAppTransportSecurity,這假設是一個安全的呼叫權利? –

+0

@ Mr.G我不確定,我直接從Facebook文檔中按​​照這些步驟操作。隨意標記我的答案是正確的,因爲#2實際上是解決您的問題的方法。 –

+0

當然這應該是答案。 –