2016-08-03 122 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

当然这应该是答案。 –