我的应用程序在从手机上卸载应用程序后无法注销当前用户。我不希望用户卸载该应用,当他们重新安装时,他们已经登录。
我认为这可能与其钥匙串访问有关?不确定。我想也许我需要在删除应用程序后取消对用户进行身份验证,但无法检查该情况。最接近的是运行applicationWillTerminate
函数,但如果我将FIRAuth.auth()?.signOut()
放在那里,每次应用程序被杀时都会签署我的用户。我不想要那个。
我将如何开展这项工作?
答案 0 :(得分:18)
虽然没有任何功能或处理程序可以检查从手机上卸载应用程序的时间,但我们可以检查是否是应用程序首次启动。首次启动应用程序的可能性很大,这也意味着它刚刚安装好,并且在应用程序中没有配置任何内容。此流程将在didfinishLaunchingWithOptions
行以上的return true
执行。
首先,我们必须设置用户默认值:
let userDefaults = UserDefaults.standard
在此之后,我们需要检查应用程序之前是否已启动或之前是否已启动:
if userDefaults.bool(forKey: "hasRunBefore") == false {
print("The app is launching for the first time. Setting UserDefaults...")
// Update the flag indicator
userDefaults.set(true, forkey: "hasRunBefore")
userDefaults.synchronize() // This forces the app to update userDefaults
// Run code here for the first launch
} else {
print("The app has been launched before. Loading UserDefaults...")
// Run code here for every other launch but the first
}
我们现在已经检查过应用程序是否首次启动。现在我们可以尝试注销我们的用户。以下是更新条件的外观:
if userDefaults.bool(forKey: "hasRunBefore") == false {
print("The app is launching for the first time. Setting UserDefaults...")
do {
try FIRAuth.auth()?.signOut()
} catch {
}
// Update the flag indicator
userDefaults.set(true, forkey: "hasRunBefore")
userDefaults.synchronize() // This forces the app to update userDefaults
// Run code here for the first launch
} else {
print("The app has been launched before. Loading UserDefaults...")
// Run code here for every other launch but the first
}
我们现在已经检查过用户是否是第一次启动应用程序,如果是,请注销用户(如果之前已登录过)。所有代码放在一起应如下所示:
let userDefaults = UserDefaults.standard
if userDefaults.bool(forKey: "hasRunBefore") == false {
print("The app is launching for the first time. Setting UserDefaults...")
do {
try FIRAuth.auth()?.signOut()
} catch {
}
// Update the flag indicator
userDefaults.set(true, forkey: "hasRunBefore")
userDefaults.synchronize() // This forces the app to update userDefaults
// Run code here for the first launch
} else {
print("The app has been launched before. Loading UserDefaults...")
// Run code here for every other launch but the first
}