2016-10-11 3 views
0

Ich versuche, Facebook-Login in meiner App zu implementieren, aber wenn ich versuche, es zu Facebook App einloggen und kommt zurück zu meinem Spiel, aber der Login-Button wird nicht ausloggen und wenn ich es versuche Wenn Sie Informationen wie Zugriffstoken, erteilte Berechtigungen oder abgelehnte Berechtigungen erhalten, ist dies gleich null. Dies ist der Code ich habe:Facebook Login funktioniert nicht in swift

import Foundation 
class IntroScene: SKScene, FBSDKLoginButtonDelegate { 
let loginButton: FBSDKLoginButton = { 
    let button = FBSDKLoginButton() 
    button.readPermissions = ["email"] 
    return button 
}() 

override func didMove(to view: SKView) { 
    self.backgroundColor = UIColor.black 

    view.addSubview(loginButton) 
    loginButton.center = (self.view?.center)! 
    loginButton.delegate = self 
} 

func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) { 

} 

func loginButtonWillLogin(loginButton: FBSDKLoginButton!) -> Bool { 
    return true 
} 

func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) { 
    if(error == nil) 
    { 
     print("login complete") 
     //print(FBSDKAccessToken.current()) -> crashes because its nil 
     //print(result.grantedPermissions) -> crashes its nil 
    } 
    else{ 
     print(error.localizedDescription) 
    } 
} 
} 

mein info.plist sieht wie folgt aus:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>UIViewControllerBasedStatusBarAppearance</key> 
    <false/> 
    <key>LSApplicationQueriesSchemes</key> 
    <array> 
     <string>fbapi</string> 
     <string>fb-messenger-api</string> 
     <string>fbauth2</string> 
     <string>fbshareextension</string> 
    </array> 
    <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> 
    <key>CFBundleURLTypes</key> 
    <array> 
     <dict> 
      <key>CFBundleURLSchemes</key> 
      <array> 
      <string>//fbmyid</string> 
     </array> 
    </dict> 
</array> 
<key>FacebookAppID</key> 
<string>//myid</string> 
<key>FacebookDisplayName</key> 
<string>Crazy Traffic Saga</string> 
<key>CFBundleDevelopmentRegion</key> 
<string>en</string> 
<key>CFBundleExecutable</key> 
<string>$(EXECUTABLE_NAME)</string> 
<key>CFBundleIdentifier</key> 
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> 
<key>CFBundleInfoDictionaryVersion</key> 
<string>6.0</string> 
<key>CFBundleName</key> 
<string>$(PRODUCT_NAME)</string> 
<key>CFBundlePackageType</key> 
<string>APPL</string> 
<key>CFBundleShortVersionString</key> 
<string>1.0</string> 
<key>CFBundleSignature</key> 
<string>????</string> 
<key>CFBundleVersion</key> 
<string>1</string> 
<key>LSRequiresIPhoneOS</key> 
<true/> 
<key>UILaunchStoryboardName</key> 
<string>LaunchScreen</string> 
<key>UIMainStoryboardFile</key> 
<string>Main</string> 
<key>UIRequiredDeviceCapabilities</key> 
<array> 
    <string>armv7</string> 
</array> 
<key>UISupportedInterfaceOrientations</key> 
<array> 
    <string>UIInterfaceOrientationPortrait</string> 
    <string>UIInterfaceOrientationLandscapeLeft</string> 
    <string>UIInterfaceOrientationLandscapeRight</string> 
</array> 
<key>UISupportedInterfaceOrientations~ipad</key> 
<array> 
    <string>UIInterfaceOrientationPortrait</string> 
    <string>UIInterfaceOrientationPortraitUpsideDown</string> 
    <string>UIInterfaceOrientationLandscapeLeft</string> 
    <string>UIInterfaceOrientationLandscapeRight</string> 
</array> 

+0

die rasche Version verwenden Sie? –

+0

Nicht gut genug, um Ihnen eine vollständige Lösung zu geben, also hier ist es. Probieren Sie es aus, https://edbinx.com/apple/ios/use-facebook-fbsdk-swift-cocoapods-ios-9-13369.html – Fennec

+0

Im mit Swift 3 @HimanshuMoradiya – toiavalle

Antwort

3

