[英]Manage User Logged in IOS App
I'm a junior IOS developer, i've find hard to understand some aspects of user management in a IOS APP. 我是一名初级IOS开发人员,我很难理解IOS APP中用户管理的某些方面。
I've already added facebook and google+ to my LoginView: 我已经将facebook和google +添加到我的LoginView中:
https://drive.google.com/file/d/0B_3MBkUrHOuRS2FEQW9rWUZkUkU/view?usp=sharing https://drive.google.com/file/d/0B_3MBkUrHOuRS2FEQW9rWUZkUkU/view?usp=sharing
Facebook and Google send data back to my app. Facebook和Google将数据发送回我的应用程序。
What should i do to access user data in other views. 我应该怎么做才能访问其他视图中的用户数据。 How to manage all this user data through my app. 如何通过我的应用程序管理所有这些用户数据。
Hope you can help Regards ADS 希望您能为Regards ADS提供帮助
btw: I'm used to work in swift but i can interpret OBJ-C 顺便说一句:我曾经工作很快,但我可以解释OBJ-C
1º Edit:------------------------------------------------------------------------ 1º编辑:----------------------------------------------- -------------------------
Changed my login view to: 将我的登录视图更改为:
//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)")
}
And stored the data in Account Manager. 并将数据存储在客户管理器中。
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
}
Am i supose to pass by segue the account manager object anytime i need user data? 每当我需要用户数据时,我是否都可以通过segue客户经理进行传递?
最好的办法是NSUserDefaults的使用保存用户数据,这样就可以非常容易地调用这些数据下面是一个简短的介绍
The way I've done this in the past is create an AccountManager object that handles storing/retrieving all the relevant user params. 我过去完成此操作的方式是创建一个AccountManager对象,该对象处理所有相关的用户参数的存储/检索。
Under the covers this AccountManager object could use NSUserDefaults to store and retrieve account data, such as username, login status, etc... 在幕后,此AccountManager对象可以使用NSUserDefaults来存储和检索帐户数据,例如用户名,登录状态等。
A simple example would be something like this: 一个简单的例子是这样的:
+ (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"];
}
Using the above example, in your login screen when the user successfully logs in, you could call [AccountManager setUserLoggedIn:YES];
使用上面的示例,在用户成功登录后的登录屏幕中,可以调用[AccountManager setUserLoggedIn:YES];
, or if they later log out you can call [AccountManager setUserLoggedIn:NO];
,或者如果他们以后注销,则可以调用[AccountManager setUserLoggedIn:NO];
Lets say there's some view that might change depending on if the user is logged in or not, you can easily determine this by calling [AccountManager isUserLoggedIn];
可以说,根据用户是否登录,有些视图可能会改变,您可以通过调用[AccountManager isUserLoggedIn];
轻松确定[AccountManager isUserLoggedIn];
and format it accordingly. 并进行相应的格式化。
The benefit of having an object that handles all of this stuff, rather than accessing NSUserDefaults values in all your views, is that you have a centralized place where all of the data is set and returned, so if anything changes you only need to change it in one place. 拥有一个处理所有这些东西的对象而不是访问所有视图中的NSUserDefaults值的好处是,您拥有一个集中的位置来设置和返回所有数据,因此,如果有任何更改,您只需要更改它即可在一个地方。 Version 1 of your app might use emails only to sign up/log in, whereas Version 2 might use emails, facebook, google, etc., and you might need to tweak what values you're saving for those depending on your needs - but you'd only have to change it in that one class. 应用程序的版本1可能仅使用电子邮件进行注册/登录,而版本2可能使用电子邮件,facebook,google等,并且您可能需要根据自己的需要调整为这些值保存的值-但您只需要在该类中进行更改即可。
Also worth noting that if you're storing passwords, you shouldn't use NSUserDefaults, but rather use the Keychain, which a quick Google search would undoubtedly give you lots of tutorials/info on. 同样值得注意的是,如果您存储密码,则不应使用NSUserDefaults,而应使用钥匙串,快速的Google搜索无疑会为您提供许多教程/信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.