2016-04-15 13 views
1

Ich konnte die Delegate-Methoden des Account Kits nicht abrufen. Ich könnte mich irren, aber ich denke, das liegt daran, dass die Delegiertenmethoden nicht korrekt von Objective-C in Swift übersetzt wurden. Hier sind die Codebeispiele:Facebook Account Kit in Swift

import AccountKit 
import UIKit 

class LoginViewController: UIViewController, AKFViewControllerDelegate { 

    let accountKit = AKFAccountKit(responseType: .AuthorizationCode) 
    var pendingLoginViewController: UIViewController? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     pendingLoginViewController = accountKit.viewControllerForLoginResume() 
    } 

    @IBAction func loginWithEmail(sender: AnyObject) { 
     let viewController = accountKit.viewControllerForEmailLoginWithEmail(nil, state: generateState()) as! AKFViewController 
     viewController.enableSendToFacebook = true 
     viewController.delegate = self 
     presentViewController(viewController as! UIViewController, animated: true, completion: nil) 
    } 

    private func generateState() -> String { 
     let uuid = NSUUID().UUIDString 
     let indexOfDash = uuid.rangeOfString("-")!.startIndex 
     return uuid.substringToIndex(indexOfDash) 
    } 

    func viewController(viewController: UIViewController!, didCompleteLoginWithAuthorizationCode code: String!, state: String!) { 
     // This function doesn't get called when user finished their login 
    } 
} 

Antwort

2

Versuchen Sie, zusätzliche 3 Delegate Methoden implementieren. Ich habe das schnell versucht. Fehler Callback wird für mich aufgerufen (# 3). Das ist in Ordnung, da ich die korrekte SDK-Initialisierung nicht abgeschlossen habe. Möglicherweise haben Sie die gleiche Situation, so dass Sie den Controller als Fehler beim Rückruf anzeigen. Da dieser Rückruf nicht implementiert ist, sind Sie sich dessen nicht bewusst:

func viewController(viewController: UIViewController!, didCompleteLoginWithAuthorizationCode code: String!, state: String!) { 
    print("1") 
} 

func viewController(viewController: UIViewController!, didCompleteLoginWithAccessToken accessToken: AKFAccessToken!, state: String!) { 
    print("2") 
} 

func viewController(viewController: UIViewController!, didFailWithError error: NSError!) { 
    print("3") 
} 

func viewControllerDidCancel(viewController: UIViewController!) { 
    print("4") 
} 
+0

Keine dieser Rückrufe für mich aufgerufen. Können Sie mir Ihren Setup-Code zeigen? – Thi

+1

Ja, sicher. http://collabedit.com/nu33e –

+0

Erhalten Sie den Dialog-Ansicht-Controller präsentiert? Wenn dies der Fall ist, versuchen Sie eine falsche E-Mail-Adresse einzugeben - ich erhalte den Rückruf # 3. Danach kannst du "Abbrechen" versuchen - Callback # 4 wird für mich aufgerufen. BTW Ich benutze Swift 2.2 Compiler (neuste). Sie können auch versuchen, die Implementierung der Delegatmethode mit dem @objc-Schlüsselwort zu markieren. –

0

Ich lag falsch. Ich setze responseType auf .AuthorizationCode, warte aber auf einen Rückruf auf .AccessToken.

0

@JayVDiyk: Wie erhalten Sie die vom Benutzer eingegebene Telefonnummer aus dem Rückruf? -

Antwort: Sie können das bekommen vom accountkit Objekt von requestAccount menthod

accountKit.requestAccount({ account, error in 
 
       print("Account number \(account?.accountID)") 
 
       print("Email: \(account?.emailAddress)") 
 
       print("Phone: \(account?.phoneNumber?.stringRepresentation())") 
 
})