2016-04-09 3 views
0

Я пытаюсь сделать так, чтобы пользователь мог войти в систему, даже если приложение закрывается. Кажется, я не могу заставить свою функцию работать правильно. У меня есть функция, которая регистрирует пользователя и работает, когда кнопка нажата, но я не могу назвать функцию в нужном месте, чтобы загрузить ее только после того, как пользователь выполнил вход в первый раз и затем закрыл приложение, но не выходит из системы. Вот мой код контроллера вид:Сохранение пользователя после первоначального входа в Backendless

ViewControler

import UIKit 
import FBSDKCoreKit 
import FBSDKLoginKit 

class ViewController: UIViewController { 


let APP_ID = "i have it" 
let SECRET_KEY = "i have it" 
let VERSION_NUM = "v1" 

var backendless = Backendless.sharedInstance() 




@IBOutlet weak var userEmail: UITextField! 


@IBOutlet weak var password: UITextField! 


func displayAlert(title: String, message: String) { 

    let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert) 
    alert.addAction((UIAlertAction(title: "OK", style: .Default, handler: { (action) -> Void in 

     self.dismissViewControllerAnimated(true, completion: nil) 

    }))) 

    self.presentViewController(alert, animated: true, completion: nil) 


} 







@IBAction func signUp(sender: AnyObject) { 

    let user = BackendlessUser() 
    user.email = self.userEmail.text 
    user.password = self.password.text 


    if userEmail.text == "" || password.text == ""{ 

     displayAlert("Error in form", message: "Please enter a email adress and password") 

    } else{ 

    backendless.userService.registering(user, 
             response: { (registeredUser : BackendlessUser!) ->() in 
              print("User has been registered (ASYNC): \(registeredUser)") 
     }, 
             error: { (fault : Fault!) ->() in 
              print("Server reported an error: \(fault)") 
     } 
    ) 
    } 

} 




@IBAction func logIn(sender: AnyObject) { 


    if userEmail.text == "" || password.text == ""{ 

     displayAlert("Error in form", message: "Please enter a email adress and password") 

    }else{ 





loginUserAsync() 


     let appDelegate = UIApplication.sharedApplication().delegate! as! AppDelegate 

     var initialViewController = self.storyboard!.instantiateViewControllerWithIdentifier("myTabbarControllerID") as! UIViewController 
     appDelegate.window?.rootViewController = initialViewController 
     appDelegate.window?.makeKeyAndVisible() 



    } 
} 


func loginUserAsync() { 

    let user = BackendlessUser() 
    user.email = self.userEmail.text 
    user.password = self.password.text 

    backendless.userService.login(

     self.userEmail.text, password:self.password.text, 

     response: { (user : BackendlessUser!) ->() in 

      self.backendless.userService.setPersistentUser() 

      self.backendless.userService.setStayLoggedIn(true) 

      self.backendless.userService.getPersistentUser() 

      let user = self.backendless.userService.currentUser 

      if (user != nil) { 

       // get user's email (i.e. mandatory/predefined property) 

       let userEmail = user.email 
       let password = user.password 



       let appDelegate = UIApplication.sharedApplication().delegate! as! AppDelegate 

       var initialViewController = self.storyboard!.instantiateViewControllerWithIdentifier("myTabbarControllerID") as! UIViewController 
       appDelegate.window?.rootViewController = initialViewController 
       appDelegate.window?.makeKeyAndVisible() 
      } 

      else if (user == nil) { 

       print("User hasn't been logged") 

      } 

     }, 

     error: { (fault : Fault!) ->() in 

      print("Server reported an error: \(fault)") 

     } 

    ) 

} 

func validUserTokenAsync() { 
    backendless.userService.isValidUserToken(
     { (var result : AnyObject!) ->() in 
      print("isValidUserToken (ASYNC): \(result.boolValue)") 
     }, 
     error: { (var fault : Fault!) ->() in 
      print("Server reported an error (ASYNC): \(fault)") 
     } 
    ) 
} 


override func viewDidLoad() { 
    super.viewDidLoad() 



    let loginButton = FBSDKLoginButton() 
    loginButton.center = self.view.center 
    self.view.addSubview(loginButton) 



} 


override func viewDidAppear(animated: Bool) { 
    loginUserAsync() 
} 


override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 









} 
+0

Вы можете сохранить токены или логические значения по умолчанию пользователя. Затем, когда человек вернется в приложение, посмотрите, есть ли у вас это сохраненное значение и обойти процесс входа в систему. Будет ли это работать на вас? – ryantxr

+0

Я не уверен, как это сделать. Я очень новичок в Backendless. Можете ли вы привести мне пример кода? –

+0

Мое предыдущее решение перестало работать внезапно :( –

ответ

0

Убедитесь вызвать следующую функцию:

self.backendless.userService.setStayLoggedIn(true) 

перед "backendless.userService.login", а не в обработчике ответа Войти ,

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