2016-08-03 20 views
0

私のアプリではFacebookのログインを統合し、必要な設定をすべて入れました。しかし、私がログインしようとしていたとき、私はios9のfacebookログインの問題

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

このエラーを取得しますが、私はの.plistファイル内

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

を入れている、私は問題を見つけることができることをとにかくです?

は、私はあなたの問題を引き起こす可能性がカップルの事があると思い

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を追加し、あなたの迅速なファイルの先頭に以下の行を追加したことを確認しています:

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

が実際には何も間違っていませんでした。私はなぜNSAppTransportSecurityに facebook.comを追加する必要があるのか​​疑問があります。これは安全な呼び出しの権利であると思われますか? –

+0

@ Mr.G私はわかりません、私はFacebookのドキュメントから直接これらの手順に従いました。 #2は実際にあなたの問題の解決策だったので、私の答えを正確に記入してください。 –

+0

もちろん、これが答えになるはずです。 –

関連する問題