在iOS swift应用程序上续订用户令牌

在iOS swift应用程序上续订用户令牌,ios,swift,authentication,Ios,Swift,Authentication,我需要续订发送到数据库的用户令牌,以验证和处理来自应用程序的请求 为了安全起见,用户令牌每个月都会过期,因此我必须调用函数,使每20天或25天续订一次令牌 我曾考虑过使用NSTimer,但当应用程序关闭时,它会停止,因此不是解决方案 您知道如何执行此操作吗?存储令牌上次更新的日期或直到其有效的日期,并在应用程序再次打开时续订令牌。这是在iOS上实现这一点的唯一方法。你不能在后台有一个长时间运行的计时器,系统会杀死它 另一种选择是在令牌即将过期或已过期时发送远程通知,然后续订令牌(它将唤醒应用程序

我需要续订发送到数据库的用户令牌,以验证和处理来自应用程序的请求

为了安全起见,用户令牌每个月都会过期,因此我必须调用函数,使每20天或25天续订一次令牌

我曾考虑过使用NSTimer,但当应用程序关闭时,它会停止,因此不是解决方案


您知道如何执行此操作吗?

存储令牌上次更新的日期或直到其有效的日期,并在应用程序再次打开时续订令牌。这是在iOS上实现这一点的唯一方法。你不能在后台有一个长时间运行的计时器,系统会杀死它

另一种选择是在令牌即将过期或已过期时发送远程通知,然后续订令牌(它将唤醒应用程序)。

这样做

// Get current date
let date = NSDate()
// Add 20 days to it
let tokenDaysAdded: NSDate = date.dateByAddingTimeInterval(Double(60 * 60 * 24 * 20)) as! NSDate
// Save it to your NSUserDefaults
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setValue(tokenDaysAdded, forKey: "token")

// Get the token date
let tokenDate = defaults.objectForKey("token")!
// Get current date
let now: NSDate = NSDate()

// Check if tokenDaysAdded is earler than today, then you´re ok
if tokenDaysAdded.earlierDate(now) == tokenDate as! NSObject {
    // you´re ok
}
// Else you need to update the token since tokenDaysAdded is greater than todays date
else {
    // tokenDaysAdded is earlier
    // Send notifcation about updating the token
}

如何查看令牌更新日期与应用程序打开日期之间的天数差异?将日期存储为userdefaults或coredata中的
NSDate()
,然后在应用程序打开时,将该日期与当前日期进行比较它总是转到else条件来更新令牌。我将查看@SantiagocarmonagonzalezI更新的代码,以便您将创建令牌的日期立即保存+20天,当您获得令牌时,您会在不添加任何天的情况下对其进行比较,之前的版本中存在错误。因此,您保存为默认值的tokenDaysAdded是最后一个有效日期,您与todays date@Santiagocarmonagonzalez比较的日期一件事是,如果条件是:if tokenDaysAdded.earlierDate(现在)==now{//you're'ok},因为tokenDaysAdded.earlierDate(现在)返回今天的日期,那么您确定这种方法支持时区吗?