管理登录IOS App的用户

时间:2015-02-20 18:06:27

标签: ios facebook swift google-plus

我是初级IOS开发人员,我发现在IOS APP中很难理解用户管理的某些方面。

我已经将facebook和google +添加到了我的LoginView:

https://drive.google.com/file/d/0B_3MBkUrHOuRS2FEQW9rWUZkUkU/view?usp=sharing

Facebook和Google将数据发送回我的应用程序。

如何在其他视图中访问用户数据。如何通过我的应用程序管理所有这些用户数据。

希望你能提供帮助 问候 ADS

顺便说一句:我以前在swift工作,但我可以解释OBJ-C

1º编辑:-------------------------------------------- ----------------------------

将我的登录视图更改为:

 //MARK: Facebook Delegate Methods

func loginViewShowingLoggedInUser(loginView : FBLoginView!) {
    println("User Logged In")
}

func loginViewFetchedUserInfo(loginView : FBLoginView!, user: FBGraphUser) {
    // Store Facebook User Id
    userAccountManager.setUserId(user.objectForKey("id") as String)
    //Store Facebook User Name
    userAccountManager.setUserName(user.name)
    //Store Facebook E-mail account
    userAccountManager.setUserMail(user.objectForKey("email") as String)
    //MARK: FACEBOOK Session Token -------------------------------------------------------------<
    userAccountManager.setUserToken(FBSession.activeSession().accessTokenData.accessToken)

    userAccountManager.setUserLoggedIn(true)
}

func loginViewShowingLoggedOutUser(loginView : FBLoginView!) {
    println("User Logged Out")
}

func loginView(loginView : FBLoginView!, handleError:NSError) {
    println("Error: \(handleError.localizedDescription)")
}

//MARK: Google+ Methods

func finishedWithAuth(auth: GTMOAuth2Authentication!, error: NSError!) {
   storeUserData()
}


func storeUserData(){
    //Storing Google userId
    userAccountManager.setUserId(signIn?.userID as String!)
    //Storing Google User Name
    userAccountManager.setUserName(signIn?.googlePlusUser.valueForKey("displayName") as String)
    //Soting google e-mail account
    userAccountManager.setUserMail(signIn?.userEmail as String!)
    //MARK: GOOGLE Session Token -------------------------------------------------------------<
    userAccountManager.setUserToken(signIn?.idToken as String!)

    userAccountManager.setUserLoggedIn(true)
}

func didDisconnectWithError(error: NSError!) {
    println("Google Error: \(error)")
}

并将数据存储在客户经理中。

class AccountManager{

var userDefaults = NSUserDefaults()


func setUserId(userId : String){
    userDefaults.setValue(userId, forKey: "USERID_KEY")
}

func setUserLoggedIn(loggedIn : Bool){
   userDefaults.setBool(loggedIn, forKey: "USER_LOGGED_IN_KEY")
}

func setUserName(userName : String){
    userDefaults.setValue(userName, forKey: "USERNAME_KEY")
}

func setUserMail(userMail : String){
    userDefaults.setValue(userMail, forKey: "USERMAIL_KEY")
}

func setUserToken(userToken :String){
    userDefaults.setValue(userToken, forKey: "USERTOKEN_KEY")
}

func getUserToken() -> String{
    return userDefaults.valueForKey("USERTOKEN_KEY") as String
}

func isUserLoggedIn() -> Bool{
    return userDefaults.valueForKey("USER_LOGGED_IN_KEY") as Bool
}

func getUserName() -> String {
    return userDefaults.valueForKey("USERNAME_KEY") as String
}

func getUserMail() -> String {
    return userDefaults.valueForKey("USERMAIL_KEY") as String
}
func getUserID() -> String {
    return userDefaults.valueForKey("USERID_KEY") as String
}

我是否需要在需要用户数据的时候通过segue传递客户经理对象?

2 个答案:

答案 0 :(得分:4)

最好的办法是使用NSUserDefaults来保存用户数据,这样您就可以非常轻松地调用这些数据Here is a short introduction

答案 1 :(得分:3)

我过去这样做的方法是创建一个AccountManager对象来处理存储/检索所有相关的用户参数。

这个AccountManager对象可以使用NSUserDefaults来存储和检索帐户数据,例如用户名,登录状态等......

一个简单的例子是这样的:

+ (void)setUserLoggedIn:(BOOL)loggedIn {
    [[NSUserDefaults standardUserDefaults] setBool:loggedIn forKey:@"USER_LOGGED_IN_KEY"];
}

+ (BOOL)isUserLoggedIn {
    return [[NSUserDefaults standardUserDefaults] boolForKey:@"USER_LOGGED_IN_KEY"];
}

+ (void)setUsername:(NSString *)username {
    [[NSUserDefaults standardUserDefaults] setValue:username forKey:@"USERNAME_KEY"];
}

+ (NSString *)getUsername {
    return [[NSUserDefaults standardUserDefaults] valueForKey:@"USERNAME_KEY"];
}

使用上面的示例,在用户成功登录后的登录屏幕中,您可以拨打[AccountManager setUserLoggedIn:YES];,或者如果他们稍后退出,您可以拨打[AccountManager setUserLoggedIn:NO];

让我们说某些视图可能会根据用户是否登录而改变,您可以通过调用[AccountManager isUserLoggedIn];轻松确定这一点,并相应地对其进行格式化。

拥有处理所有这些内容的对象而不是在所有视图中访问NSUserDefaults值的好处是,您拥有一个集中的位置,可以设置和返回所有数据,因此如果有任何更改,您只需要在一个地方改变它。您的应用版本1可能仅使用电子邮件进行注册/登录,而版本2可能会使用电子邮件,Facebook,谷歌等,您可能需要根据需要调整为这些值保存的值 - 但你只需在那一堂课中改变它。

另外值得注意的是,如果您要存储密码,则不应使用NSUserDefaults,而应使用Keychain,快速的Google搜索无疑会为您提供大量的教程/信息。