Dank diesen Beitrag: FB Login using Swift 3 not returning any values and not get back the user to the App after successful login fand ich das Problem. Es gibt eine weitere Funktion, die zu App Delegate hinzugefügt werden sollte. Hier ist, wie ich Facebook-Login bekam

  • herunterladen SDK arbeiten und fügen

  • einrichten info.plist nach Facebook-Website

  • In AppDelegate Projekt hinzugefügt:

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    // Override point for customization after application launch. 
    FIRApp.configure() 
    FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) 
    
    return true 
    } 
    
    public func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 
    
        return FBSDKApplicationDelegate.sharedInstance().application(
         app, 
         open: url as URL!, 
         sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, 
        annotation: options[UIApplicationOpenURLOptionsKey.annotation] 
    ) 
    } 
    
    public func application(_ application: UIApplication, open url: URL,  sourceApplication: String?, annotation: Any) -> Bool { 
         return FBSDKApplicationDelegate.sharedInstance().application(
          application, 
          open: url as URL!, 
          sourceApplication: sourceApplication, 
          annotation: annotation) 
    } 
    
  • In der SKScene zeige ich den Button (könnte auch in einem View Controller sein):

    class IntroScene: SKScene, FBSDKLoginButtonDelegate { 
        override func didMove(to view: SKView) { 
         self.backgroundColor = UIColor.black 
         let loginButton = FBSDKLoginButton() 
         loginButton.center = (self.view?.center)! 
         self.view?.addSubview(loginButton) 
         loginButton.frame = CGRect(x: 0, y: 0, width: 360, height: 60) // makes it bigger 
         loginButton.center = CGPoint(x: self.frame.midX, y: self.frame.midY + 90) 
         loginButton.delegate = self 
         loginButton.readPermissions = ["public_profile", "email"] 
         if let _ = FBSDKAccessToken.current(){ 
          //already logged in 
          fetchProfile() 
         } 
        } 
        func fetchProfile() { 
        let parameters = ["fields": "first_name, email, last_name, picture"] 
    
        FBSDKGraphRequest(graphPath: "me", parameters: parameters).start(completionHandler: { (connection, user, requestError) -> Void in 
    
         if requestError != nil { 
          print("----------ERROR-----------") 
          print(requestError) 
          return 
         } 
         let userData = user as! NSDictionary 
         let email = userData["email"] as? String 
         let firstName = userData["first_name"] as? String 
         let lastName = userData["last_name"] as? String 
         var pictureUrl = "" 
         if let picture = userData["picture"] as? NSDictionary, let data = picture["data"] as? NSDictionary, let url = data["url"] as? String { 
          pictureUrl = url 
          print(pictureUrl) 
         } 
        }) 
        } 
    
    } 
    
1

diesen Code in Ihrem AppDelegate.swift Put

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

prüfen FacebookAccessToken Sie in Ihrem Facebook Button Klicken Sie auf ViewController.

if FBSDKAccessToken.currentAccessToken() != nil { 
      FBSDKLoginManager().logOut() 
      return 
} 

let login:FBSDKLoginManager = FBSDKLoginManager() 
login.logInWithReadPermissions(["email"], handler: { (result:FBSDKLoginManagerLoginResult!, error:NSError!) -> Void in 
    if(error != nil){ 
      FBSDKLoginManager().logOut() 
    }else if(result.isCancelled){ 
      FBSDKLoginManager().logOut() 
    }else{ 
       //Handle login success 
      self.returnUserData() 
     } 
}) 

Erhalten Sie die Antwort von FacebookData.

func returnUserData() 
{ 
    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "email"]) 
    graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in 
     if ((error) != nil) 
     { 
      // Process error 
      print("Error: \(error)") 
     } 
     else 
     { 
      print(result) 

     } 
    }) 
} 
+0

Ich habe die App Delegate Code bereits (Entschuldigung habe ich vergessen, in der Frage zu berücksichtigen). Für den mittleren Teil wo genau sollte ich den Code setzen? Benötige ich einen View Controller oder kann ich den SKScene Im verwenden? und wo soll ich es hinstellen? AnsichtDidLoad? Außerdem erhalte ich diesen Fehler, wenn ich versuche, den Wert des Typs '(FBSDKLoginManagerLoginResult !, NSError!) -> Void' in den erwarteten Argumenttyp 'FBSDKLoginManagerRequestTokenHandler' zu konvertieren!' – toiavalle

+0

@toiavalle ich benutze nicht Swift 3.0 Ich benutze Swift 2.0 so ist ihre mögliche von Ihrer Seite dann konvertieren Sie diesen Code für die Arbeit gut in Swift 3.0. Vielen Dank. –

1

Jetzt Angebote Facebook folgen Swift sdk für deine iOS App. Swift sdk for Facebook

Überprüfen Sie, dass aus und haben Spaß

Verwandte Themen