Swift2 iOS-注销当前用户并创建新用户可保留旧用户';s新用户的默认值
我正在为我的项目使用模拟器。当用户登录时,我使用Swift2 iOS-注销当前用户并创建新用户可保留旧用户';s新用户的默认值,ios,swift,boolean,nsuserdefaults,backend,Ios,Swift,Boolean,Nsuserdefaults,Backend,我正在为我的项目使用模拟器。当用户登录时,我使用NSUserDefaults来确定他们将进入哪个级别。例如 杰克下载了我的应用程序,创建了一个帐户,从一级开始,买了一些魔法,因为他买了魔法,他现在可以跳过一级了。杰克现在处于2级并退出游戏。一旦杰克注销并重新登录,他现在将降落在2层 在LevelOneVC中有一个buyMagic按钮,用于神奇的购买/级别跳过 在Signenvc中,我使用NSUserDefaults.standardUserDefaults().boolForKey来确定是否购买
NSUserDefaults
来确定他们将进入哪个级别。例如
杰克下载了我的应用程序,创建了一个帐户,从一级开始,买了一些魔法,因为他买了魔法,他现在可以跳过一级了。杰克现在处于2级并退出游戏。一旦杰克注销并重新登录,他现在将降落在2层
在LevelOneVC中有一个buyMagic按钮,用于神奇的购买/级别跳过
在Signenvc中,我使用NSUserDefaults.standardUserDefaults().boolForKey
来确定是否购买了该魔法,在这种情况下,它是真的
,这将决定将Jack发送到哪个级别。该布尔值在登录按钮中访问
吉尔是杰克的朋友,她借用了杰克的手机,创建了一个帐户,她一登录就进入了2级。她应该在1级着陆,因为她是一个不同的用户,显然有不同的Firebase uid
,然后是Jack(我打印了它们以确保)
我使用Firebase
作为后端,它成功地将用户登录和注销,并且他们都得到不同的uid
。但是,由于我使用的是模拟器,因此似乎正在记录NSUserDefault
值,无论哪个用户登录,他们都将获得以前的用户值
我还尝试在注册VC中将bool
改回false,但所做的只是吉尔注销,杰克重新登录,他再次从1级开始
仅供参考,让我澄清一下,我在NSUserdefaults
中保存的唯一价值是他们是否购买了魔法,而不是他们的电子邮件或购买信息等
我想这些问题将适用于任何其他特定于设备的信息,例如用户可以为我的应用程序指定的特定背景颜色或字体。我不认为这是服务器端数据
,而是将它们保存在NSUserDefaults
中
我应该保存他们是否在NSUserDefaults或我的Firebase后端购买了魔法的信息吗?我哪里出错了?
吉尔在第二层着陆是因为她使用的是同一台设备吗?
在使用后端之外,我如何获取它,以便在多个用户使用同一设备时,一旦1个用户注销,以前值中的其他日志将不会被保存
顺便说一句,我还尝试使用带有全局bool变量的单例类
,但出现了相同的问题。我没有包括在内
AppDelegate:
class AppDelegate: UIResponder, UIApplicationDelegate {
//this is initially a false value
NSUserDefaults.standardUserDefaults().boolForKey("wasMagicBought")
}
符号
SignInController: UIViewController{
let magicPurchased = NSUserDefaults.standardUserDefaults().boolForKey("wasMagicBought")
@IBAction func signIn(sender: UIButton){
//firebase method to sign user in and handler with async_brings them inside based off of the NSUserDefaults value
dispatch_async(dispatch_get_main_queue()){
if magicPurchased{
//function to bring them to level 2
}else{
//function to bring them to level 1
//If it's their first time making an account or if they made an account but never made it pass level 1 without buying magic this should always run i.e. Jill.
}
}
}
}
LevelOneVC
LevelOneController: UIViewController{
@IBAction func buyMagic(sender: UIButton){
self.skipLevelOne()
}
func skipLevelOne(){
self.buyMagic()
//since they bought the magic I now log it in NSUserDefaults as true
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "wasMagicBought")
}
func buyMagic(){
//code for the user to purchase the magic allows them to skip to level 2
}
}
注册VC
注册控制器:UIViewController{
@IBAction func signUp(sender: UIButton){
//code to sign user up
NSUserDefaults.standardUserDefaults().setBool(false, forKey: "wasMagicBought")
}
}注册用户的游戏到达级别应更新为后端API。你们永远不应该依赖于在应用程序中维护它们
if let gameLevel = user["gameLevel"] as? Int { // user is a payload received from API
// if gameLevel is 2, user should be moved to 2nd level
// and similarly check if magicBought is true
}
在Swift 3中,当用户注销时,可以从NSUserDefaults中删除该值,也可以将其更改为false
UserDefaults.standard.set(false, forKey: "wasMagicBought")
UserDefaults.standard.synchronize() // use this to save the updates immediately
或
注册用户的游戏达到级别应更新为后端API。你们永远不应该依赖于在应用程序中维护它们
if let gameLevel = user["gameLevel"] as? Int { // user is a payload received from API
// if gameLevel is 2, user should be moved to 2nd level
// and similarly check if magicBought is true
}
在Swift 3中,当用户注销时,可以从NSUserDefaults中删除该值,也可以将其更改为false
UserDefaults.standard.set(false, forKey: "wasMagicBought")
UserDefaults.standard.synchronize() // use this to save the updates immediately
或
实际上,我认为这种类型的数据(购买)应该由后端保存。由于许多原因,将密钥存储在本地是不安全的:其中一个原因是您需要在新用户登录时删除此密钥,这意味着您将丢失前一个密钥的所有数据
按照马特说的做,如果杰克再次登录,他将再次从1级开始
您可以决定是将这些数据保存在Firebase上,还是构建一个更复杂的数据来存储,比如一个以用户id为键的字典
purchaseDictionary: [String: Bool] = [
jackId: true,
jillId: false
]
如果你决定<代码> NSUDER Debug 方式,你应该考虑,如果<代码>杰克<代码>将卸载应用程序或更改iPhone,他将丢失任何数据。
实际上,我认为这种类型的数据(购买)应该由后端保存。由于许多原因,将密钥存储在本地是不安全的:其中一个原因是您需要在新用户登录时删除此密钥,这意味着您将丢失前一个密钥的所有数据
按照马特说的做,如果杰克再次登录,他将再次从1级开始
您可以决定是将这些数据保存在Firebase上,还是构建一个更复杂的数据来存储,比如一个以用户id为键的字典
purchaseDictionary: [String: Bool] = [
jackId: true,
jillId: false
]
如果你决定<代码> NSUDER Debug 方式,你应该考虑,如果<代码>杰克<代码>将卸载应用程序或更改iPhone,他将松开任何数据。
< P>对于有此问题的任何其他人,不要使用NSULSDER故障来保存游戏级别。马特和卢卡·达阿尔贝蒂说的都是对的
@马特
注册用户的游戏访问级别应更新为后端API。您永远不应该依赖于在应用程序中维护它们。
@卢卡·阿尔贝蒂
实际上,我认为这种类型的数据(购买)应该由后端保存。将密钥存储在本地是不安全的,原因有很多:其中一个原因是您需要在新用户登录时删除此密钥,这意味着您将丢失前一个密钥的所有数据。
向上投票选择其中一个。对于其他有此问题的人,不要使用NSUserDefaults保存游戏级别。马特和卢卡·达阿尔贝蒂说的都是对的
@马特
注册用户的游戏访问级别应更新为后端API。您永远不应该依赖于在应用程序中维护它们。
@卢卡·阿尔贝蒂
实际上,我认为这种类型的数据(购买)应该由后端保存。在本地存储这些密钥是不安全的,原因有很多:其中一个原因是您需要在任何时候新的u