管理登录 IOS 应用的用户
Manage User Logged in IOS App
我是初级 IOS 开发人员,我发现很难理解 IOS APP 中用户管理的某些方面。
我已经将 facebook 和 google+ 添加到我的登录视图:
https://drive.google.com/file/d/0B_3MBkUrHOuRS2FEQW9rWUZkUkU/view?usp=sharing
Facebook 和 Google 将数据发送回我的应用程序。
如何访问其他视图中的用户数据。如何通过我的应用程序管理所有这些用户数据。
希望能帮到你
问候
广告
顺便说一句:我以前在 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 客户经理对象?
最好的办法是使用NSUserDefaults来保存用户数据,这样你就可以很方便的调用这些数据Here is a short introduction
我过去这样做的方法是创建一个处理 storing/retrieving 所有相关用户参数的 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 可能仅使用电子邮件登录 up/log,而版本 2 可能使用电子邮件、facebook、google 等,您可能需要调整为这些应用程序保存的值根据您的需要 - 但您只需要在那个 class.
中更改它
还值得注意的是,如果您要存储密码,则不应使用 NSUserDefaults,而应使用钥匙串,快速 Google 搜索无疑会给您带来很多 tutorials/info .
我是初级 IOS 开发人员,我发现很难理解 IOS APP 中用户管理的某些方面。
我已经将 facebook 和 google+ 添加到我的登录视图:
https://drive.google.com/file/d/0B_3MBkUrHOuRS2FEQW9rWUZkUkU/view?usp=sharing
Facebook 和 Google 将数据发送回我的应用程序。
如何访问其他视图中的用户数据。如何通过我的应用程序管理所有这些用户数据。
希望能帮到你 问候 广告
顺便说一句:我以前在 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 客户经理对象?
最好的办法是使用NSUserDefaults来保存用户数据,这样你就可以很方便的调用这些数据Here is a short introduction
我过去这样做的方法是创建一个处理 storing/retrieving 所有相关用户参数的 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 可能仅使用电子邮件登录 up/log,而版本 2 可能使用电子邮件、facebook、google 等,您可能需要调整为这些应用程序保存的值根据您的需要 - 但您只需要在那个 class.
中更改它还值得注意的是,如果您要存储密码,则不应使用 NSUserDefaults,而应使用钥匙串,快速 Google 搜索无疑会给您带来很多 tutorials/info .