2015-03-25 2 views
-1

ниже мой класс. Как позвонить автологу с помощью facebook? Я пробовал, но не удался позвонил: LoginHelper = LoginHelper.sharedInstance login.autoLogin ({}, errorHandler: error: String() {}) Спасибо за помощь!Как позвонить классу в swift

class LoginHelper : NSObject, GPPSignInDelegate { 

private let googleClientID = "myClientID" 
private let userDefaultsLoginMethodKey = "LoginMethod" 
private let userDefaultsAppTokenKey = "AppToken" 

var googleSignIn: GPPSignIn 

// google auto login is async, need to save handlers 
var autoLoginCompletionHandler : (() -> Void)? 
var autoLoginErrorHandler : ((err: String) -> Void)? 

class var sharedInstance : LoginHelper { 
    struct Singleton { 
     static let instance : LoginHelper = LoginHelper() 
    } 
    return Singleton.instance 
} 

enum LoginMethod : String { 

    case NotLoggedIn = "NotLoggedIn" 
    case Facebook = "facebook" 
    case Google = "google" 
    case MyApp = "MyApp" 

    func token() -> String? { 
     switch (self) { 
     case .Google: 
      if LoginHelper.sharedInstance.googleSignIn.authentication != nil { 
       return LoginHelper.sharedInstance.googleSignIn.authentication.accessToken 
      } 
     case .Facebook: 
      if FBSession.activeSession().isOpen { 
       if let tokenData = FBSession.activeSession().accessTokenData { 
        return tokenData.accessToken 
       } 
      } 
     default: 
      return nil 
     } 
     return nil 
    } 
} 

var loginMethod : LoginMethod { 

    get { 
     let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() 
     if let method = defaults.stringForKey(userDefaultsLoginMethodKey) { 
      if let loginMethod = LoginMethod(rawValue: method) { 
       return loginMethod 
      } 
     } 
     return LoginMethod.NotLoggedIn 
    } 
    set { 
     let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() 
     defaults.setValue(newValue.rawValue, forKey: userDefaultsLoginMethodKey) 
    } 
} 

var accessToken : String? { 

    get { 
     let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() 
     if let token = defaults.stringForKey(userDefaultsAppTokenKey) { 
      return token 
     } 
     return nil 
    } 
    set { 
     let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() 
     defaults.setValue(newValue, forKey: userDefaultsAppTokenKey) 
    } 
} 

private override init() { 
    googleSignIn = GPPSignIn.sharedInstance() 
    googleSignIn.clientID = googleClientID 
    googleSignIn.shouldFetchGooglePlusUser = true 
    googleSignIn.shouldFetchGoogleUserEmail = true 
    googleSignIn.scopes = [kGTLAuthScopePlusLogin, kGTLAuthScopePlusUserinfoEmail] 
} 

func loginToServer(method : LoginMethod, completionHandler : (() -> Void)? = nil, errorHandler : ((err : String) -> Void)? = nil) { 
    if let token = loginMethod.token() { 
     // login to server with token 
     println("login to server with token"); 
    } 
} 

func autoLogin(completionHandler :() -> Void, errorHandler : (err : String) -> Void) { 

    switch (loginMethod) { 

    case .Google: 

     googleSignIn.delegate = self 
     if googleSignIn.trySilentAuthentication() { 
      // actual login will occur when finishedWithAuth is triggered, 
      // keep completionHandler & errorHandler to be used later 
      autoLoginCompletionHandler = completionHandler 
      autoLoginErrorHandler = errorHandler 
     } else { 
      errorHandler(err: "silent authentication failed for Google") 
     } 

    case .Facebook: 
     if FBSession.openActiveSessionWithAllowLoginUI(false) { 
      loginToServer(loginMethod, completionHandler: completionHandler, errorHandler: errorHandler) 
     } else { 
      errorHandler(err: "failed to login automaticlly to Facebook") 
     } 
    default: 
     println("Skip server login for \(loginMethod.rawValue)") 
     completionHandler() 
    } 
} 

func finishedWithAuth(auth: GTMOAuth2Authentication, error: NSError!) -> Void { 
    if let err = error { 
     println("Failed to login with Google") 
     autoLoginErrorHandler?(err: "failed to login automaticlly to Google") 
    } else { 
     // login to server 
     loginToServer(LoginMethod.Google, completionHandler: autoLoginCompletionHandler, errorHandler: autoLoginErrorHandler) 
    } 
} 

func didDisconnectWithError(error: NSError!) -> Void{ 
} 

} 

Я попытался, но не увенчались успехом пусть Логин: LoginHelper = LoginHelper.sharedInstance login.autoLogin ({}, ErrorHandler: ошибка: String() {})

ответ

0
let login:LoginHelper = LoginHelper.sharedInstance 
login.autoLogin({}, errorHandler: { (err: String) -> Void in 
    //Your error handling code here. 
}) 
+0

Спасибо вам за помощь :) –

Смежные вопросы